aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
commit65d5f68cc6dc81799c5a5d90400a2c1f0dd02547 (patch)
tree6f245ba901b87ef42fed69965aea22f5eea6b590 /Plugins/SqlEnterpriseFormatter/formatstatement.cpp
parentaeb6bad01630d325a4e768e798a7a6d44e18fdaf (diff)
parent5d9314f134ddd3dc4c853e398ac90ba247fb2e4f (diff)
Merge tag 'upstream/3.1.0'
Upstream version 3.1.0 # gpg: Signature made Mon 13 Jun 2016 06:42:54 PM EDT using RSA key ID EBE9BD91 # gpg: Good signature from "Unit 193 <unit193@gmail.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.org>" # gpg: aka "Unit 193 <unit193@ubuntu.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/formatstatement.cpp')
-rw-r--r--Plugins/SqlEnterpriseFormatter/formatstatement.cpp146
1 files changed, 83 insertions, 63 deletions
diff --git a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
index e5eaed4..9702d32 100644
--- a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
+++ b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
@@ -23,6 +23,7 @@
#include "formatdelete.h"
#include "formatupdate.h"
#include "formatdropindex.h"
+#include "formatpragma.h"
#include "formatdroptable.h"
#include "formatdroptrigger.h"
#include "formatdropview.h"
@@ -55,6 +56,7 @@
#include "parser/ast/sqlitedroptrigger.h"
#include "parser/ast/sqlitedropview.h"
#include "parser/ast/sqliteorderby.h"
+#include "parser/ast/sqlitepragma.h"
#include "sqlenterpriseformatter.h"
#include "common/utils_sql.h"
#include "common/global.h"
@@ -149,6 +151,7 @@ FormatStatement *FormatStatement::forQuery(SqliteStatement *query)
FORMATTER_FACTORY_ENTRY(query, SqliteDropTrigger, FormatDropTrigger);
FORMATTER_FACTORY_ENTRY(query, SqliteDropView, FormatDropView);
FORMATTER_FACTORY_ENTRY(query, SqliteOrderBy, FormatOrderBy);
+ FORMATTER_FACTORY_ENTRY(query, SqlitePragma, FormatPragma);
if (stmt)
stmt->dialect = query->dialect;
@@ -182,9 +185,9 @@ FormatStatement& FormatStatement::withId(const QString& id)
return *this;
}
-FormatStatement& FormatStatement::withOperator(const QString& oper)
+FormatStatement& FormatStatement::withOperator(const QString& oper, FormatToken::Flags flags)
{
- withToken(FormatToken::OPERATOR, oper);
+ withToken(FormatToken::OPERATOR, oper, flags);
return *this;
}
@@ -194,15 +197,15 @@ FormatStatement&FormatStatement::withStringOrId(const QString& id)
return *this;
}
-FormatStatement& FormatStatement::withIdDot()
+FormatStatement& FormatStatement::withIdDot(FormatToken::Flags flags)
{
- withToken(FormatToken::ID_DOT, ".");
+ withToken(FormatToken::ID_DOT, ".", flags);
return *this;
}
-FormatStatement& FormatStatement::withStar()
+FormatStatement& FormatStatement::withStar(FormatToken::Flags flags)
{
- withToken(FormatToken::STAR, "*");
+ withToken(FormatToken::STAR, "*", flags);
return *this;
}
@@ -236,60 +239,60 @@ FormatStatement& FormatStatement::withBindParam(const QString& name)
return *this;
}
-FormatStatement& FormatStatement::withParDefLeft()
+FormatStatement& FormatStatement::withParDefLeft(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_DEF_LEFT, "(");
+ withToken(FormatToken::PAR_DEF_LEFT, "(", flags);
return *this;
}
-FormatStatement& FormatStatement::withParDefRight()
+FormatStatement& FormatStatement::withParDefRight(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_DEF_RIGHT, ")");
+ withToken(FormatToken::PAR_DEF_RIGHT, ")", flags);
return *this;
}
-FormatStatement& FormatStatement::withParExprLeft()
+FormatStatement& FormatStatement::withParExprLeft(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_EXPR_LEFT, "(");
+ withToken(FormatToken::PAR_EXPR_LEFT, "(", flags);
return *this;
}
-FormatStatement& FormatStatement::withParExprRight()
+FormatStatement& FormatStatement::withParExprRight(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_EXPR_RIGHT, ")");
+ withToken(FormatToken::PAR_EXPR_RIGHT, ")", flags);
return *this;
}
-FormatStatement& FormatStatement::withParFuncLeft()
+FormatStatement& FormatStatement::withParFuncLeft(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_FUNC_LEFT, "(");
+ withToken(FormatToken::PAR_FUNC_LEFT, "(", flags);
return *this;
}
-FormatStatement& FormatStatement::withParFuncRight()
+FormatStatement& FormatStatement::withParFuncRight(FormatToken::Flags flags)
{
- withToken(FormatToken::PAR_FUNC_RIGHT, ")");
+ withToken(FormatToken::PAR_FUNC_RIGHT, ")", flags);
return *this;
}
-FormatStatement& FormatStatement::withSemicolon()
+FormatStatement& FormatStatement::withSemicolon(FormatToken::Flags flags)
{
FormatToken* lastRealToken = getLastRealToken();
if ((lastRealToken && lastRealToken->type != FormatToken::SEMICOLON) || tokens.size() == 0)
- withToken(FormatToken::SEMICOLON, ";");
+ withToken(FormatToken::SEMICOLON, ";", flags);
return *this;
}
-FormatStatement& FormatStatement::withListComma()
+FormatStatement& FormatStatement::withListComma(FormatToken::Flags flags)
{
- withToken(FormatToken::COMMA_LIST, ",");
+ withToken(FormatToken::COMMA_LIST, ",", flags);
return *this;
}
-FormatStatement& FormatStatement::withCommaOper()
+FormatStatement& FormatStatement::withCommaOper(FormatToken::Flags flags)
{
- withToken(FormatToken::COMMA_OPER, ",");
+ withToken(FormatToken::COMMA_OPER, ",", flags);
return *this;
}
@@ -431,21 +434,21 @@ FormatStatement&FormatStatement::markKeywordLineUp(const QString& keyword, const
return *this;
}
-FormatStatement&FormatStatement::withSeparator(FormatStatement::ListSeparator sep)
+FormatStatement&FormatStatement::withSeparator(FormatStatement::ListSeparator sep, FormatToken::Flags flags)
{
switch (sep)
{
case ListSeparator::COMMA:
- withListComma();
+ withListComma(flags);
break;
case ListSeparator::EXPR_COMMA:
- withCommaOper();
+ withCommaOper(flags);
break;
case ListSeparator::NEW_LINE:
withNewLine();
break;
case ListSeparator::SEMICOLON:
- withSemicolon();
+ withSemicolon(flags);
break;
case ListSeparator::NONE:
break;
@@ -484,13 +487,20 @@ FormatStatement& FormatStatement::withIdList(const QStringList& names, const QSt
return *this;
}
-void FormatStatement::withToken(FormatStatement::FormatToken::Type type, const QVariant& value, const QVariant& additionalValue)
+FormatStatement::FormatToken* FormatStatement::withToken(FormatStatement::FormatToken::Type type, const QVariant& value, const QVariant& additionalValue, FormatToken::Flags flags)
{
FormatToken* token = new FormatToken;
token->type = type;
token->value = value;
token->additionalValue = additionalValue;
+ token->flags = flags;
tokens << token;
+ return token;
+}
+
+FormatStatement::FormatToken* FormatStatement::withToken(FormatStatement::FormatToken::Type type, const QVariant& value, FormatToken::Flags flags)
+{
+ return withToken(type, value, QVariant(), flags);
}
void FormatStatement::cleanup()
@@ -578,7 +588,6 @@ QString FormatStatement::detokenize()
break;
}
case FormatToken::STAR:
- case FormatToken::FLOAT:
case FormatToken::INTEGER:
case FormatToken::BLOB:
case FormatToken::BIND_PARAM:
@@ -588,14 +597,20 @@ QString FormatStatement::detokenize()
line += token->value.toString();
break;
}
+ case FormatToken::FLOAT:
+ {
+ applyIndent();
+ line += doubleToString(token->value.toDouble());
+ break;
+ }
case FormatToken::OPERATOR:
{
bool spaceAdded = endsWithSpace() || applyIndent();
- if (cfg->SqlEnterpriseFormatter.SpaceBeforeMathOp.get() && !spaceAdded)
+ if (cfg->SqlEnterpriseFormatter.SpaceBeforeMathOp.get() && !spaceAdded && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE))
line += SPACE;
line += token->value.toString();
- if (cfg->SqlEnterpriseFormatter.SpaceAfterMathOp.get())
+ if (cfg->SqlEnterpriseFormatter.SpaceAfterMathOp.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER))
line += SPACE;
break;
@@ -603,66 +618,66 @@ QString FormatStatement::detokenize()
case FormatToken::ID_DOT:
{
bool spaceAdded = endsWithSpace() || applyIndent();
- if (cfg->SqlEnterpriseFormatter.SpaceBeforeDot.get() && !spaceAdded)
+ if (cfg->SqlEnterpriseFormatter.SpaceBeforeDot.get() && !spaceAdded && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE))
line += SPACE;
line += token->value.toString();
- if (cfg->SqlEnterpriseFormatter.SpaceAfterDot.get())
+ if (cfg->SqlEnterpriseFormatter.SpaceAfterDot.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER))
line += SPACE;
break;
}
case FormatToken::PAR_DEF_LEFT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParDef.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParDef.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE);
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParDef.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParDef.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeLeftPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
case FormatToken::PAR_DEF_RIGHT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParDef.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParDef.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE);
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParDef.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParDef.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeRightPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
case FormatToken::PAR_EXPR_LEFT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParExpr.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParExpr.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE);
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeLeftPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
case FormatToken::PAR_EXPR_RIGHT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParExpr.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParExpr.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE);
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeRightPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
case FormatToken::PAR_FUNC_LEFT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get() && !cfg->SqlEnterpriseFormatter.NoSpaceAfterFunctionName.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParExpr.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParExpr.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE) && !cfg->SqlEnterpriseFormatter.NoSpaceAfterFunctionName.get();
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterOpenPar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeOpenParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterOpenParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeLeftPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
case FormatToken::PAR_FUNC_RIGHT:
{
- bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get();
- bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get();
- bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParExpr.get();
- bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParExpr.get();
+ bool spaceBefore = cfg->SqlEnterpriseFormatter.SpaceBeforeClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_BEFORE);
+ bool spaceAfter = cfg->SqlEnterpriseFormatter.SpaceAfterClosePar.get() && !token->flags.testFlag(FormatToken::Flag::NO_SPACE_AFTER);
+ bool nlBefore = cfg->SqlEnterpriseFormatter.NlBeforeCloseParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE);
+ bool nlAfter = cfg->SqlEnterpriseFormatter.NlAfterCloseParExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER);
detokenizeRightPar(token, spaceBefore, spaceAfter, nlBefore, nlAfter);
break;
}
@@ -689,7 +704,7 @@ QString FormatStatement::detokenize()
}
case FormatToken::COMMA_LIST:
{
- if (cfg->SqlEnterpriseFormatter.SpaceNeverBeforeComma.get())
+ if (cfg->SqlEnterpriseFormatter.SpaceNeverBeforeComma.get() || token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_BEFORE))
{
removeAllSpaces();
}
@@ -701,7 +716,7 @@ QString FormatStatement::detokenize()
}
line += token->value.toString();
- if (cfg->SqlEnterpriseFormatter.NlAfterComma.get())
+ if (cfg->SqlEnterpriseFormatter.NlAfterComma.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER))
newLine();
else if (cfg->SqlEnterpriseFormatter.SpaceAfterCommaInList.get())
line += SPACE;
@@ -722,7 +737,7 @@ QString FormatStatement::detokenize()
}
line += token->value.toString();
- if (cfg->SqlEnterpriseFormatter.NlAfterCommaInExpr.get())
+ if (cfg->SqlEnterpriseFormatter.NlAfterCommaInExpr.get() && !token->flags.testFlag(FormatToken::Flag::NO_NEWLINE_AFTER))
newLine();
else if (cfg->SqlEnterpriseFormatter.SpaceAfterCommaInList.get())
line += SPACE;
@@ -924,6 +939,11 @@ FormatStatement::FormatToken* FormatStatement::getLastRealToken(bool skipNewLine
return nullptr;
}
+FormatStatement::FormatToken* FormatStatement::getLastToken()
+{
+ return tokens.last();
+}
+
void FormatStatement::detokenizeLeftPar(FormatToken* token, bool spaceBefore, bool spaceAfter, bool nlBefore, bool nlAfter)
{
bool spaceAdded = endsWithSpace();
@@ -1059,9 +1079,9 @@ bool FormatStatement::willStartWithNewLine(FormatStatement::FormatToken* token)
void FormatStatement::formatId(const QString& value)
{
if (cfg->SqlEnterpriseFormatter.AlwaysUseNameWrapping.get())
- line += wrapObjName(value, dialect, wrapper);
+ line += wrapObjName(value, dialect, true, wrapper);
else
- line += wrapObjIfNeeded(value, dialect, wrapper);
+ line += wrapObjIfNeeded(value, dialect, true, wrapper);
}
FormatStatement* FormatStatement::forQuery(SqliteStatement* query, Dialect dialect, NameWrapper wrapper, Cfg::SqlEnterpriseFormatterConfig* cfg)