aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
commit1fdc150116cad39aae5c5da407c3312b47a59e3a (patch)
tree123c79a4d7ad2d45781ba03ce939f7539fb428d8 /Plugins/SqlEnterpriseFormatter/formatstatement.cpp
parentfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (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.cpp79
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;
}