diff options
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.cpp')
| -rw-r--r-- | Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.cpp b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.cpp new file mode 100644 index 0000000..8f75960 --- /dev/null +++ b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.cpp @@ -0,0 +1,112 @@ +#include "sqlenterpriseformatter.h" +#include "formatstatement.h" +#include "common/unused.h" +#include "common/global.h" +#include <QDebug> +#include <parser/parser.h> + +SqlEnterpriseFormatter::SqlEnterpriseFormatter() +{ +} + +QString SqlEnterpriseFormatter::format(SqliteQueryPtr query) +{ + int wrapperIdx = cfg.SqlEnterpriseFormatter.Wrappers.get().indexOf(cfg.SqlEnterpriseFormatter.PrefferedWrapper.get()); + + NameWrapper wrapper = getAllNameWrappers()[wrapperIdx]; + + FormatStatement *formatStmt = FormatStatement::forQuery(query.data()); + if (!formatStmt) + return query->detokenize(); + + formatStmt->setSelectedWrapper(wrapper); + formatStmt->setConfig(&cfg); + QString formatted = formatStmt->format(); + delete formatStmt; + + return formatted; +} + +bool SqlEnterpriseFormatter::init() +{ + Q_INIT_RESOURCE(sqlenterpriseformatter); + + static_qstring(query1, "SELECT (2 + 4) AND (3 + 5), 4 NOT IN (SELECT t1.'some[_]name' + t2.[some'name2] FROM xyz t1 JOIN zxc t2 ON (t1.aaa = t2.aaa)) " + "FROM a, (SELECT id FROM table2);"); + static_qstring(query2, "INSERT INTO table1 (id, value1, value2) VALUES (1, (2 + 5), (SELECT id FROM table2));"); + static_qstring(query3, "CREATE TABLE tab (id INTEGER PRIMARY KEY, value1 VARCHAR(6), value2 NUMBER(8,2) NOT NULL DEFAULT 1.0);"); + static_qstring(query4, "CREATE UNIQUE INDEX IF NOT EXISTS dbName.idx1 ON [messages column] (id COLLATE x ASC, lang DESC, description);"); + + Parser parser(Dialect::Sqlite3); + + for (const QString& q : {query1, query2, query3, query4}) + { + if (!parser.parse(q)) + { + qWarning() << "SqlEnterpriseFormatter preview query parsing error:" << parser.getErrorString(); + continue; + } + previewQueries << parser.getQueries().first(); + } + + updatePreview(); + + return GenericPlugin::init(); +} + +void SqlEnterpriseFormatter::deinit() +{ + Q_CLEANUP_RESOURCE(sqlenterpriseformatter); +} + + +void SqlEnterpriseFormatter::updatePreview() +{ + QStringList output; + for (const SqliteQueryPtr& q : previewQueries) + output << format(q); + + cfg.SqlEnterpriseFormatter.PreviewCode.set(output.join("\n\n")); +} + +void SqlEnterpriseFormatter::configModified(CfgEntry* entry) +{ + if (entry == &cfg.SqlEnterpriseFormatter.PreviewCode) + return; + + updatePreview(); +} + +QString Cfg::getNameWrapperStr(NameWrapper wrapper) +{ + return wrapObjName(QObject::tr("name", "example name wrapper"), wrapper); +} + +QStringList Cfg::getNameWrapperStrings() +{ + QStringList strings; + for (NameWrapper nw : getAllNameWrappers()) + strings << wrapObjName(QObject::tr("name", "example name wrapper"), nw); + + return strings; +} + +CfgMain* SqlEnterpriseFormatter::getMainUiConfig() +{ + return &cfg; +} + +QString SqlEnterpriseFormatter::getConfigUiForm() const +{ + return "SqlEnterpriseFormatter"; +} + +void SqlEnterpriseFormatter::configDialogOpen() +{ + connect(&cfg.SqlEnterpriseFormatter, SIGNAL(changed(CfgEntry*)), this, SLOT(configModified(CfgEntry*))); +} + +void SqlEnterpriseFormatter::configDialogClosed() +{ + disconnect(&cfg.SqlEnterpriseFormatter, SIGNAL(changed(CfgEntry*)), this, SLOT(configModified(CfgEntry*))); +} |
