/** * On in expression. * * @param expression * the expression * @param m * the m * @param idColumn * the id column * @param isIdColumn * the is id column * @return * @return the filter */ public static Map<String, Object> onInExpression(Expression expression, EntityMetadata m, KunderaMetadata kunderaMetadata, KunderaQuery kunderaQuery) { InExpression inExp = (InExpression) expression; Expression sfpExp = inExp.getExpression(); Map<String, Object> map = KunderaQueryUtils.setFieldClazzAndColumnFamily(sfpExp, m, kunderaMetadata); kunderaQuery.addFilterClause( (String) map.get(Constants.COL_NAME), inExp.getIdentifier(), inExp.getInItems(), (String) map.get(Constants.FIELD_NAME), (Boolean) map.get(Constants.IGNORE_CASE)); return map; }
/** * Populate IN query filter. * * @param inExpression * the in expression * @param metadata * the metadata * @return the filter builder */ private QueryBuilder populateInQuery(InExpression inExpression, EntityMetadata metadata) { String property = getField(inExpression.getExpression().toParsedText()); Expression inItemsParameter = inExpression.getInItems(); log.debug("IN query parameters for field " + property + " is: " + inItemsParameter); Iterable inItemsIterable = getInValuesCollection(inItemsParameter); return getFilter(kunderaQuery.new FilterClause(property, Expression.IN, inItemsIterable, property), metadata); }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { valid = (pathExpression != expression.getExpression()); }
Attribute attribute = entityType.getAttribute(((InExpression) whereExp).getExpression().toActualText() .split(DOT_REGEX)[1]); addInPredicateToBuilder(scannerBuilder, inIter, attribute);
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { valid = visitor.isNestedArray(expression.getExpression()); }
/** * {@inheritDoc} */ @Override protected void addChildrenTo(Collection<Expression> children) { children.add(getExpression()); children.add(getInItems()); }
/** * {@inheritDoc} */ @Override protected void addChildrenTo(Collection<Expression> children) { children.add(getExpression()); children.add(getInItems()); }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { valid = visitor.isNestedArray(expression.getExpression()); }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { if (expression.getInItems().isAncestor(inputParameter)) { // BNF: ... IN collection_valued_input_parameter if (expression.isSingleInputParameter()) { type = Collection.class; } else if (visitedExpressions.add(expression)) { expression.getExpression().accept(this); visitedExpressions.remove(expression); } } }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { if (expression.getInItems().isAncestor(inputParameter)) { // BNF: ... IN collection_valued_input_parameter if (expression.isSingleInputParameter()) { type = Collection.class; } else if (visitedExpressions.add(expression)) { expression.getExpression().accept(this); visitedExpressions.remove(expression); } } }
/** * {@inheritDoc} */ public void acceptChildren(ExpressionVisitor visitor) { getExpression().accept(visitor); getInItems().accept(visitor); }
/** * {@inheritDoc} */ public void acceptChildren(ExpressionVisitor visitor) { getExpression().accept(visitor); getInItems().accept(visitor); }
/** * Populate IN query filter. * * @param inExpression * the in expression * @param metadata * the metadata * @return the filter builder */ private QueryBuilder populateInQuery(InExpression inExpression, EntityMetadata metadata) { String property = getField(inExpression.getExpression().toParsedText()); Expression inItemsParameter = inExpression.getInItems(); log.debug("IN query parameters for field " + property + " is: " + inItemsParameter); Iterable inItemsIterable = getInValuesCollection(inItemsParameter); return getFilter(kunderaQuery.new FilterClause(property, Expression.IN, inItemsIterable, property), metadata); }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { int position = visitor.queryPosition.getPosition(expression) - visitor.corrections.peek(); int length = 0; if (expression.hasExpression()) { length += expression.getExpression().getLength() + SPACE_LENGTH; } // Within "IN" if (visitor.isPositionWithin(position, length, expression.getIdentifier())) { boolean hasOnlyIdentifier = !expression.hasExpression() && !expression.hasInItems(); if (hasOnlyIdentifier) { visitor.corrections.add(visitor.queryPosition.getPosition(expression)); } super.visit(expression); if (hasOnlyIdentifier) { visitor.corrections.pop(); } } else { super.visit(expression); } } }
/** * {@inheritDoc} */ @Override protected void validateInExpression(InExpression expression) { super.validateInExpression(expression); // Make sure the number of items matches if the left expression // is a nested array and the IN items expression is a subquery Expression inItems = expression.getInItems(); if (isSubquery(inItems)) { int nestedArraySize = nestedArraySize(expression.getExpression()); int subquerySelectItemsSize = subquerySelectItemCount(inItems); if ((nestedArraySize > -1) && (subquerySelectItemsSize != nestedArraySize) || (nestedArraySize == -1) && (subquerySelectItemsSize > 1)) { addProblem(expression, InExpression_InvalidItemCount); } } }
/** * {@inheritDoc} */ @Override protected void validateInExpression(InExpression expression) { super.validateInExpression(expression); // Make sure the number of items matches if the left expression // is a nested array and the IN items expression is a subquery Expression inItems = expression.getInItems(); if (isSubquery(inItems)) { int nestedArraySize = nestedArraySize(expression.getExpression()); int subquerySelectItemsSize = subquerySelectItemCount(inItems); if ((nestedArraySize > -1) && (subquerySelectItemsSize != nestedArraySize) || (nestedArraySize == -1) && (subquerySelectItemsSize > 1)) { addProblem(expression, InExpression_InvalidItemCount); } } }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { // Visit the left expression InExpressionExpressionBuilder visitor1 = new InExpressionExpressionBuilder(); expression.getExpression().accept(visitor1); // Visit the IN items InExpressionBuilder visitor2 = new InExpressionBuilder(); visitor2.hasNot = expression.hasNot(); visitor2.singleInputParameter = expression.isSingleInputParameter(); visitor2.leftExpression = queryExpression; expression.getInItems().accept(visitor2); // Set the expression type type[0] = Boolean.class; }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { // Visit the left expression InExpressionExpressionBuilder visitor1 = new InExpressionExpressionBuilder(); expression.getExpression().accept(visitor1); // Visit the IN items InExpressionBuilder visitor2 = new InExpressionBuilder(); visitor2.hasNot = expression.hasNot(); visitor2.singleInputParameter = expression.isSingleInputParameter(); visitor2.leftExpression = queryExpression; expression.getInItems().accept(visitor2); // Set the expression type type[0] = Boolean.class; }
/** * {@inheritDoc} */ @Override public void visit(InExpression expression) { expression.getExpression().accept(this); InExpressionStateObject stateObject = new InExpressionStateObject( parent, this.stateObject, expression.hasNot(), buildChildren(expression.getInItems()) ); stateObject.setSingleInputParameter(expression.isSingleInputParameter()); stateObject.setExpression(expression); this.stateObject = stateObject; }
/** * Validates the given {@link InExpression}. The test to perform is: * <ul> * <li>If the expression is a path expression, validation makes sure it is an association mapping, * a basic field is not allowed.</li> * </ul> * * @param expression The {@link InExpression} to validate */ protected void validateInExpression(InExpression expression) { // Validate the left expression if (expression.hasExpression()) { Expression stringExpression = expression.getExpression(); // Special case for state field path expression StateFieldPathExpression pathExpression = getStateFieldPathExpression(stringExpression); if (pathExpression != null) { validateStateFieldPathExpression(pathExpression, validPathExpressionTypeForInExpression()); } else { stringExpression.accept(this); } } // Validate the items expression.getInItems().accept(getInItemsVisitor()); }