Search in sources :

Example 1 with FIELD

use of org.jooq.Clause.FIELD in project jOOQ by jOOQ.

the class Alias method acceptDeclareAliasStandard.

private final void acceptDeclareAliasStandard(Context<?> context) {
    if (wrapped instanceof TableImpl)
        context.scopeMarkStart(wrapping);
    SQLDialect dialect = context.dialect();
    SQLDialect family = context.family();
    boolean emulatedDerivedColumnList = false;
    // Hence, wrap the table reference in a subselect
    if (fieldAliases != null && (SUPPORT_DERIVED_COLUMN_NAMES_SPECIAL1.contains(dialect)) && (wrapped instanceof TableImpl || wrapped instanceof CommonTableExpressionImpl)) {
        visitSubquery(context, select(asterisk()).from(((Table<?>) wrapped).as(alias)), true, false, false);
    } else // results using UNION ALL
    if (fieldAliases != null && (emulatedDerivedColumnList || SUPPORT_DERIVED_COLUMN_NAMES_SPECIAL2.contains(dialect))) {
        emulatedDerivedColumnList = true;
        if (wrapped instanceof Values && NO_SUPPORT_VALUES.contains(dialect)) {
            context.data(DATA_SELECT_ALIASES, fieldAliases, t -> toSQLWrapped(t));
        } else {
            // [#3156] Do not SELECT * from derived tables to prevent ambiguously defined columns
            // in those derived tables
            Select<?> wrappedAsSelect = wrapped instanceof Select ? (Select<?>) wrapped : wrapped instanceof DerivedTable ? ((DerivedTable<?>) wrapped).query() : select(asterisk()).from(((Table<?>) wrapped).as(alias));
            List<Field<?>> select = wrappedAsSelect.getSelect();
            if (emulatedDerivedColumnList) {
                SelectFieldList<Field<?>> fields = new SelectFieldList<>();
                for (int i = 0; i < fieldAliases.length; i++) {
                    switch(family) {
                        default:
                            fields.add(field("null").as(fieldAliases[i]));
                            break;
                    }
                }
                visitSubquery(context, select(fields).where(falseCondition()).unionAll(wrappedAsSelect), true, false, false);
            }
        }
    } else
        // The default behaviour
        toSQLWrapped(context);
    // [#291] some aliases cause trouble, if they are not explicitly marked using "as"
    toSQLAs(context);
    context.sql(' ').qualify(false, c -> c.visit(alias));
    // [#1801] Add field aliases to the table alias, if applicable
    if (fieldAliases != null && !emulatedDerivedColumnList) {
        toSQLDerivedColumnList(context);
    } else {
        // TODO: Is this still needed?
        switch(family) {
            case HSQLDB:
            case POSTGRES:
            case YUGABYTEDB:
                {
                    // The javac compiler doesn't like casting of generics
                    Object o = wrapped;
                    if (context.declareTables() && o instanceof ArrayTable)
                        context.sql('(').visit(wrap(((ArrayTable) o).fields()).qualify(false)).sql(')');
                    break;
                }
        }
    }
    if (wrapped instanceof TableImpl)
        context.scopeMarkEnd(wrapping);
}
Also used : QueryPartListView.wrap(org.jooq.impl.QueryPartListView.wrap) Tools.map(org.jooq.impl.Tools.map) UEmpty(org.jooq.impl.QOM.UEmpty) FIELD(org.jooq.Clause.FIELD) DATA_AS_REQUIRED(org.jooq.impl.Tools.BooleanDataKey.DATA_AS_REQUIRED) DSL.field(org.jooq.impl.DSL.field) Table(org.jooq.Table) POSTGRES(org.jooq.SQLDialect.POSTGRES) DATA_UNALIAS_ALIASED_EXPRESSIONS(org.jooq.impl.Tools.BooleanDataKey.DATA_UNALIAS_ALIASED_EXPRESSIONS) DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES(org.jooq.impl.Tools.BooleanDataKey.DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES) DATA_SELECT_ALIASES(org.jooq.impl.Tools.DataKey.DATA_SELECT_ALIASES) Clause(org.jooq.Clause) Tools.visitSubquery(org.jooq.impl.Tools.visitSubquery) FIELD_REFERENCE(org.jooq.Clause.FIELD_REFERENCE) SQLDialect(org.jooq.SQLDialect) Quoted(org.jooq.Name.Quoted) Select(org.jooq.Select) Predicate(java.util.function.Predicate) Name(org.jooq.Name) DSL.falseCondition(org.jooq.impl.DSL.falseCondition) Set(java.util.Set) Field(org.jooq.Field) DSL.select(org.jooq.impl.DSL.select) CUBRID(org.jooq.SQLDialect.CUBRID) QueryPart(org.jooq.QueryPart) HSQLDB(org.jooq.SQLDialect.HSQLDB) List(java.util.List) TABLE(org.jooq.Clause.TABLE) K_AS(org.jooq.impl.Keywords.K_AS) Context(org.jooq.Context) Tools.fieldNames(org.jooq.impl.Tools.fieldNames) TRUE(java.lang.Boolean.TRUE) DERBY(org.jooq.SQLDialect.DERBY) EMPTY_NAME(org.jooq.impl.Tools.EMPTY_NAME) HashSet(java.util.HashSet) SQLITE(org.jooq.SQLDialect.SQLITE) TABLE_REFERENCE(org.jooq.Clause.TABLE_REFERENCE) MYSQL(org.jooq.SQLDialect.MYSQL) TABLE_ALIAS(org.jooq.Clause.TABLE_ALIAS) Record(org.jooq.Record) DSL.asterisk(org.jooq.impl.DSL.asterisk) FIELD_ALIAS(org.jooq.Clause.FIELD_ALIAS) FIREBIRD(org.jooq.SQLDialect.FIREBIRD) RenderOptionalKeyword(org.jooq.conf.RenderOptionalKeyword) IGNITE(org.jooq.SQLDialect.IGNITE) YUGABYTEDB(org.jooq.SQLDialect.YUGABYTEDB) Tools.combine(org.jooq.impl.Tools.combine) NO_SUPPORT_VALUES(org.jooq.impl.Values.NO_SUPPORT_VALUES) H2(org.jooq.SQLDialect.H2) MARIADB(org.jooq.SQLDialect.MARIADB) Table(org.jooq.Table) SQLDialect(org.jooq.SQLDialect) Select(org.jooq.Select) List(java.util.List)

Aggregations

TRUE (java.lang.Boolean.TRUE)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 Predicate (java.util.function.Predicate)1 Clause (org.jooq.Clause)1 FIELD (org.jooq.Clause.FIELD)1 FIELD_ALIAS (org.jooq.Clause.FIELD_ALIAS)1 FIELD_REFERENCE (org.jooq.Clause.FIELD_REFERENCE)1 TABLE (org.jooq.Clause.TABLE)1 TABLE_ALIAS (org.jooq.Clause.TABLE_ALIAS)1 TABLE_REFERENCE (org.jooq.Clause.TABLE_REFERENCE)1 Context (org.jooq.Context)1 Field (org.jooq.Field)1 Name (org.jooq.Name)1 Quoted (org.jooq.Name.Quoted)1 QueryPart (org.jooq.QueryPart)1 Record (org.jooq.Record)1 SQLDialect (org.jooq.SQLDialect)1 CUBRID (org.jooq.SQLDialect.CUBRID)1