public SqlNode visit(SqlIdentifier id) { // Aliases, e.g. 'select a as x, b from t order by x'. if (id.isSimple() && getConformance().isSortByAlias()) { String alias = id.getSimple(); final SqlValidatorNamespace selectNs = getNamespace(select); final RelDataType rowType = selectNs.getRowTypeSansSystemColumns(); final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); RelDataTypeField field = nameMatcher.field(rowType, alias); if (field != null) { return nthSelectItem( field.getIndex(), id.getParserPosition()); } } // No match. Return identifier unchanged. return getScope().fullyQualify(id).identifier; }
conformance.isSortByAlias() ? null conformance.isSortByAlias() ? null
@Override public boolean isSortByAlias() { return delegate.isSortByAlias(); }
conformance.isSortByAlias() ? null conformance.isSortByAlias() ? null
@Override public boolean isSortByAlias() { return delegate.isSortByAlias(); }
@Test public void testOrderByAliasDoesNotOverride() { if (tester.getConformance().isSortByAlias()) { return; } // plan should contain 'empno + 3', not '(empno + 1) + 3' final String sql = "select empno + 1 as empno, empno - 2 as y\n" + "from emp order by empno + 3"; sql(sql).ok(); }
@Test public void testOrderByAliasOverrides() { if (!tester.getConformance().isSortByAlias()) { return; } // plan should contain '(empno + 1) + 3' final String sql = "select empno + 1 as empno, empno - 2 as y\n" + "from emp order by empno + 3"; sql(sql).ok(); }
@Test public void testOrderByAliasDoesNotOverride() { if (tester.getConformance().isSortByAlias()) { return; } // plan should contain 'empno + 3', not '(empno + 1) + 3' final String sql = "select empno + 1 as empno, empno - 2 as y\n" + "from emp order by empno + 3"; sql(sql).ok(); }
@Test public void testOrderByAliasOverrides() { if (!tester.getConformance().isSortByAlias()) { return; } // plan should contain '(empno + 1) + 3' final String sql = "select empno + 1 as empno, empno - 2 as y\n" + "from emp order by empno + 3"; sql(sql).ok(); }
public SqlQualified fullyQualify(SqlIdentifier identifier) { // If it's a simple identifier, look for an alias. if (identifier.isSimple() && validator.getConformance().isSortByAlias()) { final String name = identifier.names.get(0); final SqlValidatorNamespace selectNs = validator.getNamespace(select); final RelDataType rowType = selectNs.getRowType(); final SqlNameMatcher nameMatcher = validator.catalogReader.nameMatcher(); final RelDataTypeField field = nameMatcher.field(rowType, name); final int aliasCount = aliasCount(nameMatcher, name); if (aliasCount > 1) { // More than one column has this alias. throw validator.newValidationError(identifier, RESOURCE.columnAmbiguous(name)); } if (field != null && !field.isDynamicStar() && aliasCount == 1) { // if identifier is resolved to a dynamic star, use super.fullyQualify() for such case. return SqlQualified.create(this, 1, selectNs, identifier); } } return super.fullyQualify(identifier); }
public SqlQualified fullyQualify(SqlIdentifier identifier) { // If it's a simple identifier, look for an alias. if (identifier.isSimple() && validator.getConformance().isSortByAlias()) { final String name = identifier.names.get(0); final SqlValidatorNamespace selectNs = validator.getNamespace(select); final RelDataType rowType = selectNs.getRowType(); final SqlNameMatcher nameMatcher = validator.catalogReader.nameMatcher(); final RelDataTypeField field = nameMatcher.field(rowType, name); final int aliasCount = aliasCount(nameMatcher, name); if (aliasCount > 1) { // More than one column has this alias. throw validator.newValidationError(identifier, RESOURCE.columnAmbiguous(name)); } if (field != null && !field.isDynamicStar() && aliasCount == 1) { // if identifier is resolved to a dynamic star, use super.fullyQualify() for such case. return SqlQualified.create(this, 1, selectNs, identifier); } } return super.fullyQualify(identifier); }
public SqlNode visit(SqlIdentifier id) { // Aliases, e.g. 'select a as x, b from t order by x'. if (id.isSimple() && getConformance().isSortByAlias()) { String alias = id.getSimple(); final SqlValidatorNamespace selectNs = getNamespace(select); final RelDataType rowType = selectNs.getRowTypeSansSystemColumns(); final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); RelDataTypeField field = nameMatcher.field(rowType, alias); if (field != null) { return nthSelectItem( field.getIndex(), id.getParserPosition()); } } // No match. Return identifier unchanged. return getScope().fullyQualify(id).identifier; }
public SqlNode visit(SqlIdentifier id) { // Aliases, e.g. 'select a as x, b from t order by x'. if (id.isSimple() && getConformance().isSortByAlias()) { String alias = id.getSimple(); final SqlValidatorNamespace selectNs = getNamespace(select); final RelDataType rowType = selectNs.getRowTypeSansSystemColumns(); final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); RelDataTypeField field = nameMatcher.field(rowType, alias); if (field != null) { return nthSelectItem( field.getIndex(), id.getParserPosition()); } } // No match. Return identifier unchanged. return getScope().fullyQualify(id).identifier; }
.failsIf(!tester.getConformance().isSortByAlias(), "Expression 'EMPNO' is not in the select clause"); sql("select distinct cast(empno as bigint) as eno " + "from emp order by ^eno^") .failsIf(!tester.getConformance().isSortByAlias(), "Column 'ENO' not found in any table"); sql("select distinct cast(empno as bigint) as empno " + "from emp e order by ^empno^") .failsIf(!tester.getConformance().isSortByAlias(), "Expression 'EMPNO' is not in the select clause"); "select distinct cast(empno as varchar(10)) as eno from emp " + " order by upper(^eno^)", tester.getConformance().isSortByAlias() ? null : "Column 'ENO' not found in any table");
.failsIf(!tester.getConformance().isSortByAlias(), "Expression 'EMPNO' is not in the select clause"); sql("select distinct cast(empno as bigint) as eno " + "from emp order by ^eno^") .failsIf(!tester.getConformance().isSortByAlias(), "Column 'ENO' not found in any table"); sql("select distinct cast(empno as bigint) as empno " + "from emp e order by ^empno^") .failsIf(!tester.getConformance().isSortByAlias(), "Expression 'EMPNO' is not in the select clause"); "select distinct cast(empno as varchar(10)) as eno from emp " + " order by upper(^eno^)", tester.getConformance().isSortByAlias() ? null : "Column 'ENO' not found in any table");