/** * Gets select items with scalar functions that haven't already been materialized in a data set. * * @param selectItems * @param dataSetWithMaterializedSelectItems a {@link DataSet} containing the already materialized select items * @return */ public static List<SelectItem> getUnmaterializedScalarFunctionSelectItems(Iterable<SelectItem> selectItems, DataSet dataSetWithMaterializedSelectItems) { return CollectionUtils.filter(selectItems, arg -> { return arg.getScalarFunction() != null && (dataSetWithMaterializedSelectItems == null || dataSetWithMaterializedSelectItems.indexOf(arg) == -1); }); }
/** * Gets select items with scalar functions that haven't already been materialized in a data set. * * @param selectItems * @param dataSetWithMaterializedSelectItems a {@link DataSet} containing the already materialized select items * @return */ public static List<SelectItem> getUnmaterializedScalarFunctionSelectItems(Iterable<SelectItem> selectItems, DataSet dataSetWithMaterializedSelectItems) { return CollectionUtils.filter(selectItems, arg -> { return arg.getScalarFunction() != null && (dataSetWithMaterializedSelectItems == null || dataSetWithMaterializedSelectItems.indexOf(arg) == -1); }); }
public static DataSet getSelection(final List<SelectItem> selectItems, final DataSet dataSet) { final List<SelectItem> dataSetSelectItems = dataSet.getSelectItems(); // check if the selection is already the same if (selectItems.equals(dataSetSelectItems)) { // return the DataSet unmodified return dataSet; } final List<SelectItem> scalarFunctionSelectItemsToEvaluate = new ArrayList<>(); for (SelectItem selectItem : selectItems) { if (selectItem.getScalarFunction() != null) { if (!dataSetSelectItems.contains(selectItem) && dataSetSelectItems.contains(selectItem.replaceFunction(null))) { scalarFunctionSelectItemsToEvaluate.add(selectItem); } } } if (scalarFunctionSelectItemsToEvaluate.isEmpty()) { return new SubSelectionDataSet(selectItems, dataSet); } final ScalarFunctionDataSet scalaFunctionDataSet = new ScalarFunctionDataSet(scalarFunctionSelectItemsToEvaluate, dataSet); return new SubSelectionDataSet(selectItems, scalaFunctionDataSet); }
public static DataSet getSelection(final List<SelectItem> selectItems, final DataSet dataSet) { final List<SelectItem> dataSetSelectItems = dataSet.getSelectItems(); // check if the selection is already the same if (selectItems.equals(dataSetSelectItems)) { // return the DataSet unmodified return dataSet; } final List<SelectItem> scalarFunctionSelectItemsToEvaluate = new ArrayList<>(); for (SelectItem selectItem : selectItems) { if (selectItem.getScalarFunction() != null) { if (!dataSetSelectItems.contains(selectItem) && dataSetSelectItems.contains(selectItem.replaceFunction(null))) { scalarFunctionSelectItemsToEvaluate.add(selectItem); } } } if (scalarFunctionSelectItemsToEvaluate.isEmpty()) { return new SubSelectionDataSet(selectItems, dataSet); } final ScalarFunctionDataSet scalaFunctionDataSet = new ScalarFunctionDataSet(scalarFunctionSelectItemsToEvaluate, dataSet); return new SubSelectionDataSet(selectItems, scalaFunctionDataSet); }
@Override public Object getValue(int index) throws IndexOutOfBoundsException { final List<SelectItem> scalarFunctionSelectItems = _scalarFunctionDataSet .getScalarFunctionSelectItemsToEvaluate(); final int scalarFunctionCount = scalarFunctionSelectItems.size(); if (index >= scalarFunctionCount) { return _row.getValue(index - scalarFunctionCount); } final SelectItem selectItem = scalarFunctionSelectItems.get(index); final SelectItem selectItemWithoutFunction = selectItem.replaceFunction(null); return selectItem.getScalarFunction().evaluate(_row, selectItem.getFunctionParameters(), selectItemWithoutFunction); }
protected String rewriteSelectClause(Query query, SelectClause selectClause) { StringBuilder sb = new StringBuilder(); if (selectClause.getItemCount() > 0) { sb.append(AbstractQueryClause.PREFIX_SELECT); if (selectClause.isDistinct()) { sb.append("DISTINCT "); } List<SelectItem> items = selectClause.getItems(); for (int i = 0; i < items.size(); i++) { SelectItem item = items.get(i); if (i != 0) { sb.append(AbstractQueryClause.DELIM_COMMA); } final ScalarFunction scalarFunction = item.getScalarFunction(); if (scalarFunction != null && !isScalarFunctionSupported(scalarFunction)) { // replace with a SelectItem without the function - the // function will be applied in post-processing. item = item.replaceFunction(null); } sb.append(rewriteSelectItem(query, item)); } } return sb.toString(); }
@Override public Object getValue(int index) throws IndexOutOfBoundsException { final List<SelectItem> scalarFunctionSelectItems = _scalarFunctionDataSet .getScalarFunctionSelectItemsToEvaluate(); final int scalarFunctionCount = scalarFunctionSelectItems.size(); if (index >= scalarFunctionCount) { return _row.getValue(index - scalarFunctionCount); } final SelectItem selectItem = scalarFunctionSelectItems.get(index); final SelectItem selectItemWithoutFunction = selectItem.replaceFunction(null); return selectItem.getScalarFunction().evaluate(_row, selectItem.getFunctionParameters(), selectItemWithoutFunction); }
protected String rewriteSelectClause(Query query, SelectClause selectClause) { StringBuilder sb = new StringBuilder(); if (selectClause.getItemCount() > 0) { sb.append(AbstractQueryClause.PREFIX_SELECT); if (selectClause.isDistinct()) { sb.append("DISTINCT "); } List<SelectItem> items = selectClause.getItems(); for (int i = 0; i < items.size(); i++) { SelectItem item = items.get(i); if (i != 0) { sb.append(AbstractQueryClause.DELIM_COMMA); } final ScalarFunction scalarFunction = item.getScalarFunction(); if (scalarFunction != null && !isScalarFunctionSupported(scalarFunction)) { // replace with a SelectItem without the function - the // function will be applied in post-processing. item = item.replaceFunction(null); } sb.append(rewriteSelectItem(query, item)); } } return sb.toString(); }
private boolean isOptimizable(FilterItem whereItem) { if (whereItem.isCompoundFilter()) { return false; } if (whereItem.getExpression() != null) { return false; } final SelectItem selectItem = whereItem.getSelectItem(); if (selectItem.getExpression() != null || selectItem.getAggregateFunction() != null || selectItem .getScalarFunction() != null) { return false; } final Column column = selectItem.getColumn(); if (column == null) { return false; } switch (column.getName()) { case COLUMN_OFFSET: return OPTIMIZED_OFFSET_OPERATORS.contains(whereItem.getOperator()); case COLUMN_PARTITION: return OPTIMIZED_PARTITION_OPERATORS.contains(whereItem.getOperator()); default: return false; } }
for (Iterator<SelectItem> it = scalarFunctionSelectItems.iterator(); it.hasNext();) { final SelectItem selectItem = (SelectItem) it.next(); if (_queryRewriter.isScalarFunctionSupported(selectItem.getScalarFunction())) { it.remove();
private boolean isOptimizable(FilterItem whereItem) { if (whereItem.isCompoundFilter()) { return false; } if (whereItem.getExpression() != null) { return false; } final SelectItem selectItem = whereItem.getSelectItem(); if (selectItem.getExpression() != null || selectItem.getAggregateFunction() != null || selectItem .getScalarFunction() != null) { return false; } final Column column = selectItem.getColumn(); if (column == null) { return false; } switch (column.getName()) { case COLUMN_OFFSET: return OPTIMIZED_OFFSET_OPERATORS.contains(whereItem.getOperator()); case COLUMN_PARTITION: return OPTIMIZED_PARTITION_OPERATORS.contains(whereItem.getOperator()); default: return false; } }
for (Iterator<SelectItem> it = scalarFunctionSelectItems.iterator(); it.hasNext();) { final SelectItem selectItem = (SelectItem) it.next(); if (_queryRewriter.isScalarFunctionSupported(selectItem.getScalarFunction())) { it.remove();
assert selectItem.getScalarFunction() == null;
assert selectItem.getScalarFunction() == null;