diff options
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/formatupsert.cpp')
| -rw-r--r-- | Plugins/SqlEnterpriseFormatter/formatupsert.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Plugins/SqlEnterpriseFormatter/formatupsert.cpp b/Plugins/SqlEnterpriseFormatter/formatupsert.cpp new file mode 100644 index 0000000..70992f9 --- /dev/null +++ b/Plugins/SqlEnterpriseFormatter/formatupsert.cpp @@ -0,0 +1,49 @@ +#include "formatupsert.h" +#include "parser/ast/sqliteupsert.h" +#include "parser/ast/sqliteexpr.h" +#include "parser/ast/sqliteorderby.h" + +FormatUpsert::FormatUpsert(SqliteUpsert* upsert) : + upsert(upsert) +{ + +} + +void FormatUpsert::formatInternal() +{ + withKeyword("ON").withKeyword("CONFLICT"); + if (!upsert->conflictColumns.isEmpty()) + { + withParDefLeft().withStatementList(upsert->conflictColumns).withParDefRight(); + if (upsert->conflictWhere) + withKeyword("WHERE").withStatement(upsert->conflictWhere); + } + + withKeyword("DO"); + + if (upsert->doNothing) + { + withKeyword("NOTHING"); + } + else + { + withKeyword("UPDATE").withKeyword("SET"); + bool first = true; + for (const SqliteUpsert::ColumnAndValue& keyVal : upsert->keyValueMap) + { + if (!first) + withListComma(); + + if (keyVal.first.type() == QVariant::StringList) + withParDefLeft().withIdList(keyVal.first.toStringList()).withParDefRight().withOperator("=").withStatement(keyVal.second); + else + withId(keyVal.first.toString()).withOperator("=").withStatement(keyVal.second); + + first = false; + } + + if (upsert->setWhere) + withKeyword("WHERE").withStatement(upsert->setWhere); + } + +} |
