aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/DbSqlite2
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:51:12 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:51:12 -0400
commitfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (patch)
tree1e50f5f666f419143f510d5ded00fe2006b7bd85 /Plugins/DbSqlite2
parentd9aa870e5d509cc7309ab82dd102a937ab58613a (diff)
New upstream version 3.2.1+dfsg1upstream/3.2.1+dfsg1
Diffstat (limited to 'Plugins/DbSqlite2')
-rw-r--r--Plugins/DbSqlite2/DbSqlite2.pro6
-rw-r--r--Plugins/DbSqlite2/dbsqlite2.cpp15
-rw-r--r--Plugins/DbSqlite2/dbsqlite2.h7
-rw-r--r--Plugins/DbSqlite2/package.xml10
-rw-r--r--Plugins/DbSqlite2/queryexecutorsqlite2delete.cpp30
-rw-r--r--Plugins/DbSqlite2/queryexecutorsqlite2delete.h24
6 files changed, 90 insertions, 2 deletions
diff --git a/Plugins/DbSqlite2/DbSqlite2.pro b/Plugins/DbSqlite2/DbSqlite2.pro
index ae58ad4..9873a39 100644
--- a/Plugins/DbSqlite2/DbSqlite2.pro
+++ b/Plugins/DbSqlite2/DbSqlite2.pro
@@ -14,11 +14,13 @@ TEMPLATE = lib
DEFINES += DBSQLITE2_LIBRARY
SOURCES += dbsqlite2.cpp \
- dbsqlite2instance.cpp
+ dbsqlite2instance.cpp \
+ queryexecutorsqlite2delete.cpp
HEADERS += dbsqlite2.h\
dbsqlite2_global.h \
- dbsqlite2instance.h
+ dbsqlite2instance.h \
+ queryexecutorsqlite2delete.h
LIBS += -lsqlite
diff --git a/Plugins/DbSqlite2/dbsqlite2.cpp b/Plugins/DbSqlite2/dbsqlite2.cpp
index 93871ae..f5ae6a4 100644
--- a/Plugins/DbSqlite2/dbsqlite2.cpp
+++ b/Plugins/DbSqlite2/dbsqlite2.cpp
@@ -1,6 +1,8 @@
#include "dbsqlite2.h"
#include "dbsqlite2instance.h"
#include "common/unused.h"
+#include "db/queryexecutor.h"
+#include "queryexecutorsqlite2delete.h"
#include <QFileInfo>
DbSqlite2::DbSqlite2()
@@ -12,6 +14,19 @@ QList<DbPluginOption> DbSqlite2::getOptionsList() const
return QList<DbPluginOption>();
}
+bool DbSqlite2::init()
+{
+ sqlite2DeleteStep = new QueryExecutorSqlite2Delete();
+ QueryExecutor::registerStep(QueryExecutor::LAST, sqlite2DeleteStep);
+ return true;
+}
+
+void DbSqlite2::deinit()
+{
+ QueryExecutor::deregisterStep(QueryExecutor::LAST, sqlite2DeleteStep);
+ safe_delete(sqlite2DeleteStep);
+}
+
Db *DbSqlite2::newInstance(const QString &name, const QString &path, const QHash<QString, QVariant> &options)
{
return new DbSqlite2Instance(name, path, options);
diff --git a/Plugins/DbSqlite2/dbsqlite2.h b/Plugins/DbSqlite2/dbsqlite2.h
index a52fc26..cdc6da7 100644
--- a/Plugins/DbSqlite2/dbsqlite2.h
+++ b/Plugins/DbSqlite2/dbsqlite2.h
@@ -5,6 +5,8 @@
#include "plugins/dbpluginstdfilebase.h"
#include "plugins/genericplugin.h"
+class QueryExecutorSqlite2Delete;
+
class DBSQLITE2SHARED_EXPORT DbSqlite2 : public GenericPlugin, public DbPluginStdFileBase
{
Q_OBJECT
@@ -16,9 +18,14 @@ class DBSQLITE2SHARED_EXPORT DbSqlite2 : public GenericPlugin, public DbPluginSt
QString getLabel() const;
bool checkIfDbServedByPlugin(Db* db) const;
QList<DbPluginOption> getOptionsList() const;
+ bool init();
+ void deinit();
protected:
Db *newInstance(const QString &name, const QString &path, const QHash<QString, QVariant> &options);
+
+ private:
+ QueryExecutorSqlite2Delete* sqlite2DeleteStep = nullptr;
};
#endif // DBSQLITE2_H
diff --git a/Plugins/DbSqlite2/package.xml b/Plugins/DbSqlite2/package.xml
new file mode 100644
index 0000000..1b9d726
--- /dev/null
+++ b/Plugins/DbSqlite2/package.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<Package>
+ <DisplayName>SQLite 2 plugin</DisplayName>
+ <Description>Plugin for SQLite 2 databases</Description>
+ <Version>%VERSION%</Version>
+ <ReleaseDate>%DATE%</ReleaseDate>
+ <Name>pl.com.salsoft.sqlitestudio.plugins.dbsqlite2</Name>
+ <Dependencies>pl.com.salsoft.sqlitestudio.plugins</Dependencies>
+ <Default>true</Default>
+</Package> \ No newline at end of file
diff --git a/Plugins/DbSqlite2/queryexecutorsqlite2delete.cpp b/Plugins/DbSqlite2/queryexecutorsqlite2delete.cpp
new file mode 100644
index 0000000..95ae98e
--- /dev/null
+++ b/Plugins/DbSqlite2/queryexecutorsqlite2delete.cpp
@@ -0,0 +1,30 @@
+#include "queryexecutorsqlite2delete.h"
+#include "db/sqlquery.h"
+#include "parser/ast/sqlitedelete.h"
+
+bool QueryExecutorSqlite2Delete::exec()
+{
+ if (db->getVersion() != 2)
+ return true;
+
+ SqliteQueryPtr lastQuery = context->parsedQueries.last();
+
+ if (!lastQuery)
+ return true;
+
+ SqliteDeletePtr deleteQuery = lastQuery.dynamicCast<SqliteDelete>();
+ if (!deleteQuery)
+ return true;
+
+ if (!deleteQuery->where)
+ {
+ deleteQuery->where = new SqliteExpr();
+ deleteQuery->where->setParent(deleteQuery.data());
+ deleteQuery->where->mode = SqliteExpr::Mode::LITERAL_VALUE;
+ deleteQuery->where->literalValue = 1;
+ }
+
+ deleteQuery->rebuildTokens();
+ updateQueries();
+ return true;
+}
diff --git a/Plugins/DbSqlite2/queryexecutorsqlite2delete.h b/Plugins/DbSqlite2/queryexecutorsqlite2delete.h
new file mode 100644
index 0000000..5d3f478
--- /dev/null
+++ b/Plugins/DbSqlite2/queryexecutorsqlite2delete.h
@@ -0,0 +1,24 @@
+#ifndef QUERYEXECUTORSQLITE2DELETE_H
+#define QUERYEXECUTORSQLITE2DELETE_H
+
+#include "db/queryexecutorsteps/queryexecutorstep.h"
+
+/**
+ * @brief The QueryExecutorSqlite2Delete class
+ *
+ * From SQLite2 documentation:
+ *
+ * Because of this optimization, the change count for "DELETE FROM table" will be zero
+ * regardless of the number of elements that were originally in the table.
+ * To get an accurate count of the number of rows deleted, use "DELETE FROM table WHERE 1" instead.
+ *
+ * This extra step will add "WHERE 1" if there is no WHERE for DELETE query.
+ *
+ */
+class QueryExecutorSqlite2Delete : public QueryExecutorStep
+{
+ public:
+ bool exec();
+};
+
+#endif // QUERYEXECUTORSQLITE2DELETE_H