diff options
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h index 125789a..a7e156c 100644 --- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h +++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h @@ -6,33 +6,35 @@ #include <QHash> #include <QVariant> #include <QCache> -#include <QScriptValue> -#include <QScriptProgram> +#include <QJSValue> +#include <QThreadStorage> -class QScriptEngine; class QMutex; -class QScriptContext; class ScriptingQtDbProxy; +class ScriptingQtConsole; class ScriptingQt : public BuiltInPlugin, public DbAwareScriptingPlugin { Q_OBJECT - SQLITESTUDIO_PLUGIN_TITLE("Qt scripting") - SQLITESTUDIO_PLUGIN_DESC("Qt scripting support.") - SQLITESTUDIO_PLUGIN_VERSION(10000) + SQLITESTUDIO_PLUGIN_TITLE("JavaScript scripting") + SQLITESTUDIO_PLUGIN_DESC("JavaScript scripting support.") + SQLITESTUDIO_PLUGIN_VERSION(10100) SQLITESTUDIO_PLUGIN_AUTHOR("sqlitestudio.pl") public: ScriptingQt(); ~ScriptingQt(); + static QJSValueList toValueList(QJSEngine* engine, const QList<QVariant>& values); + static QVariant convertVariant(const QVariant& value, bool wrapStrings = false); + QString getLanguage() const; Context* createContext(); void releaseContext(Context* context); void resetContext(Context* context); - QVariant evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking = false, QString* errorMessage = nullptr); - QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking = false); + QVariant evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking = false, QString* errorMessage = nullptr); + QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking = false); void setVariable(Context* context, const QString& name, const QVariant& value); QVariant getVariable(Context* context, const QString& name); bool hasError(Context* context) const; @@ -50,23 +52,39 @@ class ScriptingQt : public BuiltInPlugin, public DbAwareScriptingPlugin ContextQt(); ~ContextQt(); - QScriptEngine* engine = nullptr; - QCache<QString,QScriptProgram> scriptCache; + QJSEngine* engine = nullptr; + QCache<QString, QJSValue> scriptCache; QString error; ScriptingQtDbProxy* dbProxy = nullptr; - QScriptValue dbProxyScriptValue; + ScriptingQtConsole* console = nullptr; + QJSValue dbProxyScriptValue; }; ContextQt* getContext(ScriptingPlugin::Context* context) const; - QScriptValue getFunctionValue(ContextQt* ctx, const QString& code); - QVariant evaluate(ContextQt* ctx, QScriptContext* engineContext, const QString& code, const QList<QVariant>& args, Db* db, bool locking); - QVariant convertVariant(const QVariant& value, bool wrapStrings = false); + QJSValue getFunctionValue(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo); + QVariant evaluate(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking); + ContextQt* getMainContext(); static const constexpr int cacheSize = 5; - ContextQt* mainContext = nullptr; + QThreadStorage<ContextQt*> mainContext; QList<Context*> contexts; - QMutex* mainEngineMutex = nullptr; + QList<ContextQt*> managedMainContexts; + QMutex* managedMainContextsMutex = nullptr; +}; + +class ScriptingQtConsole : public QObject +{ + Q_OBJECT + + public: + ScriptingQtConsole(QJSEngine* engine); + + private: + QJSEngine* engine = nullptr; + + public slots: + QJSValue log(const QJSValue& value); }; #endif // SCRIPTINGQT_H |
