private String getOperatorName(FilterItem item) throws UnsupportedOperationException { final OperatorType operator = item.getOperator(); if (OperatorType.EQUALS_TO.equals(operator)) { return null; } if (OperatorType.LIKE.equals(operator)) { return null; } if (OperatorType.LESS_THAN.equals(operator)) { return "$lt"; } if (OperatorType.LESS_THAN_OR_EQUAL.equals(operator)) { return "$lte"; } if (OperatorType.GREATER_THAN.equals(operator)) { return "$gt"; } if (OperatorType.GREATER_THAN_OR_EQUAL.equals(operator)) { return "$gte"; } if (OperatorType.DIFFERENT_FROM.equals(operator)) { return "$ne"; } if (OperatorType.IN.equals(operator)) { return "$in"; } throw new UnsupportedOperationException("Unsupported operator type: " + operator); }
private String getOperatorName(FilterItem item) throws UnsupportedOperationException { final OperatorType operator = item.getOperator(); if (OperatorType.EQUALS_TO.equals(operator)) { return null; } if (OperatorType.LIKE.equals(operator)) { return null; } if (OperatorType.LESS_THAN.equals(operator)) { return "$lt"; } if (OperatorType.LESS_THAN_OR_EQUAL.equals(operator)) { return "$lte"; } if (OperatorType.GREATER_THAN.equals(operator)) { return "$gt"; } if (OperatorType.GREATER_THAN_OR_EQUAL.equals(operator)) { return "$gte"; } if (OperatorType.DIFFERENT_FROM.equals(operator)) { return "$ne"; } if (OperatorType.IN.equals(operator)) { return "$in"; } throw new UnsupportedOperationException("Unsupported operator type: " + operator); }
private String getOperatorName(FilterItem item) { final OperatorType operator = item.getOperator(); if (OperatorType.EQUALS_TO.equals(operator)) { return null; } if (OperatorType.LIKE.equals(operator)) { return null; } if (OperatorType.LESS_THAN.equals(operator)) { return "$lt"; } if (OperatorType.LESS_THAN_OR_EQUAL.equals(operator)) { return "$lte"; } if (OperatorType.GREATER_THAN.equals(operator)) { return "$gt"; } if (OperatorType.GREATER_THAN_OR_EQUAL.equals(operator)) { return "$gte"; } if (OperatorType.DIFFERENT_FROM.equals(operator)) { return "$ne"; } if (OperatorType.IN.equals(operator)) { return "$in"; } throw new IllegalStateException("Unsupported operator type: " + operator); }
private String getOperatorName(FilterItem item) { final OperatorType operator = item.getOperator(); if (OperatorType.EQUALS_TO.equals(operator)) { return null; } if (OperatorType.LIKE.equals(operator)) { return null; } if (OperatorType.LESS_THAN.equals(operator)) { return "$lt"; } if (OperatorType.LESS_THAN_OR_EQUAL.equals(operator)) { return "$lte"; } if (OperatorType.GREATER_THAN.equals(operator)) { return "$gt"; } if (OperatorType.GREATER_THAN_OR_EQUAL.equals(operator)) { return "$gte"; } if (OperatorType.DIFFERENT_FROM.equals(operator)) { return "$ne"; } if (OperatorType.IN.equals(operator)) { return "$in"; } throw new IllegalStateException("Unsupported operator type: " + operator); }
/** * Determines if a particular {@link FilterItem} will have it's parameter (operand) replaced during SQL generation. * Such filter items should succesively have their parameters set at execution time. * * @param whereItem * @return */ public static boolean isPreparedParameterCandidate(FilterItem whereItem) { return !whereItem.isCompoundFilter() && !OperatorType.IN.equals(whereItem.getOperator()) && whereItem.getOperand() != null; }
/** * Determines if a particular {@link FilterItem} will have it's parameter (operand) replaced during SQL generation. * Such filter items should succesively have their parameters set at execution time. * * @param whereItem * @return */ public static boolean isPreparedParameterCandidate(FilterItem whereItem) { return !whereItem.isCompoundFilter() && !OperatorType.IN.equals(whereItem.getOperator()) && whereItem.getOperand() != null; }
/** * Rewrites a (non-compound) {@link FilterItem} when it's operand has already been rewritten into a SQL literal. * * @param item * @param operandLiteral * @return */ protected String rewriteFilterItemWithOperandLiteral(FilterItem item, String operandLiteral) { final OperatorType operator = item.getOperator(); final SelectItem selectItem = item.getSelectItem(); final StringBuilder sb = new StringBuilder(); sb.append(selectItem.getSameQueryAlias(false)); FilterItem.appendOperator(sb, item.getOperand(), operator); sb.append(operandLiteral); return sb.toString(); }
private static String buildWhereClauseItem(final FilterItem whereItem, final String queryObjectHandle) { final StringBuilder whereClauseItemBuilder = new StringBuilder(); whereClauseItemBuilder.append(queryObjectHandle); whereClauseItemBuilder.append("."); whereClauseItemBuilder.append(whereItem.getSelectItem().getColumn().getName()); whereClauseItemBuilder.append(whereItem.getOperator().toSql()); final Object operand = whereItem.getOperand(); if (operand instanceof String) { whereClauseItemBuilder.append("\""); } whereClauseItemBuilder.append(operand); if (operand instanceof String) { whereClauseItemBuilder.append("\""); } return whereClauseItemBuilder.toString(); } }
/** * Rewrites a (non-compound) {@link FilterItem} when it's operand has already been rewritten into a SQL literal. * * @param item * @param operandLiteral * @return */ protected String rewriteFilterItemWithOperandLiteral(FilterItem item, String operandLiteral) { final OperatorType operator = item.getOperator(); final SelectItem selectItem = item.getSelectItem(); final StringBuilder sb = new StringBuilder(); sb.append(selectItem.getSameQueryAlias(false)); FilterItem.appendOperator(sb, item.getOperand(), operator); sb.append(operandLiteral); return sb.toString(); }
public static String createWhereClause(List<FilterItem> whereItems, IQueryRewriter queryRewriter, boolean inlineValues) { if (whereItems.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); sb.append(" WHERE "); boolean firstValue = true; for (FilterItem whereItem : whereItems) { if (firstValue) { firstValue = false; } else { sb.append(" AND "); } if (!inlineValues) { if (isPreparedParameterCandidate(whereItem)) { // replace operator with parameter whereItem = new FilterItem(whereItem.getSelectItem(), whereItem.getOperator(), new QueryParameter()); } } final String whereItemLabel = queryRewriter.rewriteFilterItem(whereItem); sb.append(whereItemLabel); } return sb.toString(); }
public static String createWhereClause(List<FilterItem> whereItems, IQueryRewriter queryRewriter, boolean inlineValues) { if (whereItems.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); sb.append(" WHERE "); boolean firstValue = true; for (FilterItem whereItem : whereItems) { if (firstValue) { firstValue = false; } else { sb.append(" AND "); } if (!inlineValues) { if (isPreparedParameterCandidate(whereItem)) { // replace operator with parameter whereItem = new FilterItem(whereItem.getSelectItem(), whereItem.getOperator(), new QueryParameter()); } } final String whereItemLabel = queryRewriter.rewriteFilterItem(whereItem); sb.append(whereItemLabel); } return sb.toString(); }
final OperatorType operator = whereItem.getOperator(); if (!OperatorType.EQUALS_TO.equals(operator) && !OperatorType.IN.equals(operator)) { throw new IllegalStateException(
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; } }
@Override public String rewriteFilterItem(final FilterItem item) { if (item.getOperand() instanceof String && item.getOperand().equals("")) { // In Oracle empty strings are treated as null. Typical SQL constructs with an empty string do not work. return super.rewriteFilterItem(new FilterItem(item.getSelectItem(), item.getOperator(), null)); } else { return super.rewriteFilterItem(item); } } }
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; } }
@Override public String rewriteFilterItem(final FilterItem item) { if (item.getOperand() instanceof String && item.getOperand().equals("")) { // In Oracle empty strings are treated as null. Typical SQL constructs with an empty string do not work. return super.rewriteFilterItem(new FilterItem(item.getSelectItem(), item.getOperator(), null)); } else { return super.rewriteFilterItem(item); } } }
@Override public String rewriteFilterItem(FilterItem item) { final SelectItem selectItem = item.getSelectItem(); final Object itemOperand = item.getOperand(); final OperatorType operator = item.getOperator(); if (null != selectItem && itemOperand != null) { ColumnType columnType = selectItem.getExpectedColumnType(); if (columnType != null) { if (columnType.isTimeBased()) { // special logic for DB2 based time operands. StringBuilder sb = new StringBuilder(); sb.append(selectItem.getSameQueryAlias(true)); final Object operand = FilterItem.appendOperator(sb, itemOperand, operator); if (operand instanceof SelectItem) { final String selectItemString = ((SelectItem) operand).getSameQueryAlias(true); sb.append(selectItemString); } else { Date date = TimeComparator.toDate(itemOperand); if (date == null) { throw new IllegalStateException("Could not convert " + itemOperand + " to date"); } final String sqlValue = FormatHelper.formatSqlTime(columnType, date, true, "('", "')"); sb.append(sqlValue); } return sb.toString(); } } } return super.rewriteFilterItem(item); }
@Override public String rewriteFilterItem(FilterItem item) { final SelectItem selectItem = item.getSelectItem(); final Object itemOperand = item.getOperand(); final OperatorType operator = item.getOperator(); if (null != selectItem && itemOperand != null) { ColumnType columnType = selectItem.getExpectedColumnType(); if (columnType != null) { if (columnType.isTimeBased()) { // special logic for DB2 based time operands. StringBuilder sb = new StringBuilder(); sb.append(selectItem.getSameQueryAlias(true)); final Object operand = FilterItem.appendOperator(sb, itemOperand, operator); if (operand instanceof SelectItem) { final String selectItemString = ((SelectItem) operand).getSameQueryAlias(true); sb.append(selectItemString); } else { Date date = TimeComparator.toDate(itemOperand); if (date == null) { throw new IllegalStateException("Could not convert " + itemOperand + " to date"); } final String sqlValue = FormatHelper.formatSqlTime(columnType, date, true, "('", "')"); sb.append(sqlValue); } return sb.toString(); } } } return super.rewriteFilterItem(item); }
private FilterItem copyFilterItem(FilterItem item, Object[] values, AtomicInteger parameterIndex) { if (item.isCompoundFilter()) { final FilterItem[] childItems = item.getChildItems(); final FilterItem[] newChildItems = new FilterItem[childItems.length]; for (int i = 0; i < childItems.length; i++) { final FilterItem childItem = childItems[i]; final FilterItem newChildItem = copyFilterItem(childItem, values, parameterIndex); newChildItems[i] = newChildItem; } final FilterItem newFilter = new FilterItem(item.getLogicalOperator(), newChildItems); return newFilter; } else { if (item.getOperand() instanceof QueryParameter) { final Object newOperand = values[parameterIndex.getAndIncrement()]; final FilterItem newFilter = new FilterItem(item.getSelectItem(), item.getOperator(), newOperand); return newFilter; } else { return item; } } }
private FilterItem copyFilterItem(FilterItem item, Object[] values, AtomicInteger parameterIndex) { if (item.isCompoundFilter()) { final FilterItem[] childItems = item.getChildItems(); final FilterItem[] newChildItems = new FilterItem[childItems.length]; for (int i = 0; i < childItems.length; i++) { final FilterItem childItem = childItems[i]; final FilterItem newChildItem = copyFilterItem(childItem, values, parameterIndex); newChildItems[i] = newChildItem; } final FilterItem newFilter = new FilterItem(item.getLogicalOperator(), newChildItems); return newFilter; } else { if (item.getOperand() instanceof QueryParameter) { final Object newOperand = values[parameterIndex.getAndIncrement()]; final FilterItem newFilter = new FilterItem(item.getSelectItem(), item.getOperator(), newOperand); return newFilter; } else { return item; } } }