diff options
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/formatcreatetrigger.cpp')
| -rw-r--r-- | Plugins/SqlEnterpriseFormatter/formatcreatetrigger.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Plugins/SqlEnterpriseFormatter/formatcreatetrigger.cpp b/Plugins/SqlEnterpriseFormatter/formatcreatetrigger.cpp new file mode 100644 index 0000000..d05d8cf --- /dev/null +++ b/Plugins/SqlEnterpriseFormatter/formatcreatetrigger.cpp @@ -0,0 +1,90 @@ +#include "formatcreatetrigger.h" +#include "parser/ast/sqliteexpr.h" + +FormatCreateTrigger::FormatCreateTrigger(SqliteCreateTrigger* createTrig) : + createTrig(createTrig) +{ +} + +void FormatCreateTrigger::formatInternal() +{ + withKeyword("CREATE"); + if (createTrig->tempKw) + withKeyword("TEMP"); + else if (createTrig->temporaryKw) + withKeyword("TEMPORARY"); + + withKeyword("TRIGGER"); + if (createTrig->ifNotExistsKw) + withKeyword("IF").withKeyword("NOT").withKeyword("EXISTS"); + + if (dialect == Dialect::Sqlite3 && !createTrig->database.isNull()) + withId(createTrig->database).withIdDot(); + + withId(createTrig->trigger); + switch (createTrig->eventTime) + { + case SqliteCreateTrigger::Time::BEFORE: + withKeyword("BEFORE"); + break; + case SqliteCreateTrigger::Time::AFTER: + withKeyword("AFTER"); + break; + case SqliteCreateTrigger::Time::INSTEAD_OF: + withKeyword("INSTEAD").withKeyword("OF"); + break; + case SqliteCreateTrigger::Time::null: + break; + } + + withStatement(createTrig->event).withKeyword("ON"); + if (dialect == Dialect::Sqlite2 && !createTrig->database.isNull()) + withId(createTrig->database).withIdDot(); + + withId(createTrig->table); + + switch (createTrig->scope) + { + case SqliteCreateTrigger::Scope::FOR_EACH_ROW: + withKeyword("FOR").withKeyword("EACH").withKeyword("ROW"); + break; + case SqliteCreateTrigger::Scope::FOR_EACH_STATEMENT: + withKeyword("FOR").withKeyword("EACH").withKeyword("STATEMENT"); + break; + case SqliteCreateTrigger::Scope::null: + break; + } + + if (createTrig->precondition) + withKeyword("WHEN").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::formatInternal() +{ + switch (ev->type) + { + case SqliteCreateTrigger::Event::INSERT: + withKeyword("INSERT"); + break; + case SqliteCreateTrigger::Event::UPDATE: + withKeyword("UPDATE"); + break; + case SqliteCreateTrigger::Event::DELETE: + withKeyword("DELETE"); + break; + case SqliteCreateTrigger::Event::UPDATE_OF: + withKeyword("UPDATE").withKeyword("OF").withIdList(ev->columnNames); + break; + case SqliteCreateTrigger::Event::null: + break; + } +} |
