/** Returns whether {@code rowType} contains more than one star column. * Having more than one star columns implies ambiguous column. */ private boolean hasAmbiguousUnresolvedStar(RelDataType rowType, RelDataTypeField field, String columnName) { if (field.isDynamicStar() && !DynamicRecordType.isDynamicStarColName(columnName)) { int count = 0; for (RelDataTypeField possibleStar : rowType.getFieldList()) { if (possibleStar.isDynamicStar()) { if (++count > 1) { return true; } } } } return false; }
/** Returns whether {@code rowType} contains more than one star column. * Having more than one star columns implies ambiguous column. */ private boolean hasAmbiguousUnresolvedStar(RelDataType rowType, RelDataTypeField field, String columnName) { if (field.isDynamicStar() && !DynamicRecordType.isDynamicStarColName(columnName)) { int count = 0; for (RelDataTypeField possibleStar : rowType.getFieldList()) { if (possibleStar.isDynamicStar()) { if (++count > 1) { return true; } } } } return false; }
if (field.isDynamicStar()) {
if (field.isDynamicStar()) {
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); }