1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#include "formatcreatetrigger.h"
#include "parser/ast/sqliteexpr.h"
FormatCreateTrigger::FormatCreateTrigger(SqliteCreateTrigger* createTrig) :
createTrig(createTrig)
{
}
void FormatCreateTrigger::formatInternal()
{
handleExplainQuery(createTrig);
QStringList keywords;
keywords << "CREATE";
if (createTrig->tempKw)
keywords << "TEMP";
else if (createTrig->temporaryKw)
keywords << "TEMPORARY";
keywords << "TRIGGER";
if (createTrig->ifNotExistsKw)
keywords << "IF" << "NOT" << "EXISTS";
QString kwLineUp = keywords.join(" ");
markKeywordLineUp(kwLineUp, TRIGGER_MARK);
for (const QString& kw : keywords)
withKeyword(kw);
if (!createTrig->database.isNull())
withId(createTrig->database).withIdDot();
withId(createTrig->trigger).withNewLine();
FormatStatementEnricher eventStmtEnricher = nullptr;
switch (createTrig->eventTime)
{
case SqliteCreateTrigger::Time::BEFORE:
withLinedUpKeyword("BEFORE", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Time::AFTER:
withLinedUpKeyword("AFTER", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Time::INSTEAD_OF:
withLinedUpKeyword("INSTEAD OF", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Time::null:
eventStmtEnricher = [kwLineUp](FormatStatement* stmt)
{
dynamic_cast<FormatCreateTriggerEvent*>(stmt)->setLineUpKeyword(kwLineUp);
};
break;
}
withStatement(createTrig->event, QString(), eventStmtEnricher).withNewLine();
withLinedUpKeyword("ON", TRIGGER_MARK);
withId(createTrig->table).withNewLine();
switch (createTrig->scope)
{
case SqliteCreateTrigger::Scope::FOR_EACH_ROW:
withLinedUpKeyword("FOR EACH", TRIGGER_MARK).withKeyword("ROW").withNewLine();
break;
case SqliteCreateTrigger::Scope::FOR_EACH_STATEMENT:
withLinedUpKeyword("FOR EACH", TRIGGER_MARK).withKeyword("STATEMENT").withNewLine();
break;
case SqliteCreateTrigger::Scope::null:
break;
}
if (createTrig->precondition)
withLinedUpKeyword("WHEN", TRIGGER_MARK).withStatement(createTrig->precondition);
withNewLine().withKeyword("BEGIN").withNewLine().withIncrIndent().withStatementList(createTrig->queries, QString(), ListSeparator::SEMICOLON).withSemicolon();
withDecrIndent().withKeyword("END").withSemicolon();
}
FormatCreateTriggerEvent::FormatCreateTriggerEvent(SqliteCreateTrigger::Event* ev) :
ev(ev)
{
}
void FormatCreateTriggerEvent::setLineUpKeyword(const QString& lineUpKw)
{
this->lineUpKw = lineUpKw;
}
void FormatCreateTriggerEvent::formatInternal()
{
if (!lineUpKw.isNull())
markKeywordLineUp(lineUpKw, TRIGGER_MARK);
switch (ev->type)
{
case SqliteCreateTrigger::Event::INSERT:
withLinedUpKeyword("INSERT", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Event::UPDATE:
withLinedUpKeyword("UPDATE", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Event::DELETE:
withLinedUpKeyword("DELETE", TRIGGER_MARK);
break;
case SqliteCreateTrigger::Event::UPDATE_OF:
withLinedUpKeyword("UPDATE OF", TRIGGER_MARK).withIdList(ev->columnNames, "updateOfCols");
break;
case SqliteCreateTrigger::Event::null:
break;
}
}
|