diff options
| author | 2021-12-17 07:07:47 -0500 | |
|---|---|---|
| committer | 2021-12-17 07:07:47 -0500 | |
| commit | 558b1e35fd0777ac97763c1b28056ac984e583e7 (patch) | |
| tree | 1eb2557119a117ea76535c89cd14a49e510b96bf /SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp | |
| parent | c22eb635c11fd45f9c30f911d70e1d79111a49ce (diff) | |
| parent | 1fdc150116cad39aae5c5da407c3312b47a59e3a (diff) | |
Update upstream source from tag 'upstream/3.3.3+dfsg1'
Update to upstream version '3.3.3+dfsg1'
with Debian dir 9a301fff4922aed2fec0c04c7d011947168c42f1
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp | 72 |
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(", "); } |
