diff options
| author | 2023-04-30 18:30:36 -0400 | |
|---|---|---|
| committer | 2023-04-30 18:30:36 -0400 | |
| commit | 3565aad630864ecdbe53fdaa501ea708555b3c7c (patch) | |
| tree | c743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp | |
| parent | 1fdc150116cad39aae5c5da407c3312b47a59e3a (diff) | |
New upstream version 3.4.4+dfsg.upstream/3.4.4+dfsg
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp index 93a6d91..7edd7e7 100644 --- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp @@ -38,7 +38,7 @@ void ScriptingSql::resetContext(ScriptingPlugin::Context* context) dynamic_cast<SqlContext*>(context)->errorText.clear(); } -QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking) +QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking) { SqlContext* ctx = dynamic_cast<SqlContext*>(context); ctx->errorText.clear(); @@ -58,14 +58,15 @@ QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString QString sql = code; if (ctx->variables.size() > 0) { - QString value; for (const QString& key : ctx->variables.keys()) { - value = "'" + ctx->variables[key].toString() + "'"; + QString value = "'" + ctx->variables[key].toString() + "'"; sql.replace(":" + key, value).replace("@" + key, value).replace("$" + key, value); } } + replaceNamedArgs(sql, funcInfo, args); + SqlQueryPtr result = theDb->exec(sql, args, execFlags); if (result->isError()) { @@ -76,7 +77,7 @@ QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString return result->getSingleCell(); } -QVariant ScriptingSql::evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage) +QVariant ScriptingSql::evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage) { Db* theDb = nullptr; @@ -91,7 +92,10 @@ QVariant ScriptingSql::evaluate(const QString& code, const QList<QVariant>& args if (!locking) execFlags |= Db::Flag::NO_LOCK; - SqlQueryPtr result = theDb->exec(code, args, execFlags); + QString sql = code; + replaceNamedArgs(sql, funcInfo, args); + + SqlQueryPtr result = theDb->exec(sql, args, execFlags); if (result->isError()) { *errorMessage = result->getErrorText(); @@ -144,3 +148,18 @@ void ScriptingSql::deinit() safe_delete(memDb); } + +void ScriptingSql::replaceNamedArgs(QString& sql, const ScriptingPlugin::FunctionInfo& funcInfo, const QList<QVariant>& args) +{ + int i = 0; + for (const QString& key : funcInfo.getArguments()) + { + if (i >= args.size()) + break; + + QString value = "'" + args[i++].toString() + "'"; + sql.replace(":" + key, value) + .replace("@" + key, value) + .replace("$" + key, value); + } +} |
