diff options
| author | 2021-12-17 07:06:30 -0500 | |
|---|---|---|
| committer | 2021-12-17 07:06:30 -0500 | |
| commit | 1fdc150116cad39aae5c5da407c3312b47a59e3a (patch) | |
| tree | 123c79a4d7ad2d45781ba03ce939f7539fb428d8 /Plugins/SqlEnterpriseFormatter/formatstatement.cpp | |
| parent | feda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (diff) | |
New upstream version 3.3.3+dfsg1.upstream/3.3.3+dfsg1
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/formatstatement.cpp')
| -rw-r--r-- | Plugins/SqlEnterpriseFormatter/formatstatement.cpp | 79 |
1 files changed, 61 insertions, 18 deletions
diff --git a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp index fbfec2b..be924e1 100644 --- a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp +++ b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp @@ -29,6 +29,8 @@ #include "formatdropview.h" #include "formatorderby.h" #include "formatupsert.h" +#include "formatwindowdefinition.h" +#include "formatfilterover.h" #include "parser/ast/sqliteselect.h" #include "parser/ast/sqliteexpr.h" #include "parser/ast/sqlitelimit.h" @@ -59,6 +61,8 @@ #include "parser/ast/sqliteorderby.h" #include "parser/ast/sqlitepragma.h" #include "parser/ast/sqliteupsert.h" +#include "parser/ast/sqlitewindowdefinition.h" +#include "parser/ast/sqlitefilterover.h" #include "sqlenterpriseformatter.h" #include "common/utils_sql.h" #include "common/global.h" @@ -155,13 +159,21 @@ FormatStatement *FormatStatement::forQuery(SqliteStatement *query) FORMATTER_FACTORY_ENTRY(query, SqliteDropView, FormatDropView); FORMATTER_FACTORY_ENTRY(query, SqliteOrderBy, FormatOrderBy); FORMATTER_FACTORY_ENTRY(query, SqlitePragma, FormatPragma); + FORMATTER_FACTORY_ENTRY(query, SqliteWindowDefinition, FormatWindowDefinition); + FORMATTER_FACTORY_ENTRY(query, SqliteWindowDefinition::Window, FormatWindowDefinitionWindow); + FORMATTER_FACTORY_ENTRY(query, SqliteWindowDefinition::Window::Frame, FormatWindowDefinitionWindowFrame); + FORMATTER_FACTORY_ENTRY(query, SqliteWindowDefinition::Window::Frame::Bound, FormatWindowDefinitionWindowFrameBound); + FORMATTER_FACTORY_ENTRY(query, SqliteFilterOver, FormatFilterOver); + FORMATTER_FACTORY_ENTRY(query, SqliteFilterOver::Filter, FormatFilterOverFilter); + FORMATTER_FACTORY_ENTRY(query, SqliteFilterOver::Over, FormatFilterOverOver); - if (stmt) - stmt->dialect = query->dialect; - else if (query) - qWarning() << "Unhandled query passed to enterprise formatter!"; - else - qWarning() << "Null query passed to enterprise formatter!"; + if (!stmt) + { + if (query) + qWarning() << "Unhandled query passed to enterprise formatter!"; + else + qWarning() << "Null query passed to enterprise formatter!"; + } return stmt; } @@ -188,6 +200,12 @@ FormatStatement& FormatStatement::withId(const QString& id) return *this; } +FormatStatement& FormatStatement::withId(const QString& id, bool wrapIfNeeded) +{ + withToken(wrapIfNeeded ? FormatToken::ID : FormatToken::ID_NO_WRAP, id); + return *this; +} + FormatStatement& FormatStatement::withOperator(const QString& oper, FormatToken::Flags flags) { withToken(FormatToken::OPERATOR, oper, flags); @@ -338,6 +356,12 @@ FormatStatement& FormatStatement::withLiteral(const QVariant& value) if (value.isNull()) return *this; + if (value.userType() == QVariant::String) + { + withString(value.toString()); + return *this; + } + bool ok; if (value.userType() == QVariant::Double) { @@ -372,7 +396,7 @@ FormatStatement& FormatStatement::withStatement(SqliteStatement* stmt, const QSt if (!stmt) return *this; - FormatStatement* formatStmt = forQuery(stmt, dialect, wrapper, cfg); + FormatStatement* formatStmt = forQuery(stmt, wrapper, cfg); if (!formatStmt) return *this; @@ -559,6 +583,7 @@ QString FormatStatement::detokenize() { // No 'break', so we go to next case, the regular KEYWORD } + __attribute__((__fallthrough__)); } case FormatToken::KEYWORD: { @@ -570,13 +595,19 @@ QString FormatStatement::detokenize() case FormatToken::DATA_TYPE: { applyIndent(); - line += wrapObjIfNeeded(token->value.toString(), dialect, wrapper); + line += wrapObjIfNeeded(token->value.toString(), wrapper); break; } case FormatToken::ID: { applyIndent(); - formatId(token->value.toString()); + formatId(token->value.toString(), true); + break; + } + case FormatToken::ID_NO_WRAP: + { + applyIndent(); + formatId(token->value.toString(), false); break; } case FormatToken::STRING_OR_ID: @@ -584,17 +615,22 @@ QString FormatStatement::detokenize() applyIndent(); QString val = token->value.toString(); if (val.contains("\"")) - formatId(token->value.toString()); + formatId(token->value.toString(), true); else line += wrapObjName(token->value.toString(), NameWrapper::DOUBLE_QUOTE); break; } - case FormatToken::STAR: - case FormatToken::INTEGER: + case FormatToken::STRING: + { + applyIndent(); + line += wrapString(token->value.toString()); + break; + } case FormatToken::BLOB: case FormatToken::BIND_PARAM: - case FormatToken::STRING: + case FormatToken::STAR: + case FormatToken::INTEGER: { applyIndent(); line += token->value.toString(); @@ -816,6 +852,7 @@ bool FormatStatement::isSpaceExpectingType(FormatStatement::FormatToken::Type ty case FormatToken::KEYWORD: case FormatToken::LINED_UP_KEYWORD: case FormatToken::ID: + case FormatToken::ID_NO_WRAP: case FormatToken::STRING_OR_ID: case FormatToken::FLOAT: case FormatToken::STRING: @@ -861,6 +898,7 @@ bool FormatStatement::isMetaType(FormatStatement::FormatToken::Type type) case FormatToken::KEYWORD: case FormatToken::LINED_UP_KEYWORD: case FormatToken::ID: + case FormatToken::ID_NO_WRAP: case FormatToken::STRING_OR_ID: case FormatToken::FLOAT: case FormatToken::STRING: @@ -1079,20 +1117,25 @@ bool FormatStatement::willStartWithNewLine(FormatStatement::FormatToken* token) (token->type == FormatToken::NEW_LINE); } -void FormatStatement::formatId(const QString& value) +void FormatStatement::formatId(const QString& value, bool applyWrapping) { + if (!applyWrapping) + { + line += value; + return; + } + if (cfg->SqlEnterpriseFormatter.AlwaysUseNameWrapping.get()) - line += wrapObjName(value, dialect, true, wrapper); + line += wrapObjName(value, true, wrapper); else - line += wrapObjIfNeeded(value, dialect, true, wrapper); + line += wrapObjIfNeeded(value, true, wrapper); } -FormatStatement* FormatStatement::forQuery(SqliteStatement* query, Dialect dialect, NameWrapper wrapper, Cfg::SqlEnterpriseFormatterConfig* cfg) +FormatStatement* FormatStatement::forQuery(SqliteStatement* query, NameWrapper wrapper, Cfg::SqlEnterpriseFormatterConfig* cfg) { FormatStatement* formatStmt = forQuery(query); if (formatStmt) { - formatStmt->dialect = dialect; formatStmt->wrapper = wrapper; formatStmt->cfg = cfg; } |
