Package ch.epfl.labos.iu.orm.queryll2.symbolic

Examples of ch.epfl.labos.iu.orm.queryll2.symbolic.TypedValue


      Expression methodExpr = null;
      for (int n = 0; n < where.symbolicAnalysis.paths.size(); n++)
      {
         PathAnalysis path = where.symbolicAnalysis.paths.get(n);

         TypedValue returnVal = PathAnalysisSimplifier
               .simplifyBoolean(path.getReturnValue(), config.getComparisonMethods());
         SymbExPassDown returnPassdown = SymbExPassDown.with(null, true);
         ColumnExpressions<?> returnColumns = returnVal.visit(translator, returnPassdown);
         if (!returnColumns.isSingleColumn())
            throw new QueryTransformException("Expecting single column");
         Expression returnExpr = returnColumns.getOnlyColumn();

         if (returnVal instanceof ConstantValue.BooleanConstant)
View Full Code Here


   {
      if (!("=".equals(opString) || "<>".equals(opString)))
         throw new TypedValueVisitorException("Unhandled operation involving NULL");
      if (leftVal instanceof ConstantValue.NullConstant && rightVal instanceof ConstantValue.NullConstant)
         throw new TypedValueVisitorException("Cannot handle comparisons involving two NULLs");
      TypedValue operandVal;
      if (leftVal instanceof ConstantValue.NullConstant)
         operandVal = rightVal;
      else
         operandVal = leftVal;
      ColumnExpressions<U> operand = (ColumnExpressions<U>)operandVal.visit(this, passdown);
      if ("=".equals(opString))
         return ColumnExpressions.singleColumn(new SimpleRowReader<>(),
               UnaryExpression.postfix("IS NULL", operand.getOnlyColumn()));
      else
         return ColumnExpressions.singleColumn(new SimpleRowReader<>(),
View Full Code Here

                  FunctionExpression.singleParam("ABS", base.getOnlyColumn()));
         }
         else if (sig.equals(MethodChecker.mathSqrt))
         {
            SymbExPassDown passdown = SymbExPassDown.with(val, in.isExpectingConditional);
            TypedValue baseVal = val.args.get(0);
            if (isWideningCast(baseVal))
               baseVal = skipWideningCast(baseVal);
            ColumnExpressions<?> base = baseVal.visit(this, passdown);
            return ColumnExpressions.singleColumn(new SimpleRowReader<>(),
                  FunctionExpression.singleParam("SQRT", base.getOnlyColumn()));
         }
         throw new TypedValueVisitorException("Do not know how to translate the method " + sig + " into a JPQL function");
      }
View Full Code Here

            Condition methodExpr = null;
            for (int n = 0; n < where.symbolicAnalysis.paths.size(); n++)
            {
               PathAnalysis path = where.symbolicAnalysis.paths.get(n);

               TypedValue returnVal = PathAnalysisSimplifier.simplifyBoolean(path.getReturnValue(), Collections.emptyMap());
               ColumnExpressions<?> returnColumns = translator.transform(returnVal);
               if (!returnColumns.isSingleColumn()) throw new IllegalArgumentException("Where lambda should only return a single column of data");
               QueryPart returnExpr = returnColumns.getOnlyColumn();

               if (returnVal instanceof ConstantValue.BooleanConstant)
View Full Code Here

     
      // Check for a cmp operator, and convert it to a direct comparison operator
      if (other instanceof TypedValue.MathOpValue
            && ((TypedValue.MathOpValue)other).op == TypedValue.MathOpValue.Op.cmp)
      {
         TypedValue newLeft = ((TypedValue.MathOpValue)other).left;
         TypedValue newRight = ((TypedValue.MathOpValue)other).right;
         return new TypedValue.ComparisonValue(op, newLeft, newRight);
      }
     
      return val;
   }
View Full Code Here

         case le: newOp = ComparisonOp.ge; break;
         case lt: newOp = ComparisonOp.gt; break;
         default:
            throw new IllegalArgumentException("Unknown comparison operator");
         }
         TypedValue toReturn = comparisonOpValueWithZero(val, newOp, val.right);
         if (toReturn != val) return toReturn;
      }
      if (val.right instanceof ConstantValue.IntegerConstant
            && ((ConstantValue.IntegerConstant)val.right).val == 0)
      {
         TypedValue toReturn = comparisonOpValueWithZero(val, val.compOp, val.left);
         if (toReturn != val) return toReturn;
      }
     
      return super.comparisonOpValue(val, in);
   }
