@Override protected MutationState mutate(StatementContext parentContext, ResultIterator iterator, PhoenixConnection connection) throws SQLException { if (parentContext.getSequenceManager().getSequenceCount() > 0) { throw new IllegalStateException("Cannot pipeline upsert when sequence is referenced"); } PhoenixStatement statement = new PhoenixStatement(connection); /* * We don't want to collect any read metrics within the child context. This is because any read metrics that * need to be captured are already getting collected in the parent statement context enclosed in the result * iterator being used for reading rows out. */ StatementContext childContext = new StatementContext(statement, false); // Clone the row projector as it's not thread safe and would be used simultaneously by // multiple threads otherwise. MutationState state = upsertSelect(childContext, tableRef, projector.cloneIfNecessary(), iterator, columnIndexes, pkSlotIndexes, useSeverTimestamp, false); return state; }
private static List<TargetDataExpression> checkProjectionNumAndExpressions( List<QueryPlan> selectPlans) throws SQLException { int columnCount = selectPlans.get(0).getProjector().getColumnCount(); List<TargetDataExpression> targetTypes = new ArrayList<TargetDataExpression>(columnCount); for (int i = 0; i < columnCount; i++) { for (QueryPlan plan : selectPlans) { if (columnCount !=plan.getProjector().getColumnCount()) { throw new SQLExceptionInfo.Builder(SQLExceptionCode .SELECT_COLUMN_NUM_IN_UNIONALL_DIFFS).setMessage("1st query has " + columnCount + " columns whereas 2nd " + "query has " + plan.getProjector().getColumnCount()) .build().buildException(); } ColumnProjector colproj = plan.getProjector().getColumnProjector(i); if(targetTypes.size() < i+1 ) { targetTypes.add(new TargetDataExpression(colproj.getExpression())); } else { compareExperssions(i, colproj.getExpression(), targetTypes); } } } return targetTypes; }
final PhoenixStatement pstmt = statement.unwrap(PhoenixStatement.class); final QueryPlan queryPlan = pstmt.compileQuery(sqlQuery); final List<? extends ColumnProjector> projectedColumns = queryPlan.getProjector().getColumnProjectors(); columnInfos = Lists.newArrayListWithCapacity(projectedColumns.size()); columnInfos = Lists.transform(projectedColumns, new Function<ColumnProjector,ColumnInfo>() {
public RowProjector(RowProjector projector, boolean isProjectEmptyKeyValue) { this(projector.getColumnProjectors(), projector.getEstimatedRowByteSize(), isProjectEmptyKeyValue, projector.hasUDFs, projector.isProjectAll); } /**
parallelIteratorFactoryToBe = null; nValuesToSet = queryPlanToBe.getProjector().getColumnCount(); Arrays.fill(reverseColumnIndexes, -1); for (int i =0; i < nValuesToSet; i++) { projectedExpressions.add(projector.getColumnProjector(i).getExpression()); reverseColumnIndexes[columnIndexes[i]] = i; statementContext.getAggregationManager().compile(queryPlan.getContext() ,GroupBy.EMPTY_GROUP_BY); if (queryPlan.getProjector().projectEveryRow()) { aggProjectorToBe = new RowProjector(aggProjectorToBe,true);
@Override public String getTableName(int column) throws SQLException { return rowProjector.getColumnProjector(column-1).getTableName(); }
scan.addFamily(family); projector = new RowProjector(projector,false); Tuple row = iterator.next(); ImmutableBytesWritable ptr = context.getTempPtr(); totalMutationCount += (Long)projector.getColumnProjector(0).getValue(row, PLong.INSTANCE, ptr); } catch (SQLException e) { sqlE = e;
if (parseNode instanceof LiteralParseNode && ((LiteralParseNode)parseNode).getType() == PInteger.INSTANCE){ Integer index = (Integer)((LiteralParseNode)parseNode).getValue(); int size = rowProjector.getColumnProjectors().size(); if (index > size || index <= 0 ) { throw new SQLExceptionInfo.Builder(SQLExceptionCode.PARAM_INDEX_OUT_OF_BOUND) .build().buildException(); expression = rowProjector.getColumnProjector(index-1).getExpression(); } else { expression = node.getNode().accept(compiler);
@Override public int getColumnCount() throws SQLException { return rowProjector.getColumnCount(); }
boolean optimizeProjection = false; boolean keyOnlyFilter = familyMap.isEmpty() && context.getWhereConditionColumns().isEmpty(); if (!projector.projectEverything()) { } else { optimizeProjection = true; if (projector.projectEveryRow()) { if (table.getViewType() == ViewType.MAPPED) {
RowProjector projectorToBe = ProjectionCompiler.compile(context, aggSelect, GroupBy.EMPTY_GROUP_BY); context.getAggregationManager().compile(context, GroupBy.EMPTY_GROUP_BY); if (dataPlan.getProjector().projectEveryRow()) { projectorToBe = new RowProjector(projectorToBe,true);
@Override public ResultIterator iterator(ParallelScanGrouper scanGrouper, Scan scan) throws SQLException { ResultIterator iterator = delegate.iterator(scanGrouper, scan); if (where != null) { iterator = new FilterResultIterator(iterator, where); } if (!orderBy.getOrderByExpressions().isEmpty()) { // TopN int thresholdBytes = context.getConnection().getQueryServices().getProps().getInt( QueryServices.SPOOL_THRESHOLD_BYTES_ATTRIB, QueryServicesOptions.DEFAULT_SPOOL_THRESHOLD_BYTES); iterator = new OrderedResultIterator(iterator, orderBy.getOrderByExpressions(), thresholdBytes, limit, offset, projector.getEstimatedRowByteSize()); } else { if (offset != null) { iterator = new OffsetResultIterator(iterator, offset); } if (limit != null) { iterator = new LimitingResultIterator(iterator, limit); } } if (context.getSequenceManager().getSequenceCount() > 0) { iterator = new SequenceResultIterator(iterator, context.getSequenceManager()); } return iterator; }
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 findColumn(String columnLabel) throws SQLException { Integer index = rowProjector.getColumnIndex(columnLabel); return index + 1; }
count++; rowProjector.reset(); } catch (RuntimeException e) {
parallelIteratorFactoryToBe = null; nValuesToSet = queryPlanToBe.getProjector().getColumnCount(); Arrays.fill(reverseColumnIndexes, -1); for (int i =0; i < nValuesToSet; i++) { projectedExpressions.add(projector.getColumnProjector(i).getExpression()); reverseColumnIndexes[columnIndexes[i]] = i; statementContext.getAggregationManager().compile(queryPlan.getContext() ,GroupBy.EMPTY_GROUP_BY); if (queryPlan.getProjector().projectEveryRow()) { aggProjectorToBe = new RowProjector(aggProjectorToBe,true);
@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()); }
public RowProjector(RowProjector projector, boolean isProjectEmptyKeyValue) { this(projector.getColumnProjectors(), projector.getEstimatedRowByteSize(), isProjectEmptyKeyValue, projector.hasUDFs, projector.isProjectAll); } /**
scan.addFamily(family); projector = new RowProjector(projector,false); Tuple row = iterator.next(); ImmutableBytesWritable ptr = context.getTempPtr(); totalMutationCount += (Long)projector.getColumnProjector(0).getValue(row, PLong.INSTANCE, ptr); } catch (SQLException e) { sqlE = e;
@Override public int getColumnCount() throws SQLException { return rowProjector.getColumnCount(); }