for (--position; position >= 0; position--) { ColumnProjector colProjector = columnProjectors.get(position); allCaseSensitive &= colProjector.isCaseSensitive(); someCaseSensitive |= colProjector.isCaseSensitive(); reverseIndex.put(colProjector.getName(), position); if (!colProjector.getTableName().isEmpty()) { reverseIndex.put(SchemaUtil.getColumnName(colProjector.getTableName(), colProjector.getName()), position); if (!hasUDFs) { for (int i = 0; i < this.columnProjectors.size(); i++) { Expression expression = this.columnProjectors.get(i).getExpression(); if (expression.isCloneExpression()) { cloneRequired = true;
@Override public Array getArray(int columnIndex) throws SQLException { checkCursorState(); // Get the value using the expected type instead of trying to coerce to VARCHAR. // We can't coerce using our formatter because we don't have enough context in PDataType. ColumnProjector projector = rowProjector.getColumnProjector(columnIndex-1); Array value = (Array)projector.getValue(currentRow, projector.getExpression().getDataType(), ptr); wasNull = (value == null); return value; }
@Override public ColumnInfo apply(final ColumnProjector columnProjector) { return new ColumnInfo(columnProjector.getName(), columnProjector.getExpression().getDataType().getSqlType()); }
@Override public String toString() { StringBuilder buf = new StringBuilder("["); for (ColumnProjector projector : columnProjectors) { buf.append(projector.getExpression()); buf.append(','); } if (buf.length() > 1) { buf.setLength(buf.length()-1); } buf.append(']'); return buf.toString(); }
@Override public Date getDate(int columnIndex, Calendar cal) throws SQLException { checkCursorState(); Date value = (Date)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PDate.INSTANCE, ptr); wasNull = (value == null); if (wasNull) { return null; } cal.setTime(value); return new Date(cal.getTimeInMillis()); }
@Override public String apply(ColumnProjector column) { return column.getName(); } });
@Override public String getTableName(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).getTableName(); }
@Override public boolean isCaseSensitive(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).isCaseSensitive(); }
/** * allow individual expressions to reset their state between rows */ public void reset() { for (ColumnProjector projector : columnProjectors) { projector.getExpression().reset(); } } }
for (int i = 0; i < plan.getProjector().getColumnCount(); i++) { ColumnProjector colProj = plan.getProjector().getColumnProjector(i); String name = selectNodes == null ? colProj.getName() : selectNodes.get(i).getAlias(); PName colName = PNameFactory.newName(name); PColumnImpl projectedColumn = new PColumnImpl(PNameFactory.newName(name), UNION_FAMILY_NAME, targetTypes.get(i).getType(), targetTypes.get(i).getMaxLength(), targetTypes.get(i).getScale(), colProj.getExpression().isNullable(), i, targetTypes.get(i).getSortOrder(), 500, null, false, colProj.getExpression().toString(), false, false, colName.getBytes(), HConstants.LATEST_TIMESTAMP); projectedColumns.add(projectedColumn);
@Override public BigDecimal getBigDecimal(int columnIndex) throws SQLException { checkCursorState(); BigDecimal value = (BigDecimal)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PDecimal.INSTANCE, ptr); wasNull = (value == null); return value; }
@Override public String getColumnName(int column) throws SQLException { // TODO: will return alias if there is one return rowProjector.getColumnProjector(column-1).getName(); }
@Override public String getTableName(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).getTableName(); }
@Override public boolean isCaseSensitive(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).isCaseSensitive(); }
public RowProjector cloneIfNecessary() { if (!cloneRequired) { return this; } List<ColumnProjector> clonedColProjectors = new ArrayList<ColumnProjector>(columnProjectors.size()); for (int i = 0; i < this.columnProjectors.size(); i++) { ColumnProjector colProjector = columnProjectors.get(i); Expression expression = colProjector.getExpression(); if (expression.isCloneExpression()) { CloneExpressionVisitor visitor = new CloneExpressionVisitor(); Expression clonedExpression = expression.accept(visitor); clonedColProjectors.add(new ExpressionProjector(colProjector.getName(), colProjector.getTableName(), clonedExpression, colProjector.isCaseSensitive())); } else { clonedColProjectors.add(colProjector); } } return new RowProjector(clonedColProjectors, this.estimatedSize, this.isProjectEmptyKeyValue, this.hasUDFs, this.isProjectAll); }
@Override public int getScale(int column) throws SQLException { Integer scale = rowProjector.getColumnProjector(column-1).getExpression().getScale(); return scale == null ? 0 : scale; }
@Override public Object getObject(int columnIndex) throws SQLException { checkCursorState(); ColumnProjector projector = rowProjector.getColumnProjector(columnIndex-1); Object value = projector.getValue(currentRow, projector.getExpression().getDataType(), ptr); wasNull = (value == null); return value; }
@Override public ColumnInfo apply(final ColumnProjector columnProjector) { return new ColumnInfo(columnProjector.getName(), columnProjector.getExpression().getDataType().getSqlType()); }
@Override public int getInt(int columnIndex) throws SQLException { checkCursorState(); Integer value = (Integer)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PInteger.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public String getColumnLabel(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).getName(); }