aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/SqlEnterpriseFormatter/formatupsert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/SqlEnterpriseFormatter/formatupsert.cpp')
-rw-r--r--Plugins/SqlEnterpriseFormatter/formatupsert.cpp49
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);
+ }
+
+}