From 7167ce41b61d2ba2cdb526777a4233eb84a3b66a Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Sat, 6 Dec 2014 17:33:25 -0500 Subject: Imported Upstream version 2.99.6 --- .../coreSQLiteStudio/plugins/scriptingsql.cpp | 146 +++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp (limited to 'SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp') diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp new file mode 100644 index 0000000..93a6d91 --- /dev/null +++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp @@ -0,0 +1,146 @@ +#include "scriptingsql.h" +#include "common/unused.h" +#include "db/db.h" +#include "db/sqlquery.h" +#include "services/dbmanager.h" + +ScriptingSql::ScriptingSql() +{ +} + +ScriptingSql::~ScriptingSql() +{ +} + +QString ScriptingSql::getLanguage() const +{ + return "SQL"; +} + +ScriptingPlugin::Context* ScriptingSql::createContext() +{ + SqlContext* ctx = new SqlContext(); + contexts << ctx; + return ctx; +} + +void ScriptingSql::releaseContext(ScriptingPlugin::Context* context) +{ + if (!contexts.contains(context)) + return; + + delete context; + contexts.removeOne(context); +} + +void ScriptingSql::resetContext(ScriptingPlugin::Context* context) +{ + dynamic_cast(context)->errorText.clear(); +} + +QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString& code, const QList& args, Db* db, bool locking) +{ + SqlContext* ctx = dynamic_cast(context); + ctx->errorText.clear(); + + Db* theDb = nullptr; + if (db && db->isValid()) + theDb = db; + else if (memDb) + theDb = memDb; + else + return QVariant(); + + Db::Flags execFlags; + if (!locking) + execFlags |= Db::Flag::NO_LOCK; + + QString sql = code; + if (ctx->variables.size() > 0) + { + QString value; + for (const QString& key : ctx->variables.keys()) + { + value = "'" + ctx->variables[key].toString() + "'"; + sql.replace(":" + key, value).replace("@" + key, value).replace("$" + key, value); + } + } + + SqlQueryPtr result = theDb->exec(sql, args, execFlags); + if (result->isError()) + { + dynamic_cast(context)->errorText = result->getErrorText(); + return QVariant(); + } + + return result->getSingleCell(); +} + +QVariant ScriptingSql::evaluate(const QString& code, const QList& args, Db* db, bool locking, QString* errorMessage) +{ + Db* theDb = nullptr; + + if (db && db->isValid()) + theDb = db; + else if (memDb) + theDb = memDb; + else + return QVariant(); + + Db::Flags execFlags; + if (!locking) + execFlags |= Db::Flag::NO_LOCK; + + SqlQueryPtr result = theDb->exec(code, args, execFlags); + if (result->isError()) + { + *errorMessage = result->getErrorText(); + return QVariant(); + } + + return result->getSingleCell(); +} + +void ScriptingSql::setVariable(ScriptingPlugin::Context* context, const QString& name, const QVariant& value) +{ + dynamic_cast(context)->variables[name] = value; +} + +QVariant ScriptingSql::getVariable(ScriptingPlugin::Context* context, const QString& name) +{ + if (dynamic_cast(context)->variables.contains(name)) + return dynamic_cast(context)->variables[name]; + + return QVariant(); +} + +bool ScriptingSql::hasError(ScriptingPlugin::Context* context) const +{ + return !getErrorMessage(context).isNull(); +} + +QString ScriptingSql::getErrorMessage(ScriptingPlugin::Context* context) const +{ + return dynamic_cast(context)->errorText; +} + +QString ScriptingSql::getIconPath() const +{ + return ":/images/plugins/scriptingsql.png"; +} + +bool ScriptingSql::init() +{ + memDb = DBLIST->createInMemDb(); + return memDb != nullptr; +} + +void ScriptingSql::deinit() +{ + for (Context* context : contexts) + delete context; + + contexts.clear(); + + safe_delete(memDb); +} -- cgit v1.2.3