private String getAlias(Expression expr, Set<String> mappingAliases) { if (expr instanceof PrimaryExpression) { List<String> tuples = ((PrimaryExpression) expr).getTuples(); return tuples.size() > 1 ? tuples.get(0) : null; } else if (expr instanceof InvokeExpression) { return getAliasIfMapExpression((InvokeExpression) expr, mappingAliases); } return null; }
private String getAlias(Expression expr, Set<String> mappingAliases) { if (expr instanceof PrimaryExpression) { List<String> tuples = ((PrimaryExpression) expr).getTuples(); return tuples.size() > 1 ? tuples.get(0) : null; } else if (expr instanceof InvokeExpression) { return getAliasIfMapExpression((InvokeExpression) expr, mappingAliases); } return null; }
/** * Given a list of expressions in a.b.c format return a list of expressions that are only field names, 'c' in this example. * @param exprs - expressions to convert * @return - returns an array of expressions that only contain the field name */ private Expression[] toShortNameExpressions(Expression[] exprs) { if (exprs == null || exprs.length == 0) return exprs; Expression[] shortNameExpr = new Expression[exprs.length]; for (int i = 0; i < exprs.length; i++) { if (exprs[i] instanceof PrimaryExpression) { List<String> t = ((PrimaryExpression) exprs[i]).getTuples(); shortNameExpr[i] = new PrimaryExpression(Arrays.asList(t.get(t.size() - 1))); } else { shortNameExpr[i] = exprs[i]; } } return shortNameExpr; }
/** * Convenience method that takes a PrimaryExpression and returns the path to apply to the * query in terms of a "descend" argument. * @param expr The PrimaryExpression * @return The path */ private String getPathForPrimaryExpression(PrimaryExpression expr) { // Find the path to apply. This currently only caters for direct fields, and fields of the candidate // TODO Cater for other candidate aliases from JPQL "FROM" clause String firstTuple = (String)expr.getTuples().iterator().next(); String exprPath = expr.getId(); if (firstTuple.equals(candidateAlias)) { exprPath = exprPath.substring(candidateAlias.length()+1); } return exprPath; }
/** * Convenience method that takes a PrimaryExpression and returns the path to apply to the * query in terms of a "descend" argument. * @param expr The PrimaryExpression * @return The path */ private String getPathForPrimaryExpression(PrimaryExpression expr) { // Find the path to apply. This currently only caters for direct fields, and fields of the candidate // TODO Cater for other candidate aliases from JPQL "FROM" clause String firstTuple = expr.getTuples().iterator().next(); String exprPath = expr.getId(); if (firstTuple.equals(candidateAlias)) { exprPath = exprPath.substring(candidateAlias.length()+1); } return exprPath; }
/** * Given a list of expressions in a.b.c format return a list of expressions that are only field names, 'c' in this example. * @param exprs - expressions to convert * @return - returns an array of expressions that only contain the field name */ private Expression[] toShortNameExpressions(Expression[] exprs) { if (exprs == null || exprs.length == 0) return exprs; Expression[] shortNameExpr = new Expression[exprs.length]; for (int i = 0; i < exprs.length; i++) { if (exprs[i] instanceof PrimaryExpression) { List<String> t = ((PrimaryExpression) exprs[i]).getTuples(); shortNameExpr[i] = new PrimaryExpression(Arrays.asList(t.get(t.size() - 1))); } else { shortNameExpr[i] = exprs[i]; } } return shortNameExpr; }
/** * Fetches the tuples of the provided expression, stripping off the first * tuple if there are multiple tuples, the table name is aliased, and the * first tuple matches the alias. */ private List<String> getTuples(PrimaryExpression expr, String alias) { List<String> tuples = Utils.newArrayList(); tuples.addAll(expr.getTuples()); return getTuples(tuples, alias); }
private OrderExpression createJoinOrderExpression(PrimaryExpression expression) { PrimaryExpression primaryOrderExpr = new PrimaryExpression(expression.getTuples()); return new OrderExpression(primaryOrderExpr); }
/** * Constructor, extending a parent, and accessing a member of that parent. * @param parent The parent expression (or null, if candidate) * @param name Name of the member to access */ public ExpressionImpl(PersistableExpression parent, String name) { List<String> tuples = new ArrayList<String>(); if (parent != null) { org.datanucleus.query.expression.Expression parentQueryExpr = ((ExpressionImpl)parent).getQueryExpression(); if (parentQueryExpr instanceof PrimaryExpression) { tuples.addAll(((PrimaryExpression) parentQueryExpr).getTuples()); tuples.add(name); queryExpr = new PrimaryExpression(tuples); } else { tuples.add(name); queryExpr = new PrimaryExpression(parentQueryExpr, tuples); } } else { tuples.add(name); queryExpr = new PrimaryExpression(tuples); } }
List<String> tuples = expr.getTuples(); for (String component : tuples)
tuples.addAll(((PrimaryExpression)parentExpr).getTuples());
private void appendContainsExpression(ExpressionBuilderHelper h, InvokeExpression expr, boolean not) { PrimaryExpression pe = (PrimaryExpression) expr.getLeft(); TupleName fieldName = new TupleName(pe.getTuples()); AbstractMemberMetaData ammd = h.acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd != null && (ammd.getMap() != null || ammd.getCollection() != null)) { processJoinExpression(pe, null, h, h.compilation, false, false, not); if (expr.getArguments().size() > 0) { String name = hints != null ? (String) hints.get(QueryHints.MEMBER_OF_FIELD) : null; h.sb.append(" where "); appendExpression(h, new PrimaryExpression(new TupleName(name != null ? name : "name").getTuple()), ec); h.sb.append(" = "); appendExpression(h, expr.getArguments().get(0), ec); } h.sb.append(")"); } else { // This is simply picklist values appendExpression(h, expr.getLeft(), ec); if (expr.getArguments().size() > 0) { h.sb.append(not ? " excludes(" : " includes("); Literal l = (Literal) expr.getArguments().get(0); h.sb.append(new MultiPicklistFormatter(l.getLiteral().toString()).getFormattedString()); h.sb.append(")"); } else { h.sb.append(not ? " = " : " != ").append("null"); } } }
private void appendContainsExpression(ExpressionBuilderHelper h, InvokeExpression expr, boolean not) { PrimaryExpression pe = (PrimaryExpression) expr.getLeft(); TupleName fieldName = new TupleName(pe.getTuples()); AbstractMemberMetaData ammd = h.acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd != null && (ammd.getMap() != null || ammd.getCollection() != null)) { processJoinExpression(pe, null, h, h.compilation, false, false, not); if (expr.getArguments().size() > 0) { String name = hints != null ? (String) hints.get(QueryHints.MEMBER_OF_FIELD) : null; h.sb.append(" where "); appendExpression(h, new PrimaryExpression(new TupleName(name != null ? name : "name").getTuple()), ec); h.sb.append(" = "); appendExpression(h, expr.getArguments().get(0), ec); } h.sb.append(")"); } else { // This is simply picklist values appendExpression(h, expr.getLeft(), ec); if (expr.getArguments().size() > 0) { h.sb.append(not ? " excludes(" : " includes("); Literal l = (Literal) expr.getArguments().get(0); h.sb.append(new MultiPicklistFormatter(l.getLiteral().toString()).getFormattedString()); h.sb.append(")"); } else { h.sb.append(not ? " = " : " != ").append("null"); } } }
@Override protected Object processPrimaryExpression(PrimaryExpression expr) { Expression left = expr.getLeft(); if (left == null) { List<String> tuples = expr.getTuples(); PrimaryDetails primDetails = getFamilyColumnNameForPrimary(tuples); if (primDetails == null) { if (compileComponent == CompilationComponent.FILTER) { filterComplete = false; } NucleusLogger.QUERY.debug(">> Primary " + expr + " is not stored in this document, so unexecutable in datastore"); } else { HBaseFieldExpression fieldExpr = new HBaseFieldExpression(primDetails.type, primDetails.family, primDetails.column, primDetails.mmd, primDetails.mapping); stack.push(fieldExpr); return fieldExpr; } } // TODO Auto-generated method stub return super.processPrimaryExpression(expr); }
if (orderPrimExpr.getTuples().size() == 1 && resultAliases != null)
for (Expression expr = fromExpr.getRight(); expr != null; expr = expr.getRight()) { if (expr instanceof JoinExpression && mappingAliases.contains(expr.getAlias())) { List<String> t = ((JoinExpression) expr).getPrimaryExpression().getTuples(); relatedJoinAliases.put(new TupleName(t), expr.getAlias());
for (Expression expr = fromExpr.getRight(); expr != null; expr = expr.getRight()) { if (expr instanceof JoinExpression && mappingAliases.contains(expr.getAlias())) { List<String> t = ((JoinExpression) expr).getPrimaryExpression().getTuples(); relatedJoinAliases.put(new TupleName(t), expr.getAlias());
exprMetaData = new ExpressionMetaData(); List<String> ids = ((PrimaryExpression) expr).getTuples(); String id = null; for (int i = 0; i < ids.size(); i++) {
exprMetaData = new ExpressionMetaData(); List<String> ids = ((PrimaryExpression) expr).getTuples(); String id = null; for (int i = 0; i < ids.size(); i++) {
AbstractClassMetaData cmd = h.acmd; AbstractMemberMetaData mmd = null; List<String> ids = pe.getTuples(); String id = null; for (int i = 0; i < ids.size(); i++) {