as(String alias);
+ /**
+ * Create an alias for this field.
+ *
+ * Note that the case-sensitivity of the returned field depends on
+ * {@link Settings#getRenderNameStyle()} and the {@link Name}. By default,
+ * field aliases are quoted, and thus case-sensitive - use
+ * {@link DSL#unquotedName(String...)} for case-insensitive aliases.
+ *
+ * If the argument {@link Name#getName()} is qualified, then the
+ * {@link Name#last()} part will be used.
+ *
+ * @param alias The alias name
+ * @return The field alias
+ */
+ @Support
+ Field as(Name alias);
+
/**
* Create an alias for this field based on another field's name.
*
diff --git a/jOOQ/src/main/java/org/jooq/Table.java b/jOOQ/src/main/java/org/jooq/Table.java
index 44b872d5a9..2e216b5fc1 100644
--- a/jOOQ/src/main/java/org/jooq/Table.java
+++ b/jOOQ/src/main/java/org/jooq/Table.java
@@ -379,6 +379,119 @@ public interface Table extends TableLike {
Table as(String alias, BiFunction super Field>, ? super Integer, ? extends String> aliasFunction);
+ /**
+ * Create an alias for this table.
+ *
+ * Note that the case-sensitivity of the returned table depends on
+ * {@link Settings#getRenderNameStyle()} and the {@link Name}. By default,
+ * table aliases are quoted, and thus case-sensitive - use
+ * {@link DSL#unquotedName(String...)} for case-insensitive aliases.
+ *
+ * If the argument {@link Name#getName()} is qualified, then the
+ * {@link Name#last()} part will be used.
+ *
+ * @param alias The alias name
+ * @return The table alias
+ */
+ @Support
+ Table as(Name alias);
+
+ /**
+ * Create an alias for this table and its fields.
+ *
+ * Note that the case-sensitivity of the returned table depends on
+ * {@link Settings#getRenderNameStyle()} and the {@link Name}. By default,
+ * table aliases are quoted, and thus case-sensitive - use
+ * {@link DSL#unquotedName(String...)} for case-insensitive aliases.
+ *
+ * If the argument {@link Name#getName()} is qualified, then the
+ * {@link Name#last()} part will be used.
+ *
+ *
Derived column lists for table references
+ *
+ * Note, not all databases support derived column lists for their table
+ * aliases. On the other hand, some databases do support derived column
+ * lists, but only for derived tables. jOOQ will try to turn table
+ * references into derived tables to make this syntax work. In other words,
+ * the following statements are equivalent:
+ * -- Using derived column lists to rename columns (e.g. Postgres)
+ * SELECT t.a, t.b
+ * FROM my_table t(a, b)
+ *
+ * -- Nesting table references within derived tables (e.g. SQL Server)
+ * SELECT t.a, t.b
+ * FROM (
+ * SELECT * FROM my_table
+ * ) t(a, b)
+ *
+ *
+ *
Derived column lists for derived tables
+ *
+ * Other databases may not support derived column lists at all, but they do
+ * support common table expressions. The following statements are
+ * equivalent:
+ * -- Using derived column lists to rename columns (e.g. Postgres)
+ * SELECT t.a, t.b
+ * FROM (
+ * SELECT 1, 2
+ * ) AS t(a, b)
+ *
+ * -- Using UNION ALL to produce column names (e.g. MySQL)
+ * SELECT t.a, t.b
+ * FROM (
+ * SELECT null a, null b FROM DUAL WHERE 1 = 0
+ * UNION ALL
+ * SELECT 1, 2 FROM DUAL
+ * ) t
+ *
+ *
+ * @param alias The alias name
+ * @param fieldAliases The field aliases. Excess aliases are ignored,
+ * missing aliases will be substituted by this table's field
+ * names.
+ * @return The table alias
+ */
+ @Support
+ Table as(Name alias, Name... fieldAliases);
+
+
+ /**
+ * Create an alias for this table and its fields.
+ *
+ * This works like {@link #as(Name, Name...)}, except that field aliases
+ * are provided by a function. This is useful, for instance, to prefix all
+ * columns with a common prefix:
+ *
+ *
+ * MY_TABLE.as("t1", f -> "prefix_" + f.getName());
+ *
+ *
+ * @param alias The alias name
+ * @param aliasFunction The function providing field aliases.
+ * @return The table alias
+ */
+ @Support
+ Table as(Name alias, Function super Field>, ? extends Name> aliasFunction);
+
+ /**
+ * Create an alias for this table and its fields.
+ *
+ * This works like {@link #as(Name, Name...)}, except that field aliases
+ * are provided by a function. This is useful, for instance, to prefix all
+ * columns with a common prefix:
+ *
+ *
+ * MY_TABLE.as("t1", (f, i) -> "column" + i);
+ *
+ *
+ * @param alias The alias name
+ * @param aliasFunction The function providing field aliases.
+ * @return The table alias
+ */
+ @Support
+ Table as(Name alias, BiFunction super Field>, ? super Integer, ? extends Name> aliasFunction);
+
+
/**
* Create an alias for this table based on another table's name.
*
@@ -411,7 +524,7 @@ public interface Table extends TableLike {
/**
* Create an alias for this table and its fields.
*
- * This works like {@link #as(String, String...)}, except that field aliases
+ * This works like {@link #as(Table, Field...)}, except that field aliases
* are provided by a function. This is useful, for instance, to prefix all
* columns with a common prefix:
*
@@ -429,7 +542,7 @@ public interface Table extends TableLike {
/**
* Create an alias for this table and its fields.
*
- * This works like {@link #as(String, String...)}, except that field aliases
+ * This works like {@link #as(Table, Field...)}, except that field aliases
* are provided by a function. This is useful, for instance, to prefix all
* columns with a common prefix:
*
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
index 833ccdc094..05b23e4334 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java
@@ -87,6 +87,7 @@ import org.jooq.DataType;
import org.jooq.DatePart;
import org.jooq.Field;
import org.jooq.LikeEscapeStep;
+import org.jooq.Name;
import org.jooq.QuantifiedSelect;
import org.jooq.Record;
import org.jooq.Record1;
@@ -109,16 +110,16 @@ abstract class AbstractField extends AbstractQueryPart implements Field {
private static final long serialVersionUID = 2884811923648354905L;
private static final Clause[] CLAUSES = { FIELD };
- private final String name;
+ private final Name name;
private final String comment;
private final DataType dataType;
- AbstractField(String name, DataType type) {
+ AbstractField(Name name, DataType type) {
this(name, type, null, type.getBinding());
}
@SuppressWarnings("unchecked")
- AbstractField(String name, DataType type, String comment, Binding, T> binding) {
+ AbstractField(Name name, DataType type, String comment, Binding, T> binding) {
super();
this.name = name;
@@ -182,12 +183,18 @@ abstract class AbstractField extends AbstractQueryPart implements Field {
// ------------------------------------------------------------------------
@Override
- public Field as(String alias) {
+ public final Field as(String alias) {
+ return as(DSL.name(alias));
+ }
+
+ @Override
+ public Field as(Name alias) {
return new FieldAlias(this, alias);
}
@Override
public final Field as(Field> otherField) {
+ // [#5997] TODO Change this
return as(otherField.getName());
}
@@ -202,7 +209,7 @@ abstract class AbstractField extends AbstractQueryPart implements Field {
@Override
public final String getName() {
- return name;
+ return StringUtils.defaultIfNull(name.last(), "");
}
@Override
@@ -2032,21 +2039,18 @@ abstract class AbstractField extends AbstractQueryPart implements Field {
@Override
public boolean equals(Object that) {
- if (this == that) {
+ if (this == that)
return true;
- }
// [#2144] Non-equality can be decided early, without executing the
// rather expensive implementation of AbstractQueryPart.equals()
- if (that instanceof AbstractField) {
- if (StringUtils.equals(name, (((AbstractField>) that).name))) {
+ if (that instanceof AbstractField)
+ if (StringUtils.equals(name.last(), (((AbstractField>) that).name.last())))
return super.equals(that);
- }
-
+ else
+ return false;
+ else
return false;
- }
-
- return false;
}
@Override
@@ -2054,6 +2058,6 @@ abstract class AbstractField extends AbstractQueryPart implements Field {
// [#1938] This is a much more efficient hashCode() implementation
// compared to that of standard QueryParts
- return name.hashCode();
+ return name.last().hashCode();
}
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractFunction.java
index 93de299da0..1a3c313823 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractFunction.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractFunction.java
@@ -55,7 +55,7 @@ abstract class AbstractFunction extends AbstractField {
private final Field>[] arguments;
AbstractFunction(String name, DataType type, Field>... arguments) {
- super(name, type);
+ super(DSL.name(name), type);
this.arguments = arguments;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java
index ee68d33cb6..8ae7292fd5 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java
@@ -45,6 +45,7 @@ import static org.jooq.conf.ParamType.NAMED_OR_INLINED;
import org.jooq.Clause;
import org.jooq.Context;
import org.jooq.DataType;
+import org.jooq.Name;
import org.jooq.Param;
import org.jooq.ParamMode;
import org.jooq.UDTRecord;
@@ -87,8 +88,9 @@ abstract class AbstractParam extends AbstractField implements Param {
* Otherwise, take the string value of value
*
*/
- private static String name(Object value, String paramName) {
- return paramName != null
+ private static Name name(Object value, String paramName) {
+ return DSL.name(
+ paramName != null
? paramName
// [#3707] Protect value.toString call for certain jOOQ types.
@@ -99,7 +101,8 @@ abstract class AbstractParam extends AbstractField implements Param {
- : String.valueOf(value);
+ : String.valueOf(value)
+ );
}
// ------------------------------------------------------------------------
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java
index 441d807ccd..19d69f2032 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java
@@ -1513,7 +1513,9 @@ public abstract class AbstractRoutine extends AbstractQueryPart implements Ro
@SuppressWarnings("unchecked")
RoutineField() {
- super(AbstractRoutine.this.getName(),
+
+ // [#5997] TODO Retain quotation flag
+ super(DSL.name(AbstractRoutine.this.getName()),
AbstractRoutine.this.type == null
// [#4254] PostgreSQL may have stored functions that don't
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java
index a36a854217..b39dead8f3 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java
@@ -290,6 +290,16 @@ abstract class AbstractTable extends AbstractQueryPart impleme
return as(alias, aliasFunction);
}
+ @Override
+ public /* non-final for covariant overriding */ Table as(String alias) {
+ return as(DSL.name(alias));
+ }
+
+ @Override
+ public /* non-final for covariant overriding */ Table as(String alias, String... fieldAliases) {
+ return as(DSL.name(alias), Tools.names(fieldAliases));
+ }
+
@Override
public final Table as(String alias, Function super Field>, ? extends String> aliasFunction) {
return as(alias, Stream.of(fields()).map(aliasFunction).toArray(String[]::new));
@@ -305,6 +315,32 @@ abstract class AbstractTable extends AbstractQueryPart impleme
}
+ @Override
+ public /* non-final for covariant overriding */ Table as(Name alias) {
+ throw new UnsupportedOperationException("Subtypes should override this method. If using the jOOQ code generator, please re-generate your code");
+ }
+
+ @Override
+ public /* non-final for covariant overriding */ Table as(Name alias, Name... fieldAliases) {
+ throw new UnsupportedOperationException("Subtypes should override this method. If using the jOOQ code generator, please re-generate your code");
+ }
+
+
+ @Override
+ public final Table as(Name alias, Function super Field>, ? extends Name> aliasFunction) {
+ return as(alias, Stream.of(fields()).map(aliasFunction).toArray(Name[]::new));
+ }
+
+ @Override
+ public final Table as(Name alias, BiFunction super Field>, ? super Integer, ? extends Name> aliasFunction) {
+ Field>[] fields = fields();
+ Name[] names = new Name[fields.length];
+ for (int i = 0; i < fields.length; i++)
+ names[i] = aliasFunction.apply(fields[i], i);
+ return as(alias, names);
+ }
+
+
// ------------------------------------------------------------------------
// XXX: Table API
// ------------------------------------------------------------------------
@@ -492,7 +528,8 @@ abstract class AbstractTable extends AbstractQueryPart impleme
? (DataType) type
: type.asConvertedDataType(actualBinding);
- final TableFieldImpl tableField = new TableFieldImpl(name, actualType, table, comment, actualBinding);
+ // [#5999] TODO: Allow for user-defined Names
+ final TableFieldImpl tableField = new TableFieldImpl(DSL.name(name), actualType, table, comment, actualBinding);
// [#1199] The public API of Table returns immutable field lists
if (table instanceof TableImpl) {
@@ -651,22 +688,26 @@ abstract class AbstractTable extends AbstractQueryPart impleme
@Override
public final Table as(Table> otherTable) {
+ // [#5997] TODO Change this
return as(otherTable.getName());
}
@Override
public final Table as(Table> otherTable, Field>... otherFields) {
+ // [#5997] TODO Change this
return as(otherTable.getName(), Tools.fieldNames(otherFields));
}
@Override
public final Table as(Table> otherTable, Function super Field>, ? extends Field>> aliasFunction) {
+ // [#5997] TODO Change this
return as(otherTable.getName(), f -> aliasFunction.apply(f).getName());
}
@Override
public final Table as(Table> otherTable, BiFunction super Field>, ? super Integer, ? extends Field>> aliasFunction) {
+ // [#5997] TODO Change this
return as(otherTable.getName(), (f, i) -> aliasFunction.apply(f, i).getName());
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Alias.java b/jOOQ/src/main/java/org/jooq/impl/Alias.java
index 347e05ded8..abda943be4 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Alias.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Alias.java
@@ -68,6 +68,7 @@ import static org.jooq.impl.Tools.DataKey.DATA_UNALIAS_ALIASES_IN_ORDER_BY;
import org.jooq.Clause;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.QueryPart;
import org.jooq.Record;
import org.jooq.SQLDialect;
@@ -86,23 +87,23 @@ final class Alias extends AbstractQueryPart {
private static final Clause[] CLAUSES_FIELD_ALIAS = { FIELD, FIELD_ALIAS };
private final Q wrapped;
- private final String alias;
- private final String[] fieldAliases;
+ private final Name alias;
+ private final Name[] fieldAliases;
private final boolean wrapInParentheses;
- Alias(Q wrapped, String alias) {
+ Alias(Q wrapped, Name alias) {
this(wrapped, alias, null, false);
}
- Alias(Q wrapped, String alias, boolean wrapInParentheses) {
+ Alias(Q wrapped, Name alias, boolean wrapInParentheses) {
this(wrapped, alias, null, wrapInParentheses);
}
- Alias(Q wrapped, String alias, String[] fieldAliases) {
+ Alias(Q wrapped, Name alias, Name[] fieldAliases) {
this(wrapped, alias, fieldAliases, false);
}
- Alias(Q wrapped, String alias, String[] fieldAliases, boolean wrapInParentheses) {
+ Alias(Q wrapped, Name alias, Name[] fieldAliases, boolean wrapInParentheses) {
this.wrapped = wrapped;
this.alias = alias;
this.fieldAliases = fieldAliases;
@@ -115,6 +116,8 @@ final class Alias extends AbstractQueryPart {
@Override
public final void accept(Context> context) {
+ boolean qualify = context.qualify();
+
if (context.declareAliases() && (context.declareFields() || context.declareTables())) {
context.declareAliases(false);
@@ -143,8 +146,7 @@ final class Alias extends AbstractQueryPart {
emulatedDerivedColumnList = true;
SelectFieldList fields = new SelectFieldList();
- for (String fieldAlias : fieldAliases) {
-
+ for (Name fieldAlias : fieldAliases) {
switch (family) {
@@ -189,8 +191,10 @@ final class Alias extends AbstractQueryPart {
// [#291] some aliases cause trouble, if they are not explicitly marked using "as"
toSQLAs(context);
- context.sql(' ');
- context.literal(alias);
+ context.sql(' ')
+ .qualify(false)
+ .visit(alias)
+ .qualify(qualify);
// [#1801] Add field aliases to the table alias, if applicable
if (fieldAliases != null && !emulatedDerivedColumnList) {
@@ -234,7 +238,9 @@ final class Alias extends AbstractQueryPart {
else {
- context.literal(alias);
+ context.qualify(false)
+ .visit(alias)
+ .qualify(qualify);
}
}
@@ -257,7 +263,7 @@ final class Alias extends AbstractQueryPart {
for (int i = 0; i < fieldAliases.length; i++) {
context.sql(separator);
- context.literal(fieldAliases[i]);
+ context.visit(fieldAliases[i]);
separator = ", ";
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Array.java b/jOOQ/src/main/java/org/jooq/impl/Array.java
index a4f52c5e00..885647813e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Array.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Array.java
@@ -56,7 +56,7 @@ final class Array extends AbstractField {
private final Fields fields;
Array(Collection extends Field> fields) {
- super("array", type(fields));
+ super(DSL.name("array"), type(fields));
this.fields = new Fields(fields);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java
index 4ca4b9ef56..ce18208050 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ArrayTable.java
@@ -43,6 +43,7 @@ import java.util.List;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.Param;
import org.jooq.Record;
import org.jooq.Table;
@@ -64,20 +65,20 @@ final class ArrayTable extends AbstractTable {
private final Field> array;
private final Fields field;
- private final String alias;
- private final String[] fieldAliases;
+ private final Name alias;
+ private final Name[] fieldAliases;
ArrayTable(Field> array) {
- this(array, "array_table");
+ this(array, DSL.name("array_table"));
}
- ArrayTable(Field> array, String alias) {
- this(array, alias, new String[] { "COLUMN_VALUE" });
+ ArrayTable(Field> array, Name alias) {
+ this(array, alias, new Name[] { DSL.name("COLUMN_VALUE") });
}
@SuppressWarnings({ "unchecked" })
- ArrayTable(Field> array, String alias, String[] fieldAliases) {
- super(alias);
+ ArrayTable(Field> array, Name alias, Name[] fieldAliases) {
+ super(alias.last());
Class> arrayType;
@@ -112,7 +113,7 @@ final class ArrayTable extends AbstractTable {
this.field = init(arrayType, alias, fieldAliases);
}
- private static final Fields init(Class> arrayType, String alias, String[] fieldAliases) {
+ private static final Fields init(Class> arrayType, Name alias, Name[] fields) {
List> result = new ArrayList>();
// [#1114] VARRAY/TABLE of OBJECT have more than one field
@@ -120,7 +121,7 @@ final class ArrayTable extends AbstractTable {
try {
UDTRecord> record = (UDTRecord>) arrayType.newInstance();
for (Field> f : record.fields()) {
- result.add(DSL.field(name(alias, f.getName()), f.getDataType()));
+ result.add(DSL.field(name(alias.last(), f.getName()), f.getDataType()));
}
}
catch (Exception e) {
@@ -130,7 +131,7 @@ final class ArrayTable extends AbstractTable {
// Simple array types have a synthetic field called "COLUMN_VALUE"
else {
- result.add(DSL.field(name(alias, "COLUMN_VALUE"), DSL.getDataType(arrayType)));
+ result.add(DSL.field(name(alias.last(), "COLUMN_VALUE"), DSL.getDataType(arrayType)));
}
return new Fields(result);
@@ -142,13 +143,13 @@ final class ArrayTable extends AbstractTable {
}
@Override
- public final Table as(String as) {
+ public final Table as(Name as) {
return new ArrayTable(array, as);
}
@Override
- public final Table as(String as, String... fieldAliases) {
- return new ArrayTable(array, as, fieldAliases);
+ public final Table as(Name as, Name... fields) {
+ return new ArrayTable(array, as, fields);
}
@Override
@@ -223,7 +224,7 @@ final class ArrayTable extends AbstractTable {
public final void accept(Context> ctx) {
ctx.keyword("table")
.sql('(')
- .visit(name(fieldAliases == null || fieldAliases.length == 0 ? "COLUMN_VALUE" : fieldAliases[0]))
+ .visit(fieldAliases == null || fieldAliases.length == 0 ? DSL.name("COLUMN_VALUE") : fieldAliases[0])
.sql(' ');
// If the array type is unknown (e.g. because it's returned from
@@ -260,7 +261,7 @@ final class ArrayTable extends AbstractTable {
private static final long serialVersionUID = 2662639259338694177L;
DialectArrayTable() {
- super(alias);
+ super(alias.last());
}
@Override
@@ -269,13 +270,13 @@ final class ArrayTable extends AbstractTable {
}
@Override
- public final Table as(String as) {
+ public final Table as(Name as) {
return new TableAlias(this, as);
}
@Override
- public final Table as(String as, String... fieldAliases) {
- return new TableAlias(this, as, fieldAliases);
+ public final Table as(Name as, Name... fields) {
+ return new TableAlias(this, as, fields);
}
@Override
diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayTableEmulation.java b/jOOQ/src/main/java/org/jooq/impl/ArrayTableEmulation.java
index 8c3cafd972..849c02a6be 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ArrayTableEmulation.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ArrayTableEmulation.java
@@ -42,6 +42,7 @@ import static org.jooq.impl.DSL.using;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Select;
import org.jooq.Table;
@@ -61,26 +62,26 @@ final class ArrayTableEmulation extends AbstractTable {
private final Object[] array;
private final Fields field;
- private final String alias;
- private final String fieldAlias;
+ private final Name alias;
+ private final Name fieldAlias;
private transient Table table;
ArrayTableEmulation(Object[] array) {
- this(array, "array_table", null);
+ this(array, DSL.name("array_table"), null);
}
- ArrayTableEmulation(Object[] array, String alias) {
+ ArrayTableEmulation(Object[] array, Name alias) {
this(array, alias, null);
}
- ArrayTableEmulation(Object[] array, String alias, String fieldAlias) {
- super(alias);
+ ArrayTableEmulation(Object[] array, Name alias, Name fieldAlias) {
+ super(alias.last());
this.array = array;
this.alias = alias;
- this.fieldAlias = fieldAlias == null ? "COLUMN_VALUE" : fieldAlias;
- this.field = new Fields(DSL.field(name(alias, this.fieldAlias), DSL.getDataType(array.getClass().getComponentType())));
+ this.fieldAlias = fieldAlias == null ? DSL.name("COLUMN_VALUE") : fieldAlias;
+ this.field = new Fields(DSL.field(name(alias.last(), this.fieldAlias.last()), DSL.getDataType(array.getClass().getComponentType())));
}
@Override
@@ -89,18 +90,16 @@ final class ArrayTableEmulation extends AbstractTable {
}
@Override
- public final Table as(String as) {
+ public final Table as(Name as) {
return new ArrayTableEmulation(array, as);
}
@Override
- public final Table as(String as, String... fieldAliases) {
- if (fieldAliases == null) {
+ public final Table as(Name as, Name... fieldAliases) {
+ if (fieldAliases == null)
return new ArrayTableEmulation(array, as);
- }
- else if (fieldAliases.length == 1) {
+ else if (fieldAliases.length == 1)
return new ArrayTableEmulation(array, as, fieldAliases[0]);
- }
throw new IllegalArgumentException("Array table simulations can only have a single field alias");
}
@@ -146,7 +145,7 @@ final class ArrayTableEmulation extends AbstractTable {
select = using(configuration).select(one().as("COLUMN_VALUE")).select().where(falseCondition());
}
- table = select.asTable(alias);
+ table = DSL.table(select).as(alias);
}
return table;
diff --git a/jOOQ/src/main/java/org/jooq/impl/Coalesce.java b/jOOQ/src/main/java/org/jooq/impl/Coalesce.java
index aa2d6c1b72..c39608ab54 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Coalesce.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Coalesce.java
@@ -51,7 +51,7 @@ final class Coalesce extends AbstractField {
@SuppressWarnings("unchecked")
Coalesce(DataType dataType, Field>[] fields) {
- super("coalesce", dataType);
+ super(DSL.name("coalesce"), dataType);
this.fields = (Field[]) fields;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Coerce.java b/jOOQ/src/main/java/org/jooq/impl/Coerce.java
index 974e95f9ea..e826b14430 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Coerce.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Coerce.java
@@ -51,7 +51,9 @@ final class Coerce extends AbstractField {
private final Field> field;
public Coerce(Field> field, DataType type) {
- super(field.getName(), type);
+
+ // [#5997] TODO Retain quotation flag
+ super(DSL.name(field.getName()), type);
this.field = (field instanceof Coerce) ? ((Coerce>) field).field : field;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java b/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java
index ca2166c58e..b305ad6748 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java
@@ -39,6 +39,7 @@ import java.util.List;
import org.jooq.CommonTableExpression;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Select;
import org.jooq.Table;
@@ -71,12 +72,12 @@ final class CommonTableExpressionImpl extends AbstractTable
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new TableAlias(this, alias);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new TableAlias(this, alias, fieldAliases);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomField.java b/jOOQ/src/main/java/org/jooq/impl/CustomField.java
index d64c8057b7..a1459ca4c1 100644
--- a/jOOQ/src/main/java/org/jooq/impl/CustomField.java
+++ b/jOOQ/src/main/java/org/jooq/impl/CustomField.java
@@ -41,6 +41,7 @@ import org.jooq.Condition;
import org.jooq.Context;
import org.jooq.DataType;
import org.jooq.Field;
+import org.jooq.Name;
/**
* A base class for custom {@link Field} implementations in client code.
@@ -64,6 +65,10 @@ public abstract class CustomField extends AbstractField {
private static final Clause[] CLAUSES = { CUSTOM };
protected CustomField(String name, DataType type) {
+ this(DSL.name(name), type);
+ }
+
+ protected CustomField(Name name, DataType type) {
super(name, type);
}
@@ -89,7 +94,7 @@ public abstract class CustomField extends AbstractField {
}
@Override
- public final Field as(String alias) {
+ public final Field as(Name alias) {
return super.as(alias);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/DerivedTable.java b/jOOQ/src/main/java/org/jooq/impl/DerivedTable.java
index 2e03617034..2655a102f3 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DerivedTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DerivedTable.java
@@ -37,6 +37,7 @@ package org.jooq.impl;
import org.jooq.Clause;
import org.jooq.Context;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Select;
import org.jooq.Table;
@@ -61,12 +62,12 @@ final class DerivedTable extends AbstractTable {
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new TableAlias(this, alias, true);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new TableAlias(this, alias, fieldAliases, true);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Dual.java b/jOOQ/src/main/java/org/jooq/impl/Dual.java
index cbe7714611..22d9412b4e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Dual.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Dual.java
@@ -40,6 +40,7 @@ import static org.jooq.impl.DSL.select;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
@@ -75,7 +76,7 @@ final class Dual extends AbstractTable {
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
if (force) {
return FORCED_DUAL.as(alias);
}
@@ -85,7 +86,7 @@ final class Dual extends AbstractTable {
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
if (force) {
return FORCED_DUAL.as(alias, fieldAliases);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Expression.java b/jOOQ/src/main/java/org/jooq/impl/Expression.java
index 9348e7e0b0..6b050f7574 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Expression.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Expression.java
@@ -639,7 +639,7 @@ final class Expression extends AbstractFunction {
private static final long serialVersionUID = -5105004317793995419L;
private DefaultExpression() {
- super(operator.toSQL(), lhs.getDataType());
+ super(operator.toName(), lhs.getDataType());
}
@Override
diff --git a/jOOQ/src/main/java/org/jooq/impl/ExpressionOperator.java b/jOOQ/src/main/java/org/jooq/impl/ExpressionOperator.java
index ec1989bf50..24bb78a30f 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ExpressionOperator.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ExpressionOperator.java
@@ -34,6 +34,8 @@
*/
package org.jooq.impl;
+import org.jooq.Name;
+
/**
* The operator used in Expression
*
@@ -119,12 +121,18 @@ enum ExpressionOperator {
;
private final String sql;
+ private final Name name;
private ExpressionOperator(String sql) {
this.sql = sql;
+ this.name = DSL.name(name().toLowerCase());
}
public String toSQL() {
return sql;
}
+
+ public Name toName() {
+ return name;
+ }
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldAlias.java b/jOOQ/src/main/java/org/jooq/impl/FieldAlias.java
index a46bb6bc23..5dfc850dd4 100644
--- a/jOOQ/src/main/java/org/jooq/impl/FieldAlias.java
+++ b/jOOQ/src/main/java/org/jooq/impl/FieldAlias.java
@@ -38,6 +38,7 @@ package org.jooq.impl;
import org.jooq.Clause;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
/**
* @author Lukas Eder
@@ -47,7 +48,7 @@ final class FieldAlias extends AbstractField {
private static final long serialVersionUID = -85277321749681553L;
private final Alias> alias;
- FieldAlias(Field field, String alias) {
+ FieldAlias(Field field, Name alias) {
super(alias, field.getDataType());
this.alias = new Alias>(field, alias, false);
@@ -64,7 +65,7 @@ final class FieldAlias extends AbstractField {
}
@Override
- public final Field as(String as) {
+ public final Field as(Name as) {
return alias.wrapped().as(as);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/FlashbackTable.java b/jOOQ/src/main/java/org/jooq/impl/FlashbackTable.java
index 2a42323859..aa4b449c93 100644
--- a/jOOQ/src/main/java/org/jooq/impl/FlashbackTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/FlashbackTable.java
@@ -156,6 +156,7 @@ package org.jooq.impl;
+
\ No newline at end of file
diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java
index 1f8466f4c3..fb918bf344 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Function.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Function.java
@@ -144,7 +144,7 @@ class Function extends AbstractField implements
}
Function(String name, boolean distinct, DataType type, QueryPart... arguments) {
- super(name, type);
+ super(DSL.name(name), type);
this.term = null;
this.name = null;
@@ -155,7 +155,7 @@ class Function extends AbstractField implements
}
Function(Term term, boolean distinct, DataType type, QueryPart... arguments) {
- super(term.name().toLowerCase(), type);
+ super(term.toName(), type);
this.term = term;
this.name = null;
@@ -166,7 +166,7 @@ class Function extends AbstractField implements
}
Function(Name name, boolean distinct, DataType type, QueryPart... arguments) {
- super(last(name.getName()), type);
+ super(name, type);
this.term = null;
this.name = name;
@@ -176,14 +176,6 @@ class Function extends AbstractField implements
this.withinGroupOrderBy = new SortFieldList();
}
- final static String last(String... strings) {
- if (strings != null && strings.length > 0) {
- return strings[strings.length - 1];
- }
-
- return null;
- }
-
// -------------------------------------------------------------------------
// XXX QueryPart API
// -------------------------------------------------------------------------
diff --git a/jOOQ/src/main/java/org/jooq/impl/FunctionTable.java b/jOOQ/src/main/java/org/jooq/impl/FunctionTable.java
index ffdf71b975..fa57449ac2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/FunctionTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/FunctionTable.java
@@ -36,6 +36,7 @@ package org.jooq.impl;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Table;
import org.jooq.exception.SQLDialectNotSupportedException;
@@ -65,12 +66,12 @@ final class FunctionTable extends AbstractTable {
}
@Override
- public final Table as(String as) {
+ public final Table as(Name as) {
return new TableAlias(new FunctionTable(function), as);
}
@Override
- public final Table as(String as, String... fieldAliases) {
+ public final Table as(Name as, Name... fieldAliases) {
return new TableAlias(new FunctionTable(function), as, fieldAliases);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java b/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java
index 5168465348..587692ffab 100644
--- a/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java
+++ b/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java
@@ -43,6 +43,7 @@ import org.jooq.Clause;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.QueryPart;
import org.jooq.Record1;
import org.jooq.Table;
@@ -106,12 +107,12 @@ final class GenerateSeries extends AbstractTable> {
}
@Override
- public final Table> as(String alias) {
+ public final Table> as(Name alias) {
return new TableAlias>(this, alias);
}
@Override
- public final Table> as(String alias, String... fieldAliases) {
+ public final Table> as(Name alias, Name... fieldAliases) {
return new TableAlias>(this, alias, fieldAliases);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/HintedTable.java b/jOOQ/src/main/java/org/jooq/impl/HintedTable.java
index 45dcbabd76..5f6e127596 100644
--- a/jOOQ/src/main/java/org/jooq/impl/HintedTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/HintedTable.java
@@ -84,12 +84,12 @@ final class HintedTable extends AbstractTable {
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new HintedTable(new TableAlias(delegate, alias), keywords, arguments);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new HintedTable(new TableAlias(delegate, alias, fieldAliases), keywords, arguments);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
index 2b20caa3d4..7f81363a6e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java
@@ -92,6 +92,7 @@ import org.jooq.Context;
import org.jooq.Field;
import org.jooq.ForeignKey;
import org.jooq.JoinType;
+import org.jooq.Name;
import org.jooq.Operator;
import org.jooq.QueryPart;
import org.jooq.Record;
@@ -417,12 +418,12 @@ final class JoinTable extends AbstractTable implements TableOptionalOnSt
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new TableAlias(this, alias, true);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new TableAlias(this, alias, fieldAliases, true);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Lateral.java b/jOOQ/src/main/java/org/jooq/impl/Lateral.java
index 662c35da29..914cae0a8b 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Lateral.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Lateral.java
@@ -35,6 +35,7 @@
package org.jooq.impl;
import org.jooq.Context;
+import org.jooq.Name;
import org.jooq.Record;
import org.jooq.Table;
@@ -66,12 +67,12 @@ final class Lateral extends AbstractTable {
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new Lateral(table.as(alias));
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new Lateral(table.as(alias, fieldAliases));
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/LinkedTable.java b/jOOQ/src/main/java/org/jooq/impl/LinkedTable.java
index 22b0795300..7f9335c6a6 100644
--- a/jOOQ/src/main/java/org/jooq/impl/LinkedTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/LinkedTable.java
@@ -91,5 +91,6 @@ package org.jooq.impl;
+
diff --git a/jOOQ/src/main/java/org/jooq/impl/Neg.java b/jOOQ/src/main/java/org/jooq/impl/Neg.java
index c287237719..128551bdf2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Neg.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Neg.java
@@ -62,7 +62,7 @@ final class Neg extends AbstractField {
private final Field field;
Neg(Field field, ExpressionOperator operator) {
- super(operator.toSQL() + field.getName(), field.getDataType());
+ super(operator.toName(), field.getDataType());
this.operator = operator;
this.field = field;
diff --git a/jOOQ/src/main/java/org/jooq/impl/NotField.java b/jOOQ/src/main/java/org/jooq/impl/NotField.java
index 5d99a67c89..7c8ed5ee08 100644
--- a/jOOQ/src/main/java/org/jooq/impl/NotField.java
+++ b/jOOQ/src/main/java/org/jooq/impl/NotField.java
@@ -51,7 +51,7 @@ final class NotField extends AbstractField {
private final Field field;
NotField(Field field) {
- super("not", field.getDataType());
+ super(DSL.name("not"), field.getDataType());
this.field = field;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Pivot.java b/jOOQ/src/main/java/org/jooq/impl/Pivot.java
index d737a66184..e0d2b41a31 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Pivot.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Pivot.java
@@ -47,6 +47,7 @@ import org.jooq.Condition;
import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Field;
+import org.jooq.Name;
import org.jooq.PivotForStep;
import org.jooq.PivotInStep;
import org.jooq.QueryPart;
@@ -268,12 +269,12 @@ implements
}
@Override
- public final Table as(String as) {
+ public final Table as(Name as) {
return new TableAlias(this, as);
}
@Override
- public final Table as(String as, String... fieldAliases) {
+ public final Table as(Name as, Name... fieldAliases) {
return new TableAlias(this, as, fieldAliases);
}
@@ -297,12 +298,12 @@ implements
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new TableAlias(this, alias, true);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table as(Name alias, Name... fieldAliases) {
return new TableAlias(this, alias, fieldAliases, true);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Prior.java b/jOOQ/src/main/java/org/jooq/impl/Prior.java
index bee9eb5ead..fcdb47d1e7 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Prior.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Prior.java
@@ -53,7 +53,7 @@ final class Prior extends AbstractField {
private final Field field;
Prior(Field field) {
- super("prior", nullSafe(field).getDataType());
+ super(DSL.name("prior"), nullSafe(field).getDataType());
this.field = field;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/QualifiedField.java b/jOOQ/src/main/java/org/jooq/impl/QualifiedField.java
index f90e3b4e23..7cb782dd7a 100644
--- a/jOOQ/src/main/java/org/jooq/impl/QualifiedField.java
+++ b/jOOQ/src/main/java/org/jooq/impl/QualifiedField.java
@@ -64,7 +64,7 @@ final class QualifiedField extends AbstractField implements TableField table;
QualifiedField(Name name, DataType type) {
- super(defaultIfNull(name.last(), ""), type);
+ super(DSL.name(defaultIfNull(name.last(), "")), type);
this.name = name;
this.table = name.getName().length > 1
diff --git a/jOOQ/src/main/java/org/jooq/impl/QualifiedTable.java b/jOOQ/src/main/java/org/jooq/impl/QualifiedTable.java
index e0f9507ca7..c75c9bc2a0 100644
--- a/jOOQ/src/main/java/org/jooq/impl/QualifiedTable.java
+++ b/jOOQ/src/main/java/org/jooq/impl/QualifiedTable.java
@@ -86,12 +86,12 @@ final class QualifiedTable extends AbstractTable {
}
@Override
- public final Table as(String alias) {
+ public final Table as(Name alias) {
return new TableAlias(this, alias);
}
@Override
- public final Table as(String alias, String... fieldAliases) {
+ public final Table