View Full Code Here

        
         // Extract the lambda used
         LambdaAnalysis lambda = null;
         if (val.args.size() > 0)
         {
            TypedValue arg = val.args.get(0);
            if ((arg instanceof LambdaFactory))
            {
               LambdaFactory lambdaFactory = (LambdaFactory)arg;
               try {
                  lambda = LambdaAnalysis.analyzeMethod(config.metamodel, config.alternateClassLoader, config.isObjectEqualsSafe, lambdaFactory.getLambdaMethod(), lambdaFactory.getCapturedArgs(), true);
View Full Code Here

        
         // Extract the lambda used
         LambdaAnalysis lambda = null;
         if (val.args.size() > 0)
         {
            TypedValue arg = val.args.get(0);
            if (arg instanceof LambdaFactory)
            {
               LambdaFactory lambdaFactory = (LambdaFactory)arg;
               try {
                  lambda = LambdaAnalysis.analyzeMethod(config.metamodel, config.alternateClassLoader, config.isObjectEqualsSafe,
View Full Code Here

   @Override public SQLColumnValues castValue(TypedValue.CastValue val, T in) throws TypedValueVisitorException
   {
      // Check if cast is consistent with the reader
      SQLColumnValues toReturn = val.operand.visit(this, in);
      if (!toReturn.reader.isCastConsistent(val.getType().getInternalName()))
         throw new TypedValueVisitorException("Attempting to cast to an inconsistent type");
      return toReturn;
   }
View Full Code Here

         return base;
      }
      else if (entityInfo.dbSetMethods.contains(sig))
      {
         if (lambdaContext.joins == null)
            throw new TypedValueVisitorException("Need a join handler here for subqueries just in case there's an embedded navigational query: " + val);
         // TODO: Handle checking out the constructor and verifying how
         // parameters pass through the constructor
         SQLQuery subQuery = val.base.visit(subQueryHandler, in);
         if (sig.equals(TransformationClassAnalyzer.dbsetSumInt)
               || sig.equals(TransformationClassAnalyzer.dbsetMaxInt))
         {
            // TODO: do subqueries need to be copied before being passed in here?
            SQLQuery<Integer> newQuery = null;
            if (sig.equals(TransformationClassAnalyzer.dbsetSumInt))
               newQuery = queryMethodHandler.sumInt(subQuery, val.args.get(0), lambdaContext.joins.getEntityManager());
            else if (sig.equals(TransformationClassAnalyzer.dbsetMaxInt))
               newQuery = queryMethodHandler.maxInt(subQuery, val.args.get(0), lambdaContext.joins.getEntityManager());
            if (newQuery == null) throw new TypedValueVisitorException("Could not decode a subquery " + val);
            if (newQuery instanceof SQLQuery.InternalGroup)
            {
               SQLQuery.InternalGroup<Integer> agg = (SQLQuery.InternalGroup<Integer>)newQuery;
               // TODO: This is probably correct but potentially bogus.
               // It should be thought through a bit more wrt what InternalGroup
               // means and whether that is sufficient to allow us to do this
               assert(agg.reader instanceof SQLReader.IntegerSQLReader);
               SQLColumnValues<Integer> toReturn = new SQLColumnValues<Integer>(agg.reader);
               toReturn.columns[0] = agg.columns.get(0);
               return toReturn;
            }
            else if (newQuery instanceof SQLQuery.SelectFromWhere)
            {
               SQLQuery.SelectFromWhere<Integer> subquery = (SQLQuery.SelectFromWhere<Integer>)newQuery;
               assert(subquery.reader instanceof SQLReader.IntegerSQLReader);
               SQLColumnValues<Integer> toReturn = new SQLColumnValues<Integer>(subquery.reader);
               toReturn.columns[0].add(new SQLSubstitution.ScalarSelectFromWhereSubQuery(subquery));
               return toReturn;
            }
            else
               throw new TypedValueVisitorException("Unhandled nesting of a query");
         }
         // TODO: Implement other aggregation functions
         throw new TypedValueVisitorException("Unhandled DBSet operation");
      }
      else if (entityInfo.N111Methods.containsKey(sig))
      {
         SQLColumnValues base = val.base.visit(this, in);
         ORMInformation.N111NavigationalLink link = entityInfo.N111Methods.get(sig);
         if (lambdaContext.joins == null)
            throw new TypedValueVisitorException("Cannot handle navigational queries in this context: " + val);
         assert(link.joinInfo.size() == 1);
         // See if we've already done this join and can reuse it
         List<SQLFragment> fromKey = new ArrayList<SQLFragment>();
         for (int n = 0; n < link.joinInfo.get(0).fromColumns.size(); n++)
         {
            String fromCol = link.joinInfo.get(0).fromColumns.get(n);
            int fromColIdx = base.reader.getColumnIndexForColumnName(fromCol);
            if (fromColIdx < 0) throw new TypedValueVisitorException("Cannot find column for navigational query: " + val);
            fromKey.add(base.getColumn(fromColIdx));
         }
         SQLSubstitution.FromReference from = lambdaContext.joins.findExistingJoin(link.fromEntity, link.name, fromKey);
         if (from == null)
         {
            from = lambdaContext.joins.addFrom(link.joinInfo.get(0).toTableName);
            for (int n = 0; n < link.joinInfo.get(0).fromColumns.size(); n++)
            {
               SQLFragment where = new SQLFragment();
               String fromCol = link.joinInfo.get(0).fromColumns.get(n);
               String toCol = link.joinInfo.get(0).toColumns.get(n);
               int fromColIdx = base.reader.getColumnIndexForColumnName(fromCol);
               if (fromColIdx < 0) throw new TypedValueVisitorException("Cannot find column for navigational query: " + val);
               where.add("(");
               where.add(base.getColumn(fromColIdx));
               where.add(") = (");
               where.add(from);
               where.add("." + toCol);
View Full Code Here

TOP

Related Classes of ch.epfl.labos.iu.orm.queryll2.symbolic.TypedValue

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.