From 8cf53985ef1d851f365cf3cfc605bb6937568692 Mon Sep 17 00:00:00 2001 From: minleejae Date: Tue, 22 Sep 2026 16:33:09 +0900 Subject: [PATCH] feat: model qualified PostgreSQL exclusion operators Signed-off-by: minleejae --- .../create/table/ExclusionOperator.java | 68 ++++++++++++++ .../statement/create/table/Index.java | 20 +++- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 26 ++++- src/site/sphinx/usage.rst | 9 ++ .../PostgreSqlExclusionOperatorTest.java | 94 +++++++++++++++++++ 5 files changed, 210 insertions(+), 7 deletions(-) create mode 100644 src/main/java/net/sf/jsqlparser/statement/create/table/ExclusionOperator.java create mode 100644 src/test/java/net/sf/jsqlparser/statement/alter/PostgreSqlExclusionOperatorTest.java diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/ExclusionOperator.java b/src/main/java/net/sf/jsqlparser/statement/create/table/ExclusionOperator.java new file mode 100644 index 000000000..5ae3529a9 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/ExclusionOperator.java @@ -0,0 +1,68 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2026 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement.create.table; + +import java.io.Serializable; + +/** An exclusion operator, optionally qualified and enclosed in PostgreSQL OPERATOR(...). */ +public class ExclusionOperator implements Serializable { + private String schemaName; + private String name; + private boolean useOperatorKeyword; + + public String getSchemaName() { + return schemaName; + } + + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isUseOperatorKeyword() { + return useOperatorKeyword; + } + + public void setUseOperatorKeyword(boolean useOperatorKeyword) { + this.useOperatorKeyword = useOperatorKeyword; + } + + public ExclusionOperator withSchemaName(String schemaName) { + setSchemaName(schemaName); + return this; + } + + public ExclusionOperator withName(String name) { + setName(name); + return this; + } + + public ExclusionOperator withUseOperatorKeyword(boolean useOperatorKeyword) { + setUseOperatorKeyword(useOperatorKeyword); + return this; + } + + /** Returns the qualified name without an OPERATOR wrapper, preserving identifier quotes. */ + public String getQualifiedName() { + return (schemaName == null ? "" : schemaName + ".") + name; + } + + @Override + public String toString() { + return useOperatorKeyword ? "OPERATOR(" + getQualifiedName() + ")" : getQualifiedName(); + } +} diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java b/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java index bf1bbbf40..ffd6bad08 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/Index.java @@ -414,16 +414,32 @@ public enum NullOrdering { private List