public ColumnParseNode(TableName tableName, String name, String alias) { // Upper case here so our Maps can depend on this (and we don't have to upper case and create a string on every // lookup super(name); this.alias = alias; this.tableName = tableName; fullName = tableName == null ? getName() : tableName.toString() + QueryConstants.NAME_SEPARATOR + getName(); }
@Override public Void visit(ColumnParseNode node) throws SQLException { getDataColumnNames().add(node.getName()); return null; }
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { // If we're resolving aliases and we have an unqualified ColumnParseNode, // check if we find the name in our alias map. if (aliasMap != null && node.getTableName() == null) { ParseNode aliasedNode = aliasMap.get(node.getName()); // If we found something, then try to resolve it unless the two nodes are the same if (aliasedNode != null && !node.equals(aliasedNode)) { ColumnRef ref; try { ref = resolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); } catch (ColumnNotFoundException e) { // Not able to resolve alias as a column name as well, so we use the alias return aliasedNode; } // We have resolved it to a column, so now check if the aliased node can be resolved as the same column if (aliasedNode instanceof ColumnParseNode) { ColumnParseNode aliasedColumnNode = (ColumnParseNode) aliasedNode; ColumnRef aliasedRef = resolver.resolveColumn(aliasedColumnNode.getSchemaName(), aliasedColumnNode.getTableName(), aliasedColumnNode.getName()); if (aliasedRef.equals(ref)) { return aliasedNode; } } // Otherwise it means we have a conflict throw new AmbiguousColumnException(node.getName()); } } return node; }
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { if (multiTable && node.getAlias() != null && node.getTableName() != null && SchemaUtil.normalizeIdentifier(node.getAlias()).equals(node.getName())) { node = NODE_FACTORY.column(TableName.create(node.getSchemaName(), node.getTableName()), node.isCaseSensitive() ? '"' + node.getName() + '"' : node.getName(), node.isCaseSensitive() ? '"' + node.getFullName() + '"' : node.getFullName()); } return super.visit(node); }
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { if (node.getTableName() == null) return super.visit(node); if (removeAlias) { if (node.getTableName().equals(tableAlias)) { return NODE_FACTORY.column(null, node.getName(), node.getAlias()); } return super.visit(node); } ParseNode aliasedNode = aliasMap.get(node.getFullName()); if (aliasedNode != null) { return aliasedNode; } return node; }
@Override public Void visit(ColumnParseNode node) throws SQLException { // Inner query column definitions should shade those of outer query. try { localResolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); addType(true); return null; } catch (TableNotFoundException e) { } catch (ColumnNotFoundException e) { } catch (ColumnFamilyNotFoundException e) { } outerResolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); addType(false); return null; }
@Override public Void visit(ColumnParseNode node) throws SQLException { try { ColumnRef resolveColumn = context.getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); if (!SchemaUtil.isPKColumn(resolveColumn.getColumn())) { nonPkColumnRefSet.add(resolveColumn); } } catch (ColumnNotFoundException e) { if (context.getCurrentTable().getTable().getIndexType() == IndexType.LOCAL) { try { localIndexColumnRefSet.add(new LocalIndexDataColumnRef(context, context.getCurrentTable(), node.getName())); } catch (ColumnFamilyNotFoundException c) { throw e; } } else { throw e; } } return null; } }
@Override public Void visit(ColumnParseNode node) throws SQLException { ColumnRef ref = context.getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); boolean isAggregateColumn = groupBy.getExpressions().indexOf(ref.newColumnExpression(node.isTableNameCaseSensitive(), node.isCaseSensitive())) >= 0; if (hasOnlyAggregateColumns == null) { hasOnlyAggregateColumns = isAggregateColumn; } else { hasOnlyAggregateColumns &= isAggregateColumn; } return null; }
ColumnRef ref = resolver.resolveColumn(this.getSchemaName(), this.getTableName(), this.getName()); PColumn column = ref.getColumn(); if (!SchemaUtil.isPKColumn(column)) {
@Override public Void visit(ColumnParseNode node) throws SQLException { ColumnRef columnRef = null; try { columnRef = resolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); } catch (ColumnNotFoundException e) { // This could be a LocalIndexDataColumnRef. If so, the table name must have // been appended by the IndexStatementRewriter, and we can convert it into. TableRef tableRef = resolver.resolveTable(node.getSchemaName(), node.getTableName()); if (tableRef.getTable().getIndexType() == IndexType.LOCAL) { TableRef parentTableRef = FromCompiler.getResolver( NODE_FACTORY.namedTable(null, TableName.create(tableRef.getTable() .getSchemaName().getString(), tableRef.getTable() .getParentTableName().getString())), connection).resolveTable( tableRef.getTable().getSchemaName().getString(), tableRef.getTable().getParentTableName().getString()); columnRef = new LocalIndexColumnRef(parentTableRef, IndexUtil.getDataColumnFamilyName(node.getName()), IndexUtil.getDataColumnName(node.getName()), tableRef); } else { throw e; } } columnRefMap.put(columnRef, node); tableRefSet.add(columnRef.getTableRef()); return null; }
public ColumnParseNode(TableName tableName, String name, String alias) { // Upper case here so our Maps can depend on this (and we don't have to upper case and create a string on every // lookup super(name); this.alias = alias; this.tableName = tableName; fullName = tableName == null ? getName() : tableName.toString() + QueryConstants.NAME_SEPARATOR + getName(); }
public ColumnParseNode(TableName tableName, String name, String alias) { // Upper case here so our Maps can depend on this (and we don't have to upper case and create a string on every // lookup super(name); this.alias = alias; this.tableName = tableName; fullName = tableName == null ? getName() : tableName.toString() + QueryConstants.NAME_SEPARATOR + getName(); }
@Override public Void visit(ColumnParseNode node) throws SQLException { getDataColumnNames().add(node.getName()); return null; }
ColumnRef ref = null; try { ref = context.getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); } catch (ColumnNotFoundException e) { return new LocalIndexDataColumnRef(context, context.getCurrentTable(), node.getName()); } catch (ColumnFamilyNotFoundException c) { throw e;
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { ColumnRef dataColRef = getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); PColumn dataCol = dataColRef.getColumn(); TableRef dataTableRef = dataColRef.getTableRef();
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { if (multiTable && node.getAlias() != null && node.getTableName() != null && SchemaUtil.normalizeIdentifier(node.getAlias()).equals(node.getName())) { node = NODE_FACTORY.column(TableName.create(node.getSchemaName(), node.getTableName()), node.isCaseSensitive() ? '"' + node.getName() + '"' : node.getName(), node.isCaseSensitive() ? '"' + node.getFullName() + '"' : node.getFullName()); } return super.visit(node); }
@Override public ParseNode visit(ColumnParseNode node) throws SQLException { if (multiTable && node.getAlias() != null && node.getTableName() != null && SchemaUtil.normalizeIdentifier(node.getAlias()).equals(node.getName())) { node = NODE_FACTORY.column(TableName.create(node.getSchemaName(), node.getTableName()), node.isCaseSensitive() ? '"' + node.getName() + '"' : node.getName(), node.isCaseSensitive() ? '"' + node.getFullName() + '"' : node.getFullName()); } return super.visit(node); }
@Override public Void visit(ColumnParseNode node) throws SQLException { // Inner query column definitions should shade those of outer query. try { localResolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); addType(true); return null; } catch (TableNotFoundException e) { } catch (ColumnNotFoundException e) { } catch (ColumnFamilyNotFoundException e) { } outerResolver.resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); addType(false); return null; }
@Override public Void visit(ColumnParseNode node) throws SQLException { ColumnRef ref = context.getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); boolean isAggregateColumn = groupBy.getExpressions().indexOf(ref.newColumnExpression(node.isTableNameCaseSensitive(), node.isCaseSensitive())) >= 0; if (hasOnlyAggregateColumns == null) { hasOnlyAggregateColumns = isAggregateColumn; } else { hasOnlyAggregateColumns &= isAggregateColumn; } return null; }
@Override public Void visit(ColumnParseNode node) throws SQLException { ColumnRef ref = context.getResolver().resolveColumn(node.getSchemaName(), node.getTableName(), node.getName()); boolean isAggregateColumn = groupBy.getExpressions().indexOf(ref.newColumnExpression(node.isTableNameCaseSensitive(), node.isCaseSensitive())) >= 0; if (hasOnlyAggregateColumns == null) { hasOnlyAggregateColumns = isAggregateColumn; } else { hasOnlyAggregateColumns &= isAggregateColumn; } return null; }