From 2b24e6bb1e45363d9d27d409e0a85acd898113c5 Mon Sep 17 00:00:00 2001 From: minleejae Date: Thu, 24 Sep 2026 21:40:22 +0900 Subject: [PATCH] feat: model MySQL CTAS duplicate handling Signed-off-by: minleejae --- .../statement/create/table/CreateTable.java | 17 +++++ .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 14 +++- .../MySqlCreateTableDuplicatesTest.java | 76 +++++++++++++++++++ 3 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 src/test/java/net/sf/jsqlparser/statement/create/MySqlCreateTableDuplicatesTest.java diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java b/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java index 643ce8bc4..fc8d37973 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java @@ -35,6 +35,7 @@ public class CreateTable implements Statement { private List indexes; private List tableElements; private Select select; + private DuplicateHandling duplicateHandling; private Table likeTable; private Table cloneTable; private ColDataType ofType; @@ -50,6 +51,19 @@ public class CreateTable implements Statement { private SpannerInterleaveIn interleaveIn = null; + public enum DuplicateHandling { + IGNORE, REPLACE + } + + /** MySQL's duplicate-key handling when creating a table from a query; null if omitted. */ + public DuplicateHandling getDuplicateHandling() { + return duplicateHandling; + } + + public void setDuplicateHandling(DuplicateHandling duplicateHandling) { + this.duplicateHandling = duplicateHandling; + } + @Override public T accept(StatementVisitor statementVisitor, S context) { return statementVisitor.visit(this, context); @@ -207,6 +221,9 @@ public void setUseAsKeyword(boolean useAsKeyword) { public StringBuilder appendSelectTo(StringBuilder builder, java.util.function.Consumer