aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/DbAndroid
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/DbAndroid')
-rw-r--r--[-rwxr-xr-x]Plugins/DbAndroid/copy.sh0
-rw-r--r--Plugins/DbAndroid/dbandroid.json4
-rw-r--r--Plugins/DbAndroid/dbandroidinstance.cpp32
-rw-r--r--Plugins/DbAndroid/dbandroidinstance.h1
-rw-r--r--Plugins/DbAndroid/dbandroidshellconnection.cpp36
-rw-r--r--Plugins/DbAndroid/dbandroidshellconnection.h10
-rw-r--r--Plugins/DbAndroid/package.xml18
-rw-r--r--Plugins/DbAndroid/sqlqueryandroid.cpp2
8 files changed, 69 insertions, 34 deletions
diff --git a/Plugins/DbAndroid/copy.sh b/Plugins/DbAndroid/copy.sh
index d3e1a1e..d3e1a1e 100755..100644
--- a/Plugins/DbAndroid/copy.sh
+++ b/Plugins/DbAndroid/copy.sh
diff --git a/Plugins/DbAndroid/dbandroid.json b/Plugins/DbAndroid/dbandroid.json
index 689316f..8bc6263 100644
--- a/Plugins/DbAndroid/dbandroid.json
+++ b/Plugins/DbAndroid/dbandroid.json
@@ -2,9 +2,9 @@
"type": "DbPlugin",
"title": "Android SQLite",
"description": "Provides support for remote SQLite databases on Android devices.",
- "version": 10201,
+ "version": 10200,
"author": "SalSoft",
- "minAppVersion": 30100,
+ "minAppVersion": 30300,
"gui": true,
"loadByDefault": false
}
diff --git a/Plugins/DbAndroid/dbandroidinstance.cpp b/Plugins/DbAndroid/dbandroidinstance.cpp
index 900b929..7dce61c 100644
--- a/Plugins/DbAndroid/dbandroidinstance.cpp
+++ b/Plugins/DbAndroid/dbandroidinstance.cpp
@@ -10,6 +10,7 @@
#include "schemaresolver.h"
#include "services/notifymanager.h"
#include "db/dbsqlite3.h"
+#include "parser/parser.h"
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
@@ -26,6 +27,37 @@ DbAndroidInstance::~DbAndroidInstance()
closeInternal();
}
+QList<AliasedColumn> DbAndroidInstance::columnsForQuery(const QString& query)
+{
+ Parser parser;
+ bool res = parser.parse(query);
+ if (!res)
+ {
+ qWarning() << "Could not parse query for providing columnsForQuery from DbAndroid:" << query;
+ return QList<AliasedColumn>();
+ }
+
+ if (!isDataReturningQuery(parser.getQueries().last()->queryType))
+ return QList<AliasedColumn>();
+
+ SqlQueryPtr results = exec(query);
+ if (results->isError())
+ {
+ qWarning() << "Could not execute query for providing columnsForQuery from DbAndroid:" << query
+ << ". The error was:" << results->getErrorText();
+ return QList<AliasedColumn>();
+ }
+
+ QList<AliasedColumn> columns;
+ AliasedColumn column;
+ for (const QString& colName : results->getColumnNames())
+ {
+ column.setAlias(colName);
+ columns << column;
+ }
+ return columns;
+}
+
SqlQueryPtr DbAndroidInstance::prepare(const QString& query)
{
return SqlQueryPtr(new SqlQueryAndroid(this, connection, query));
diff --git a/Plugins/DbAndroid/dbandroidinstance.h b/Plugins/DbAndroid/dbandroidinstance.h
index 157caae..5ddbd85 100644
--- a/Plugins/DbAndroid/dbandroidinstance.h
+++ b/Plugins/DbAndroid/dbandroidinstance.h
@@ -19,6 +19,7 @@ class DbAndroidInstance : public AbstractDb
DbAndroidInstance(DbAndroid* plugin, const QString& name, const QString& path, const QHash<QString, QVariant>& connOptions);
~DbAndroidInstance();
+ QList<AliasedColumn> columnsForQuery(const QString& query);
SqlQueryPtr prepare(const QString& query);
QString getTypeLabel();
bool deregisterFunction(const QString& name, int argCount);
diff --git a/Plugins/DbAndroid/dbandroidshellconnection.cpp b/Plugins/DbAndroid/dbandroidshellconnection.cpp
index e48416d..6ead847 100644
--- a/Plugins/DbAndroid/dbandroidshellconnection.cpp
+++ b/Plugins/DbAndroid/dbandroidshellconnection.cpp
@@ -129,7 +129,13 @@ QStringList DbAndroidShellConnection::getDbList()
}
QStringList finalList;
- for (const QString& dbName : out.trimmed().split("\n", QString::SkipEmptyParts))
+ for (const QString& dbName : out.trimmed().split("\n",
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+ Qt::SkipEmptyParts
+#else
+ QString::SkipEmptyParts
+#endif
+ ))
{
if (dbName.trimmed().endsWith("-journal"))
continue;
@@ -148,7 +154,13 @@ QStringList DbAndroidShellConnection::getAppList()
return QStringList();
QStringList appList;
- for (const QString& line : out.trimmed().split("\n", QString::SkipEmptyParts))
+ for (const QString& line : out.trimmed().split("\n",
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+ Qt::SkipEmptyParts
+#else
+ QString::SkipEmptyParts
+#endif
+ ))
{
if (!line.startsWith("package:"))
continue; // some other message
@@ -182,7 +194,7 @@ DbAndroidConnection::ExecutionResult DbAndroidShellConnection::executeQuery(cons
// In case of SELECT we want to union typeof() for all columns first, then original query
bool isSelect = false;
- getQueryAccessMode(query, Dialect::Sqlite3, &isSelect);
+ getQueryAccessMode(query, &isSelect);
QStringList columnNames;
bool firstHalfForTypes = false;
if (isSelect)
@@ -272,7 +284,7 @@ QString DbAndroidShellConnection::appendTypeQueryPart(const QString& query, cons
QString wrappedCol;
for (const QString& colName : columnNames)
{
- wrappedCol = wrapObjIfNeeded(colName, Dialect::Sqlite3);
+ wrappedCol = wrapObjIfNeeded(colName);
typeColumns << typeTpl.arg(wrappedCol);
hexColumns << hexTpl.arg(wrappedCol);
}
@@ -337,25 +349,25 @@ QVariant DbAndroidShellConnection::valueFromString(const QByteArray& bytes, cons
{
static const QStringList types = QStringList({"null", "integer", "real", "text", "blob"});
- DataType dataType = static_cast<DataType>(types.indexOf(AdbManager::decode(type).trimmed()));
+ SqliteDataType dataType = static_cast<SqliteDataType>(types.indexOf(AdbManager::decode(type).trimmed()));
QByteArray decodedBytes = QByteArray::fromHex(bytes);
switch (dataType)
{
- case DataType::BLOB:
+ case SqliteDataType::BLOB:
return decodedBytes;
- case DataType::INTEGER:
+ case SqliteDataType::INTEGER:
return QString::fromLatin1(decodedBytes).toLongLong();
- case DataType::REAL:
+ case SqliteDataType::REAL:
return QString::fromLatin1(decodedBytes).toDouble();
- case DataType::TEXT:
+ case SqliteDataType::TEXT:
return QString::fromUtf8(decodedBytes);
- case DataType::_NULL:
+ case SqliteDataType::_NULL:
break;
- case DataType::UNKNOWN:
+ case SqliteDataType::UNKNOWN:
qCritical() << "Unknown type passed to DbAndroidShellConnection::valueFromString():" << type;
break;
}
- return QVariant(QString::null);
+ return QVariant(QString());
}
void DbAndroidShellConnection::checkForDisconnection(const QStringList& devices)
diff --git a/Plugins/DbAndroid/dbandroidshellconnection.h b/Plugins/DbAndroid/dbandroidshellconnection.h
index 205d9bb..0be841b 100644
--- a/Plugins/DbAndroid/dbandroidshellconnection.h
+++ b/Plugins/DbAndroid/dbandroidshellconnection.h
@@ -28,16 +28,6 @@ class DbAndroidShellConnection : public DbAndroidConnection
ExecutionResult executeQuery(const QString& query);
private:
- enum class DataType
- {
- UNKNOWN = -1,
- _NULL = 0,
- INTEGER = 1,
- REAL = 2,
- TEXT = 3,
- BLOB = 4
- };
-
QStringList findColumns(const QStringList& originalArgs, const QString& query);
QString appendTypeQueryPart(const QString& query, const QStringList& columnNames);
void extractResultData(const QList<QList<QByteArray> >& deserialized, bool firstHalfForTypes, ExecutionResult& results);
diff --git a/Plugins/DbAndroid/package.xml b/Plugins/DbAndroid/package.xml
index 32c4a32..af3d133 100644
--- a/Plugins/DbAndroid/package.xml
+++ b/Plugins/DbAndroid/package.xml
@@ -1,10 +1,10 @@
-<?xml version="1.0"?>
-<Package>
- <DisplayName>Android plugin</DisplayName>
- <Description>Plugin for accessing Android SQLite databases directly on the Android device from your computer.</Description>
- <Version>%VERSION%</Version>
- <ReleaseDate>%DATE%</ReleaseDate>
- <Name>pl.com.salsoft.sqlitestudio.plugins.dbandroid</Name>
- <Dependencies>pl.com.salsoft.sqlitestudio.plugins</Dependencies>
- <Default>true</Default>
+<?xml version="1.0"?>
+<Package>
+ <DisplayName>Android plugin</DisplayName>
+ <Description>Plugin for accessing Android SQLite databases directly on the Android device from your computer.</Description>
+ <Version>%VERSION%</Version>
+ <ReleaseDate>%DATE%</ReleaseDate>
+ <Name>pl.com.salsoft.sqlitestudio.plugins.dbandroid</Name>
+ <Dependencies>pl.com.salsoft.sqlitestudio.plugins</Dependencies>
+ <Default>true</Default>
</Package> \ No newline at end of file
diff --git a/Plugins/DbAndroid/sqlqueryandroid.cpp b/Plugins/DbAndroid/sqlqueryandroid.cpp
index 08fe5cc..787cdc5 100644
--- a/Plugins/DbAndroid/sqlqueryandroid.cpp
+++ b/Plugins/DbAndroid/sqlqueryandroid.cpp
@@ -11,7 +11,7 @@
SqlQueryAndroid::SqlQueryAndroid(DbAndroidInstance* db, DbAndroidConnection* connection, const QString& query) :
db(db), connection(connection), queryString(query)
{
- tokenizedQuery = Lexer::tokenize(query, Dialect::Sqlite3);
+ tokenizedQuery = Lexer::tokenize(query);
}
SqlQueryAndroid::~SqlQueryAndroid()