aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/common
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:58:22 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:58:22 -0500
commita5ae79be08125b31bb6b8d9703090a98c6fd2e30 (patch)
tree569ee612c9de85b2bb423efa485688ef1d43852e /SQLiteStudio3/coreSQLiteStudio/common
parent21966b4f924b0a1933d9662e75ff253bd154fdb7 (diff)
parent81a21e6ce040e7740de86340c8ea4dba30e69bc3 (diff)
Update upstream source from tag 'upstream/3.4.13+dfsg'
Update to upstream version '3.4.13+dfsg' with Debian dir bf81ee0219cb8e4562a4751df17d75814772d2d6
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/common')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp62
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h2
2 files changed, 36 insertions, 28 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
index 0122352..4b54090 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
@@ -14,6 +14,7 @@ QString invalidIdCharacters = "[](){}\"'@*.,+-=/#$%&|:; \t\n<>";
QHash<NameWrapper,QPair<QChar,QChar>> wrapperChars;
QHash<NameWrapper,QPair<QChar,bool>> wrapperEscapedEnding;
QList<NameWrapper> sqlite3Wrappers;
+QSet<QString> sqlite3ReservedLiterals = {"true", "false"}; // true/false as column names - #5065
void initUtilsSql()
{
@@ -58,9 +59,17 @@ bool doesObjectNeedWrapping(const QString& str)
if (str[0].isDigit())
return true;
+ if (isReservedLiteral(str))
+ return true;
+
return false;
}
+bool isReservedLiteral(const QString& str)
+{
+ return sqlite3ReservedLiterals.contains(str.toLower());
+}
+
bool doesObjectNeedWrapping(const QChar& c)
{
return invalidIdCharacters.indexOf(c) >= 0;
@@ -822,38 +831,35 @@ QStringList valueListToSqlList(const QVariantList& values)
{
QStringList argList;
for (const QVariant& value : values)
- {
- if (!value.isValid() || value.isNull())
- {
- argList << "NULL";
- continue;
- }
+ argList << valueToSqlLiteral(value);
- switch (value.userType())
- {
- case QVariant::Int:
- case QVariant::UInt:
- case QVariant::LongLong:
- case QVariant::ULongLong:
- argList << value.toString();
- break;
- case QVariant::Double:
- argList << doubleToString(value);
- break;
- case QVariant::Bool:
- argList << QString::number(value.toInt());
- break;
- case QVariant::ByteArray:
- argList << "X'" + value.toByteArray().toHex().toUpper() + "'";
- break;
- default:
- argList << wrapString(escapeString(value.toString()));
- break;
- }
- }
return argList;
}
+QString valueToSqlLiteral(const QVariant& value)
+{
+ if (!value.isValid() || value.isNull())
+ return "NULL";
+
+ switch (value.userType())
+ {
+ case QVariant::Int:
+ case QVariant::UInt:
+ case QVariant::LongLong:
+ case QVariant::ULongLong:
+ return value.toString();
+ case QVariant::Double:
+ return doubleToString(value);
+ case QVariant::Bool:
+ return QString::number(value.toInt());
+ case QVariant::ByteArray:
+ return "X'" + value.toByteArray().toHex().toUpper() + "'";
+ default:
+ break;
+ }
+ return wrapString(escapeString(value.toString()));
+}
+
QStringList wrapStrings(const QStringList& strList)
{
QStringList list;
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
index 353faf3..0c201e3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
@@ -44,6 +44,7 @@ API_EXPORT bool doesObjectNeedWrapping(const QChar& c);
API_EXPORT bool isObjectWrapped(const QChar& c);
API_EXPORT bool doesStringNeedWrapping(const QString& str);
API_EXPORT bool isStringWrapped(const QString& str);
+API_EXPORT bool isReservedLiteral(const QString& str);
API_EXPORT QString wrapObjIfNeeded(const QString& obj, NameWrapper favWrapper = NameWrapper::null);
API_EXPORT QString wrapObjIfNeeded(const QString& obj, bool useDoubleQuoteForEmptyValue, NameWrapper favWrapper = NameWrapper::null);
API_EXPORT QString wrapObjName(const QString& obj, NameWrapper favWrapper = NameWrapper::null);
@@ -88,6 +89,7 @@ API_EXPORT QString commentAllSqlLines(const QString& sql);
API_EXPORT QString getBindTokenName(const TokenPtr& token);
API_EXPORT QueryAccessMode getQueryAccessMode(const QString& query, bool* isSelect = nullptr);
API_EXPORT QStringList valueListToSqlList(const QList<QVariant>& values);
+API_EXPORT QString valueToSqlLiteral(const QVariant& value);
API_EXPORT QString trimQueryEnd(const QString& query);
API_EXPORT QByteArray blobFromLiteral(const QString& value);