private Value getSubquery(JPQLNode node) { final boolean subclasses = true; // parse the subquery ParsedJPQL parsed = new ParsedJPQL(node.parser.jpql, node); Context subContext = new Context(parsed, null, ctx()); contexts.push(subContext); ClassMetaData candidate = getCandidateMetaData(node); Subquery subq = subContext.getSubquery(); if (subq == null) { subq = factory.newSubquery(candidate, subclasses, nextAlias()); subContext.setSubquery(subq); } subq.setMetaData(candidate); // evaluate from clause for resolving variables defined in subquery JPQLNode from = node.getChild(1); subContext.from = evalFromClause(from, true); try { QueryExpressions subexp = getQueryExpressions(); subq.setQueryExpressions(subexp); if (subexp.projections.length > 0) checkEmbeddable(subexp.projections[0]); return subq; } finally { // remove the subquery parse context contexts.pop(); } }
private Value getSubquery(JPQLNode node) { final boolean subclasses = true; // parse the subquery ParsedJPQL parsed = new ParsedJPQL(node.parser.jpql, node); Context subContext = new Context(parsed, null, ctx()); contexts.push(subContext); ClassMetaData candidate = getCandidateMetaData(node); Subquery subq = subContext.getSubquery(); if (subq == null) { subq = factory.newSubquery(candidate, subclasses, nextAlias()); subContext.setSubquery(subq); } subq.setMetaData(candidate); // evaluate from clause for resolving variables defined in subquery JPQLNode from = node.getChild(1); subContext.from = evalFromClause(from, true); try { QueryExpressions subexp = getQueryExpressions(); subq.setQueryExpressions(subexp); if (subexp.projections.length > 0) checkEmbeddable(subexp.projections[0]); return subq; } finally { // remove the subquery parse context contexts.pop(); } }
private Value getSubquery(JPQLNode node) { final boolean subclasses = true; // parse the subquery ParsedJPQL parsed = new ParsedJPQL(node.parser.jpql, node); Context subContext = new Context(parsed, null, ctx()); contexts.push(subContext); ClassMetaData candidate = getCandidateMetaData(node); Subquery subq = subContext.getSubquery(); if (subq == null) { subq = factory.newSubquery(candidate, subclasses, nextAlias()); subContext.setSubquery(subq); } subq.setMetaData(candidate); // evaluate from clause for resolving variables defined in subquery JPQLNode from = node.getChild(1); subContext.from = evalFromClause(from, true); try { QueryExpressions subexp = getQueryExpressions(); subq.setQueryExpressions(subexp); if (subexp.projections.length > 0) checkEmbeddable(subexp.projections[0]); return subq; } finally { // remove the subquery parse context contexts.pop(); } }
private Value getSubquery(JPQLNode node) { final boolean subclasses = true; // parse the subquery ParsedJPQL parsed = new ParsedJPQL(node.parser.jpql, node); Context subContext = new Context(parsed, null, ctx()); contexts.push(subContext); ClassMetaData candidate = getCandidateMetaData(node); Subquery subq = subContext.getSubquery(); if (subq == null) { subq = factory.newSubquery(candidate, subclasses, nextAlias()); subContext.setSubquery(subq); } subq.setMetaData(candidate); // evaluate from clause for resolving variables defined in subquery JPQLNode from = node.getChild(1); subContext.from = evalFromClause(from, true); try { QueryExpressions subexp = getQueryExpressions(); subq.setQueryExpressions(subexp); if (subexp.projections.length > 0) checkEmbeddable(subexp.projections[0]); return subq; } finally { // remove the subquery parse context contexts.pop(); } }
private Expression getSubquery(String alias, Path path, Expression exp) { Value var = getVariable(alias, true); // this bind is for validateMapPath to resolve alias Expression bindVar = factory.bindVariable(var, path); FieldMetaData fmd = path.last(); ClassMetaData candidate = getFieldType(fmd); if (candidate == null && fmd.isElementCollection()) candidate = fmd.getDefiningMetaData(); setCandidate(candidate, alias); Context subContext = ctx(); Subquery subquery = ctx().getSubquery(); if (subquery == null){ subquery = factory.newSubquery(candidate, true, alias); subContext.setSubquery(subquery); } else { subquery.setSubqAlias(alias); } Path subpath = factory.newPath(subquery); subpath.setSchemaAlias(path.getCorrelationVar()); subpath.setMetaData(candidate); subquery.setMetaData(candidate); if (fmd.isElementCollection()) exp = and(exp, bindVar); else exp = and(exp, factory.equal(path, subpath)); return exp; }
private Expression getSubquery(String alias, Path path, Expression exp) { Value var = getVariable(alias, true); // this bind is for validateMapPath to resolve alias Expression bindVar = factory.bindVariable(var, path); FieldMetaData fmd = path.last(); ClassMetaData candidate = getFieldType(fmd); if (candidate == null && fmd.isElementCollection()) candidate = fmd.getDefiningMetaData(); setCandidate(candidate, alias); Context subContext = ctx(); Subquery subquery = ctx().getSubquery(); if (subquery == null){ subquery = factory.newSubquery(candidate, true, alias); subContext.setSubquery(subquery); } else { subquery.setSubqAlias(alias); } Path subpath = factory.newPath(subquery); subpath.setSchemaAlias(path.getCorrelationVar()); subpath.setMetaData(candidate); subquery.setMetaData(candidate); if (fmd.isElementCollection()) exp = and(exp, bindVar); else exp = and(exp, factory.equal(path, subpath)); return exp; }
private Expression getSubquery(String alias, Path path, Expression exp) { Value var = getVariable(alias, true); // this bind is for validateMapPath to resolve alias Expression bindVar = factory.bindVariable(var, path); FieldMetaData fmd = path.last(); ClassMetaData candidate = getFieldType(fmd); if (candidate == null && fmd.isElementCollection()) candidate = fmd.getDefiningMetaData(); setCandidate(candidate, alias); Context subContext = ctx(); Subquery subquery = ctx().getSubquery(); if (subquery == null){ subquery = factory.newSubquery(candidate, true, alias); subContext.setSubquery(subquery); } else { subquery.setSubqAlias(alias); } Path subpath = factory.newPath(subquery); subpath.setSchemaAlias(path.getCorrelationVar()); subpath.setMetaData(candidate); subquery.setMetaData(candidate); if (fmd.isElementCollection()) exp = and(exp, bindVar); else exp = and(exp, factory.equal(path, subpath)); return exp; }
private Expression getSubquery(String alias, Path path, Expression exp) { Value var = getVariable(alias, true); // this bind is for validateMapPath to resolve alias Expression bindVar = factory.bindVariable(var, path); FieldMetaData fmd = path.last(); ClassMetaData candidate = getFieldType(fmd); if (candidate == null && fmd.isElementCollection()) candidate = fmd.getDefiningMetaData(); setCandidate(candidate, alias); Context subContext = ctx(); Subquery subquery = ctx().getSubquery(); if (subquery == null){ subquery = factory.newSubquery(candidate, true, alias); subContext.setSubquery(subquery); } else { subquery.setSubqAlias(alias); } Path subpath = factory.newPath(subquery); subpath.setSchemaAlias(path.getCorrelationVar()); subpath.setMetaData(candidate); subquery.setMetaData(candidate); if (fmd.isElementCollection()) exp = and(exp, bindVar); else exp = and(exp, factory.equal(path, subpath)); return exp; }