private PrimaryExpression getPrimaryExpresionFromJoinAlias(QueryCompilation compilation, String alias) { for (Expression fromExpr : compilation.getExprFrom()) { for (Expression expr = fromExpr.getRight(); expr != null; expr = expr.getRight()) { if (expr instanceof JoinExpression && alias.equals(expr.getAlias())) { return ((JoinExpression) expr).getPrimaryExpression(); } } } return null; }
private PrimaryExpression getPrimaryExpresionFromJoinAlias(QueryCompilation compilation, String alias) { for (Expression fromExpr : compilation.getExprFrom()) { for (Expression expr = fromExpr.getRight(); expr != null; expr = expr.getRight()) { if (expr instanceof JoinExpression && alias.equals(expr.getAlias())) { return ((JoinExpression) expr).getPrimaryExpression(); } } } return null; }
private void processJoin(ExpressionBuilderHelper h, QueryCompilation compilation, FetchPlan fetchPlan, boolean hasWhere) { if (compilation.getExprFrom() == null) return; for (Expression fromExpr : compilation.getExprFrom()) { if (!(fromExpr instanceof ClassExpression)) { throw new NucleusDataStoreException("Unsupported from expression: " + fromExpr); } Expression expr = fromExpr.getRight(); while (expr != null) { if (expr instanceof JoinExpression) { JoinExpression je = (JoinExpression) expr; processJoinExpression(je.getPrimaryExpression(), je.getAlias(), h, compilation, true, hasWhere, false); h.sb.append("))"); // Either this was already true or will be after the first call hasWhere = true; } else { throw new NucleusDataStoreException("Unsupported expression found inside a join expression: " + fromExpr.getRight()); } expr = expr.getRight(); } } }
if (expr.getLeft() instanceof DyadicExpression) { leftAlias = createAliasToFilterMappings(expr.getLeft(), map, mappingAliases); if (expr.getRight() instanceof DyadicExpression) { rightAlias = createAliasToFilterMappings(expr.getRight(), map, mappingAliases); } else { rightAlias = getAlias(expr.getRight(), mappingAliases); map.put(rightAlias, expr.getRight()); return rightAlias;
private boolean isAggregate(Expression expr) { if (expr == null) return false; if (expr instanceof InvokeExpression) { String methodName = ((InvokeExpression) expr).getOperation(); return AGGREGATE_METHODS.contains(methodName); } else { return isAggregate(expr.getRight()) || isAggregate(expr.getLeft()); } }
if (expr.getLeft() instanceof DyadicExpression) { leftAlias = createAliasToFilterMappings(expr.getLeft(), map, mappingAliases); if (expr.getRight() instanceof DyadicExpression) { rightAlias = createAliasToFilterMappings(expr.getRight(), map, mappingAliases); } else { rightAlias = getAlias(expr.getRight(), mappingAliases); map.put(rightAlias, expr.getRight()); return rightAlias;
private boolean isAggregate(Expression expr) { if (expr == null) return false; if (expr instanceof InvokeExpression) { String methodName = ((InvokeExpression) expr).getOperation(); return AGGREGATE_METHODS.contains(methodName); } else { return isAggregate(expr.getRight()) || isAggregate(expr.getLeft()); } }
private String getAliasFromDyadictExpression(Expression expr, Set<String> mappingAliases) { String leftAlias = getAlias(expr.getLeft(), mappingAliases); String rightAlias = getAlias(expr.getRight(), mappingAliases); if (leftAlias != null && rightAlias != null && !leftAlias.equals(rightAlias)) { throw new NucleusDataStoreException("There cannot be two different aliases in a leaf DyadictExpression: " + expr); } return leftAlias != null ? leftAlias : rightAlias; }
private void processJoin(ExpressionBuilderHelper h, QueryCompilation compilation, FetchPlan fetchPlan, boolean hasWhere) { if (compilation.getExprFrom() == null) return; for (Expression fromExpr : compilation.getExprFrom()) { if (!(fromExpr instanceof ClassExpression)) { throw new NucleusDataStoreException("Unsupported from expression: " + fromExpr); } Expression expr = fromExpr.getRight(); while (expr != null) { if (expr instanceof JoinExpression) { JoinExpression je = (JoinExpression) expr; processJoinExpression(je.getPrimaryExpression(), je.getAlias(), h, compilation, true, hasWhere, false); h.sb.append("))"); // Either this was already true or will be after the first call hasWhere = true; } else { throw new NucleusDataStoreException("Unsupported expression found inside a join expression: " + fromExpr.getRight()); } expr = expr.getRight(); } } }
private String getAliasFromDyadictExpression(Expression expr, Set<String> mappingAliases) { String leftAlias = getAlias(expr.getLeft(), mappingAliases); String rightAlias = getAlias(expr.getRight(), mappingAliases); if (leftAlias != null && rightAlias != null && !leftAlias.equals(rightAlias)) { throw new NucleusDataStoreException("There cannot be two different aliases in a leaf DyadictExpression: " + expr); } return leftAlias != null ? leftAlias : rightAlias; }
private void processFromExpression(QueryData qd, Expression expr) { if (expr instanceof JoinExpression) { JoinExpression joinExpr = (JoinExpression) expr; if (joinExpr.getType() != JoinExpression.JoinType.JOIN_INNER && joinExpr.getType() != JoinExpression.JoinType.JOIN_INNER_FETCH) { throw new UnsupportedDatastoreFeatureException("Cannot fulfill outer join queries."); } qd.joinOrderExpression = createJoinOrderExpression(joinExpr.getPrimaryExpression()); } if (expr.getLeft() != null) { processFromExpression(qd, expr.getLeft()); } if (expr.getRight() != null) { processFromExpression(qd, expr.getRight()); } }
getParametersForQueryExpression(expr.getRight(), params);
if (expr.getOperator().equals(Expression.OP_AND)) { addExpression(expr.getLeft(), qd); addExpression(expr.getRight(), qd); } else if (expr.getOperator().equals(Expression.OP_OR)) { boolean reset = !qd.isOrExpression; qd.isOrExpression = true; addExpression(expr.getLeft(), qd); addExpression(expr.getRight(), qd); } else if (expr.getLeft() instanceof PrimaryExpression) { addLeftPrimaryExpression( (PrimaryExpression) expr.getLeft(), expr.getOperator(), expr.getRight(), qd); } else { addExpression(expr.getRight(), qd); addExpression(expr.getRight(), qd); } else if (expr instanceof InvokeExpression) {
h.sb.append(expr.getOperator().toString()); boolean rparens = expr.getRight() instanceof DyadicExpression; if (rparens) h.sb.append("( "); appendExpression(h, expr.getRight(), executionContext); if (rparens) h.sb.append(" )"); appendExpression(h, expr.getRight(), executionContext); List<String> ids = ((PrimaryExpression) expr).getTuples(); int pos = 0;
h.sb.append(expr.getOperator().toString()); boolean rparens = expr.getRight() instanceof DyadicExpression; if (rparens) h.sb.append("( "); appendExpression(h, expr.getRight(), executionContext); if (rparens) h.sb.append(" )"); appendExpression(h, expr.getRight(), executionContext); List<String> ids = ((PrimaryExpression) expr).getTuples(); int pos = 0;
if (fromExpr[0].getRight() != null)
Literal castLitExpr = (Literal)expr.getLeft().getRight(); Class castType = resolveClass((String)castLitExpr.getLiteral()); AbstractClassMetaData castCmd = ec.getMetaDataManager().getMetaDataForClass(castType, clr); Literal castLitExpr = (Literal)expr.getLeft().getRight(); AbstractClassMetaData castCmd = ec.getMetaDataManager().getMetaDataForClass(resolveClass((String)castLitExpr.getLiteral()), clr);