diff --git a/src/main/java/net/sf/jsqlparser/schema/Sequence.java b/src/main/java/net/sf/jsqlparser/schema/Sequence.java index 5d7b960cd..efff62a97 100644 --- a/src/main/java/net/sf/jsqlparser/schema/Sequence.java +++ b/src/main/java/net/sf/jsqlparser/schema/Sequence.java @@ -30,6 +30,15 @@ public class Sequence extends ASTNodeAccessImpl implements MultiPartName { private List parameters; private String dataType; + private SequenceOwnership ownership; + + public SequenceOwnership getOwnership() { + return ownership; + } + + public void setOwnership(SequenceOwnership ownership) { + this.ownership = ownership; + } public Sequence() {} @@ -151,6 +160,9 @@ public String toString() { sql.append(" ").append(parameter.formatParameter()); } } + if (ownership != null) { + sql.append(' ').append(ownership); + } return sql.toString(); } @@ -175,7 +187,7 @@ public Sequence addParameters(Collection parameters) { * The available parameters to a sequence */ public enum ParameterType { - INCREMENT_BY, INCREMENT, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL; + INCREMENT_BY, INCREMENT, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL, NO_MINVALUE, NO_MAXVALUE, NO_CYCLE; public static ParameterType from(String type) { return Enum.valueOf(ParameterType.class, type.toUpperCase(Locale.ROOT)); @@ -185,7 +197,7 @@ public static ParameterType from(String type) { /** * Represents a parameter when declaring a sequence */ - public static class Parameter { + public static class Parameter implements java.io.Serializable { private final ParameterType option; private Long value; @@ -198,6 +210,15 @@ public Long getValue() { return value; } + public ParameterType getOption() { + return option; + } + + @Override + public String toString() { + return formatParameter(); + } + public void setValue(Long value) { this.value = value; } @@ -222,6 +243,10 @@ public String formatParameter() { case MINVALUE: case CACHE: return prefix(option.name()); + case NO_MINVALUE: + case NO_MAXVALUE: + case NO_CYCLE: + return option.name().replace('_', ' '); default: // fallthrough just return option name return option.name(); diff --git a/src/main/java/net/sf/jsqlparser/schema/SequenceOwnership.java b/src/main/java/net/sf/jsqlparser/schema/SequenceOwnership.java new file mode 100644 index 000000000..8f3f95322 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/schema/SequenceOwnership.java @@ -0,0 +1,43 @@ +/*- + * #%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.schema; + +import java.io.Serializable; +import java.util.Objects; + +/** Distinguishes explicit OWNED BY NONE from an owning column and from an omitted clause. */ +public class SequenceOwnership implements Serializable { + private final Column column; + + private SequenceOwnership(Column column) { + this.column = column; + } + + public static SequenceOwnership none() { + return new SequenceOwnership(null); + } + + public static SequenceOwnership ownedBy(Column column) { + return new SequenceOwnership(Objects.requireNonNull(column, "column")); + } + + public Column getColumn() { + return column; + } + + public boolean isNone() { + return column == null; + } + + @Override + public String toString() { + return "OWNED BY " + (column == null ? "NONE" : column); + } +} diff --git a/src/main/java/net/sf/jsqlparser/statement/LikeClause.java b/src/main/java/net/sf/jsqlparser/statement/LikeClause.java index 448b4de72..35e0cc70b 100644 --- a/src/main/java/net/sf/jsqlparser/statement/LikeClause.java +++ b/src/main/java/net/sf/jsqlparser/statement/LikeClause.java @@ -12,26 +12,94 @@ import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.imprt.ImportColumn; +import net.sf.jsqlparser.statement.create.table.TableElement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.SelectItem; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; /** - * Exasol Like Clause + * A LIKE clause used in table definitions and Exasol imports. * * @see Like Clause in CREATE * TABLE * @see Like Clause in IMPORT */ -public class LikeClause implements ImportColumn, Serializable { +public class LikeClause implements ImportColumn, TableElement, Serializable { private Table table; private List> columnsList; - private Boolean includingDefaults; - private Boolean includingIdentity; - private Boolean includingComments; + private List