/** * Answer true if a variable in the IN clause is SELECTed */ public boolean isVariableInINClauseSelected(GenerationContext context) { for (Iterator i = selectExpressions.iterator(); i.hasNext();) { Node node = (Node)i.next(); if (node.isVariableNode()) { String variableNameForLeft = ((VariableNode)node).getCanonicalVariableName(); if (!context.getParseTreeContext().isRangeVariable(variableNameForLeft)) { return true; } } } return false; }
/** * Answer true if a variable in the IN clause is SELECTed */ public boolean isVariableInINClauseSelected(GenerationContext context) { for (Iterator i = selectExpressions.iterator(); i.hasNext();) { Node node = (Node)i.next(); if (node.isVariableNode()) { String variableNameForLeft = ((VariableNode)node).getCanonicalVariableName(); if (!context.getParseTreeContext().isRangeVariable(variableNameForLeft)) { return true; } } } return false; }
/** * Answer true if a variable in the IN clause is SELECTed */ public boolean isVariableInINClauseSelected(GenerationContext context) { for (Iterator i = selectExpressions.iterator(); i.hasNext();) { Node node = (Node)i.next(); if (node.isVariableNode()) { String variableNameForLeft = ((VariableNode)node).getCanonicalVariableName(); if (!context.getParseTreeContext().isRangeVariable(variableNameForLeft)) { return true; } } } return false; }
/** * INTERNAL */ public void addNonFetchJoinAttributes(ObjectLevelReadQuery theQuery, GenerationContext generationContext) { ParseTreeContext context = generationContext.getParseTreeContext(); for (Iterator i = unusedVariables.iterator(); i.hasNext();) { String variable = (String)i.next(); Expression expr = null; if (!context.isRangeVariable(variable)) { Node path = context.pathForVariable(variable); expr = path.generateExpression(generationContext); theQuery.addNonFetchJoinedAttribute(expr); } else { // Ignore, assume 'Select 1 from Employee e' or sorts // unused range variable => not supported yet //throw JPQLException.notYetImplemented(context.getQueryInfo(), // "Variable [" + variable + "] is defined in a range variable declaration, but not used in the rest of the query."); } } }
/** * INTERNAL */ public void addNonFetchJoinAttributes(ObjectLevelReadQuery theQuery, GenerationContext generationContext) { ParseTreeContext context = generationContext.getParseTreeContext(); for (Iterator i = unusedVariables.iterator(); i.hasNext();) { String variable = (String)i.next(); Expression expr = null; if (!context.isRangeVariable(variable)) { Node path = context.pathForVariable(variable); expr = path.generateExpression(generationContext); theQuery.addNonFetchJoinedAttribute(expr); } else { // Ignore, assume 'Select 1 from Employee e' or sorts // unused range variable => not supported yet //throw JPQLException.notYetImplemented(context.getQueryInfo(), // "Variable [" + variable + "] is defined in a range variable declaration, but not used in the rest of the query."); } } }
/** * INTERNAL */ public void addNonFetchJoinAttributes(ObjectLevelReadQuery theQuery, GenerationContext generationContext) { ParseTreeContext context = generationContext.getParseTreeContext(); for (Iterator i = unusedVariables.iterator(); i.hasNext();) { String variable = (String)i.next(); Expression expr = null; if (!context.isRangeVariable(variable)) { Node path = context.pathForVariable(variable); expr = path.generateExpression(generationContext); theQuery.addNonFetchJoinedAttribute(expr); } else { // unused range variable => not supported yet throw JPQLException.notYetImplemented(context.getQueryInfo(), "Variable [" + variable + "] is defined in a range variable declaration, but not used in the rest of the query."); } } }
if (!context.isRangeVariable(baseVariable)) {
private Class getClassOfFirstVariable(GenerationContext context) { Class clazz = null; String variable = getParseTree().getFromNode().getFirstVariable(); ParseTreeContext parseTreeContext = context.getParseTreeContext(); if (parseTreeContext.isRangeVariable(variable)) { String schema = parseTreeContext.schemaForVariable(variable); // variables is defines in a range variable declaration, so there // is a schema name for this variable clazz = parseTreeContext.classForSchemaName(schema, context); } else { // variable is defined in a JOIN clause, so there is a a defining // node for the variable Node path = parseTreeContext.pathForVariable(variable); clazz = path.resolveClass(context); } return clazz; }
private Class getClassOfFirstVariable(GenerationContext context) { Class clazz = null; String variable = getParseTree().getFromNode().getFirstVariable(); ParseTreeContext parseTreeContext = context.getParseTreeContext(); if (parseTreeContext.isRangeVariable(variable)) { String schema = parseTreeContext.schemaForVariable(variable); // variables is defines in a range variable declaration, so there // is a schema name for this variable clazz = parseTreeContext.classForSchemaName(schema, context); } else { // variable is defined in a JOIN clause, so there is a a defining // node for the variable Node path = parseTreeContext.pathForVariable(variable); clazz = path.resolveClass(context); } return clazz; }
private Class getClassOfFirstVariable(GenerationContext context) { Class clazz = null; String variable = getParseTree().getFromNode().getFirstVariable(); ParseTreeContext parseTreeContext = context.getParseTreeContext(); if (parseTreeContext.isRangeVariable(variable)) { String schema = parseTreeContext.schemaForVariable(variable); // variables is defines in a range variable declaration, so there // is a schema name for this variable clazz = parseTreeContext.classForSchemaName(schema, context); } else { // variable is defined in a JOIN clause, so there is a a defining // node for the variable Node path = parseTreeContext.pathForVariable(variable); clazz = path.resolveClass(context); } return clazz; }
public Expression generateExpression(GenerationContext generationContext) { Expression myExpression = null; String name = getCanonicalVariableName(); //is there a cached Expression? myExpression = generationContext.expressionFor(name); if (myExpression != null) { return myExpression; } //Either I have an alias type, or I'm an IN declaration if (classConstant != null){ myExpression = new ConstantExpression(classConstant, generationContext.getBaseExpression()); } else if (generationContext.getParseTreeContext().isRangeVariable(name)) { myExpression = generateBaseBuilderExpression(generationContext); } else { myExpression = generateExpressionForAlias(generationContext); } generationContext.addExpression(myExpression, name); return myExpression; }
public Expression generateExpression(GenerationContext generationContext) { Expression myExpression = null; String name = getCanonicalVariableName(); //is there a cached Expression? myExpression = generationContext.expressionFor(name); if (myExpression != null) { return myExpression; } //Either I have an alias type, or I'm an IN declaration if (classConstant != null){ myExpression = new ConstantExpression(classConstant, generationContext.getBaseExpression()); } else if (generationContext.getParseTreeContext().isRangeVariable(name)) { myExpression = generateBaseBuilderExpression(generationContext); } else { myExpression = generateExpressionForAlias(generationContext); } generationContext.addExpression(myExpression, name); return myExpression; }
public Expression generateExpression(GenerationContext generationContext) { Expression myExpression = null; String name = getCanonicalVariableName(); //is there a cached Expression? myExpression = generationContext.expressionFor(name); if (myExpression != null) { return myExpression; } //Either I have an alias type, or I'm an IN declaration if (classConstant != null){ myExpression = new ConstantExpression(classConstant, generationContext.getBaseExpression()); } else if (generationContext.getParseTreeContext().isRangeVariable(name)) { myExpression = generateBaseBuilderExpression(generationContext); } else { myExpression = generateExpressionForAlias(generationContext); } generationContext.addExpression(myExpression, name); return myExpression; }
public Object getTypeForMapKey(ParseTreeContext context){ String name = getCanonicalVariableName(); if (context.isRangeVariable(name)) { throw JPQLException.variableCannotHaveMapKey(context.getQueryInfo(), getLine(), getColumn(), name); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { return path.getTypeForMapKey(context); } } }
public Object getTypeForMapKey(ParseTreeContext context){ String name = getCanonicalVariableName(); if (context.isRangeVariable(name)) { throw JPQLException.variableCannotHaveMapKey(context.getQueryInfo(), getLine(), getColumn(), name); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { return path.getTypeForMapKey(context); } } }
public Object getTypeForMapKey(ParseTreeContext context){ String name = getCanonicalVariableName(); if (context.isRangeVariable(name)) { throw JPQLException.variableCannotHaveMapKey(context.getQueryInfo(), getLine(), getColumn(), name); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { return path.getTypeForMapKey(context); } } }
/** * resolveClass: Answer the class which corresponds to my variableName. This is the class for * an alias, where the variableName is registered to an alias. */ public Class resolveClass(GenerationContext generationContext) { Class clazz = null; String name = getCanonicalVariableName(); ParseTreeContext context = generationContext.getParseTreeContext(); if (context.isRangeVariable(name)) { String schema = context.schemaForVariable(name); clazz = context.classForSchemaName(schema, generationContext); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { clazz = path.resolveClass(generationContext); } } return clazz; }
/** * resolveClass: Answer the class which corresponds to my variableName. This is the class for * an alias, where the variableName is registered to an alias. */ public Class resolveClass(GenerationContext generationContext) { Class clazz = null; String name = getCanonicalVariableName(); ParseTreeContext context = generationContext.getParseTreeContext(); if (context.isRangeVariable(name)) { String schema = context.schemaForVariable(name); clazz = context.classForSchemaName(schema, generationContext); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { clazz = path.resolveClass(generationContext); } } return clazz; }
/** * resolveClass: Answer the class which corresponds to my variableName. This is the class for * an alias, where the variableName is registered to an alias. */ public Class resolveClass(GenerationContext generationContext) { Class clazz = null; String name = getCanonicalVariableName(); ParseTreeContext context = generationContext.getParseTreeContext(); if (context.isRangeVariable(name)) { String schema = context.schemaForVariable(name); clazz = context.classForSchemaName(schema, generationContext); } else { DotNode path = (DotNode)context.pathForVariable(name); if (path == null) { throw JPQLException.aliasResolutionException( context.getQueryInfo(), getLine(), getColumn(), name); } else { clazz = path.resolveClass(generationContext); } } return clazz; }
/** */ private Class getBaseExpressionClass(Node node, GenerationContext generationContext) { ParseTreeContext context = generationContext.getParseTreeContext(); Class clazz = null; if (node == null) { clazz = null; } else if (node.isDotNode()) { // DotNode: delegate to left clazz = getBaseExpressionClass(node.getLeft(), generationContext); } else if (node.isVariableNode()) { // VariableNode String variable = ((VariableNode)node).getCanonicalVariableName(); if (!context.isRangeVariable(variable)) { Node path = context.pathForVariable(variable); // Variable is defined in JOIN/IN clause => // return the Class from its definition clazz = getBaseExpressionClass(path, generationContext); } else { // Variable is defined in range variable decl => // return its class String schema = context.schemaForVariable(variable); if (schema != null) { clazz = context.classForSchemaName(schema, generationContext); } } } return clazz; }