diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index f216e54dd4..077bd5d44d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -483,7 +483,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor if (onConflictDoNothing) { print0(ucase ? " DO NOTHING" : " do nothing"); } else if ((onConflictUpdateSetItems != null && onConflictUpdateSetItems.size() > 0)) { - print0(ucase ? " UPDATE SET " : " update set "); + print0(ucase ? " DO UPDATE SET " : " do update set "); printAndAccept(onConflictUpdateSetItems, ", "); } } diff --git a/src/test/java/com/alibaba/druid/postgresql/PGUpsertTest.java b/src/test/java/com/alibaba/druid/postgresql/PGUpsertTest.java new file mode 100644 index 0000000000..a09db92d0e --- /dev/null +++ b/src/test/java/com/alibaba/druid/postgresql/PGUpsertTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.postgresql; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import junit.framework.TestCase; +import org.junit.Assert; + +public class PGUpsertTest extends TestCase { + + public void testUpsert(){ + String sql = "insert into \"test_dup\" values(1,'2',-100) on conflict(id) do update set \"count\" = test_dup.\"count\" + 1;"; + String targetSql = "INSERT INTO \"test_dup\"\n" + + "VALUES (1, '2', -100)\n" + + "ON CONFLICT (id) DO UPDATE SET \"count\" = test_dup.\"count\" + 1"; + PGSQLStatementParser parser=new PGSQLStatementParser(sql); + SQLStatement statement = parser.parseStatement(); + Assert.assertEquals(targetSql, statement.toString()); + } + +}