aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
commit1fdc150116cad39aae5c5da407c3312b47a59e3a (patch)
tree123c79a4d7ad2d45781ba03ce939f7539fb428d8 /SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
parentfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (diff)
New upstream version 3.3.3+dfsg1.upstream/3.3.3+dfsg1
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp72
1 files changed, 37 insertions, 35 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp b/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
index 75b0e89..3f01350 100644
--- a/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
@@ -2,6 +2,7 @@
#include "common/global.h"
#include "common/utils_sql.h"
#include "db/db.h"
+#include "common/unused.h"
QueryGenerator::QueryGenerator()
{
@@ -30,8 +31,7 @@ QString QueryGenerator::generateInsertToTable(Db* db, const QString& database, c
static_qstring(tpl, "INSERT INTO %1 (%2) VALUES %3");
static_qstring(rowTpl, "(%1)");
- Dialect dialect = db->getDialect();
- QString target = toFullObjectName(database, table, dialect);
+ QString target = toFullObjectName(database, table);
// Get all table's columns
SchemaResolver resolver(db);
@@ -41,7 +41,7 @@ QString QueryGenerator::generateInsertToTable(Db* db, const QString& database, c
if (values.isEmpty())
{
QStringList valueList = wrapStrings(tableCols);
- QStringList wrappedCols = wrapObjNamesIfNeeded(tableCols, dialect);
+ QStringList wrappedCols = wrapObjNamesIfNeeded(tableCols);
return tpl.arg(target, wrappedCols.join(", "), rowTpl.arg(valueList.join(", ")));
}
@@ -50,11 +50,11 @@ QString QueryGenerator::generateInsertToTable(Db* db, const QString& database, c
sortWithReferenceList(valueCols, tableCols);
// Group values into rows
- QStringList valueSets = toValueSets(valueCols, values, dialect);
+ QStringList valueSets = toValueSets(valueCols, values);
QString valueStr = rowTpl.arg(valueSets.join("), ("));
// Wrap given column names
- QStringList wrappedCols = wrapObjNamesIfNeeded(valueCols, dialect);
+ QStringList wrappedCols = wrapObjNamesIfNeeded(valueCols);
return tpl.arg(target, wrappedCols.join(", "), valueStr);
}
@@ -70,8 +70,7 @@ QString QueryGenerator::generateUpdateOfTable(Db* db, const QString& database, c
static_qstring(tplWithWhere, "UPDATE %1 SET %2 WHERE %3");
static_qstring(updateColTpl, "%1 = %2");
- Dialect dialect = db->getDialect();
- QString target = toFullObjectName(database, table, dialect);
+ QString target = toFullObjectName(database, table);
// Get all columns of the table
SchemaResolver resolver(db);
@@ -80,7 +79,7 @@ QString QueryGenerator::generateUpdateOfTable(Db* db, const QString& database, c
// Create list of "column = 'column'"
QStringList commonUpdateCols;
for (const QString& col : tableCols)
- commonUpdateCols << updateColTpl.arg(wrapObjIfNeeded(col, dialect), wrapString(col));
+ commonUpdateCols << updateColTpl.arg(wrapObjIfNeeded(col), wrapString(col));
// Put it to comma spearated string
QString commonColumnStr = commonUpdateCols.join(", ");
@@ -97,7 +96,7 @@ QString QueryGenerator::generateUpdateOfTable(Db* db, const QString& database, c
sortWithReferenceList(valueCols, tableCols);
// Conditions for WHERE clause
- QString conditionStr = valuesToConditionStr(values, dialect);
+ QString conditionStr = valuesToConditionStr(values);
return tpl.arg(target, commonColumnStr, conditionStr);
}
@@ -113,8 +112,7 @@ QString QueryGenerator::generateDeleteFromTable(Db* db, const QString& database,
static_qstring(tplWithWhere, "DELETE FROM %1 WHERE %2");
static_qstring(conditionColTpl, "%1 = %2");
- Dialect dialect = db->getDialect();
- QString target = toFullObjectName(database, table, dialect);
+ QString target = toFullObjectName(database, table);
// Get all columns of the table
SchemaResolver resolver(db);
@@ -126,7 +124,7 @@ QString QueryGenerator::generateDeleteFromTable(Db* db, const QString& database,
// Create list of "column = 'column'"
QStringList conditionCols;
for (const QString& col : tableCols)
- conditionCols << conditionColTpl.arg(wrapObjIfNeeded(col, dialect), wrapString(col));
+ conditionCols << conditionColTpl.arg(wrapObjIfNeeded(col), wrapString(col));
// Put it to comma spearated string
QString conditionStr = conditionCols.join(" AND ");
@@ -139,7 +137,7 @@ QString QueryGenerator::generateDeleteFromTable(Db* db, const QString& database,
sortWithReferenceList(valueCols, tableCols);
// Conditions for WHERE clause
- QString conditionStr = valuesToConditionStr(values, dialect);
+ QString conditionStr = valuesToConditionStr(values);
return tpl.arg(target, conditionStr);
}
@@ -160,8 +158,6 @@ QString QueryGenerator::generateSelectFromSelect(Db* db, const QString& initialS
{
static_qstring(tpl, "SELECT %1 FROM (%2)%3");
- Dialect dialect = db->getDialect();
-
// Resolve all columns of the select
SelectResolver resolver(db, initialSelect, dbNameToAttach);
QList<SelectResolver::Column> columns = resolver.resolveColumnsFromFirstCore();
@@ -169,24 +165,24 @@ QString QueryGenerator::generateSelectFromSelect(Db* db, const QString& initialS
// Generate result columns
QStringList resCols;
for (const SelectResolver::Column& col : columns)
- resCols << toResultColumnString(col, dialect);
+ resCols << toResultColumnString(col);
// Generate conditions for WHERE clause
- QString conditionStr = valuesToConditionStr(values, dialect);
+ QString conditionStr = valuesToConditionStr(values);
return tpl.arg(resCols.join(", "), initialSelect, conditionStr);
}
QString QueryGenerator::generateSelectFromTableOrView(Db* db, const QString& database, const QString& tableOrView, const QStringList& columns, const StrHash<QVariantList> values)
{
+ UNUSED(db);
static_qstring(tpl, "SELECT %1 FROM %2%3");
- Dialect dialect = db->getDialect();
-
- QString target = toFullObjectName(database, tableOrView, dialect);
- QString conditionStr = valuesToConditionStr(values, dialect);
+ QStringList wrappedCols = wrapObjNamesIfNeeded(columns);
+ QString target = toFullObjectName(database, tableOrView);
+ QString conditionStr = valuesToConditionStr(values);
- return tpl.arg(columns.join(", "), target, conditionStr);
+ return tpl.arg(wrappedCols.join(", "), target, conditionStr);
}
QString QueryGenerator::getAlias(const QString& name, QSet<QString>& usedAliases)
@@ -208,8 +204,9 @@ QString QueryGenerator::getAlias(const QString& name, QSet<QString>& usedAliases
return alias;
}
-QStringList QueryGenerator::valuesToConditionList(const StrHash<QVariantList>& values, Dialect dialect)
+QStringList QueryGenerator::valuesToConditionList(const StrHash<QVariantList>& values)
{
+ static_qstring(conditionTpl0, "%1 IS NULL");
static_qstring(conditionTpl1, "%1 = %2");
static_qstring(conditionTpl2, "%1 IN (%2)");
@@ -217,21 +214,26 @@ QStringList QueryGenerator::valuesToConditionList(const StrHash<QVariantList>& v
QStringList conditionValues;
for (const QString& col : values.keys())
{
- conditionValues = valueListToSqlList(values[col], dialect);
+ conditionValues = valueListToSqlList(values[col]);
conditionValues.removeDuplicates();
if (conditionValues.size() == 1)
- conditions << conditionTpl1.arg(wrapObjIfNeeded(col, dialect), conditionValues.first());
+ {
+ if (conditionValues.first() == "NULL")
+ conditions << conditionTpl0.arg(wrapObjIfNeeded(col));
+ else
+ conditions << conditionTpl1.arg(wrapObjIfNeeded(col), conditionValues.first());
+ }
else
- conditions << conditionTpl2.arg(wrapObjIfNeeded(col, dialect), conditionValues.join(", "));
+ conditions << conditionTpl2.arg(wrapObjIfNeeded(col), conditionValues.join(", "));
}
return conditions;
}
-QString QueryGenerator::valuesToConditionStr(const StrHash<QVariantList>& values, Dialect dialect)
+QString QueryGenerator::valuesToConditionStr(const StrHash<QVariantList>& values)
{
static_qstring(condTpl, " WHERE %1");
- QStringList conditions = valuesToConditionList(values, dialect);
+ QStringList conditions = valuesToConditionList(values);
QString conditionStr = "";
if (conditions.size() > 0)
conditionStr = condTpl.arg(conditions.join(" AND "));
@@ -239,26 +241,26 @@ QString QueryGenerator::valuesToConditionStr(const StrHash<QVariantList>& values
return conditionStr;
}
-QString QueryGenerator::toResultColumnString(const SelectResolver::Column& column, Dialect dialect)
+QString QueryGenerator::toResultColumnString(const SelectResolver::Column& column)
{
- return wrapObjIfNeeded(column.displayName, dialect);
+ return wrapObjIfNeeded(column.displayName);
}
-QString QueryGenerator::toFullObjectName(const QString& database, const QString& object, Dialect dialect)
+QString QueryGenerator::toFullObjectName(const QString& database, const QString& object)
{
static_qstring(tpl, "%1%2");
QString dbName = "";
if (!database.isEmpty() && dbName.toLower() != "main")
- dbName = wrapObjIfNeeded(database, dialect);
+ dbName = wrapObjIfNeeded(database);
if (!dbName.isEmpty())
dbName.append(".");
- return tpl.arg(dbName, wrapObjIfNeeded(object, dialect));
+ return tpl.arg(dbName, wrapObjIfNeeded(object));
}
-QStringList QueryGenerator::toValueSets(const QStringList& columns, const StrHash<QVariantList> values, Dialect dialect)
+QStringList QueryGenerator::toValueSets(const QStringList& columns, const StrHash<QVariantList> values)
{
QStringList rows;
QVariantList rowValues;
@@ -270,7 +272,7 @@ QStringList QueryGenerator::toValueSets(const QStringList& columns, const StrHas
for (const QString& col : columns)
rowValues << values[col][i];
- valueList = valueListToSqlList(rowValues, dialect);
+ valueList = valueListToSqlList(rowValues);
rows << valueList.join(", ");
}