Пример #1
0
 public static Net.Vpc.Upa.Impl.Util.ExprTypeInfo ResolveExprTypeInfo(Net.Vpc.Upa.Impl.Uql.Compiledexpression.DefaultCompiledExpression e, bool byBrother)
 {
     if (e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarOrMethod)
     {
         e = ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarOrMethod)e).GetFinest();
         object r = ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarOrMethod)e).GetReferrer();
         if (r is Net.Vpc.Upa.Field)
         {
             Net.Vpc.Upa.Types.DataTypeTransform tr = GetTypeTransformOrIdentity(((Net.Vpc.Upa.Field)r));
             Net.Vpc.Upa.Impl.Util.ExprTypeInfo  i  = new Net.Vpc.Upa.Impl.Util.ExprTypeInfo();
             i.SetReferrer(r);
             i.SetTransform(tr);
             if (e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVar)
             {
                 Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVar cv = (Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVar)e;
                 i.SetOldReferrer(cv.GetOldReferrer());
             }
             return(i);
         }
     }
     if (e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarVal)
     {
         Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarOrMethod v = ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarVal)e).GetVar();
         return(ResolveExprTypeInfo(v));
     }
     Net.Vpc.Upa.Types.DataTypeTransform typeTransform = e.GetTypeTransform();
     if (e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledParam || e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledLiteral)
     {
         Net.Vpc.Upa.Impl.Uql.Compiledexpression.DefaultCompiledExpression p = e.GetParentExpression();
         if (p is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledVarVal)
         {
             return(ResolveExprTypeInfo(p));
         }
         else
         {
             object @object = (e is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledParam) ? ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledParam)e).GetValue() : ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledLiteral)e).GetValue();
             Net.Vpc.Upa.Types.DataType          sourceType = typeTransform.GetSourceType();
             Net.Vpc.Upa.Types.DataTypeTransform bestType   = typeTransform;
             if ((p is Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledBinaryOperatorExpression) && (((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledBinaryOperatorExpression)p).IsSameOperandsType()))
             {
                 Net.Vpc.Upa.Impl.Uql.Compiledexpression.DefaultCompiledExpression o = ((Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledBinaryOperatorExpression)p).GetOther(e);
                 if (byBrother)
                 {
                     return(ResolveExprTypeInfo(o, false));
                 }
             }
             if (@object != null && (typeTransform.Equals(Net.Vpc.Upa.Impl.Transform.IdentityDataTypeTransform.OBJECT) || !sourceType.IsInstance(@object)))
             {
                 bestType = Net.Vpc.Upa.Impl.Transform.IdentityDataTypeTransform.ForNativeType(@object.GetType());
             }
             Net.Vpc.Upa.Impl.Util.ExprTypeInfo typeInfo1 = new Net.Vpc.Upa.Impl.Util.ExprTypeInfo();
             typeInfo1.SetTransform(bestType);
             return(typeInfo1);
         }
     }
     Net.Vpc.Upa.Impl.Util.ExprTypeInfo typeInfo2 = new Net.Vpc.Upa.Impl.Util.ExprTypeInfo();
     typeInfo2.SetTransform(typeTransform);
     return(typeInfo2);
 }
Пример #2
0
        public override string GetSQL(object oo, Net.Vpc.Upa.Persistence.EntityExecutionContext qlContext, Net.Vpc.Upa.Impl.Persistence.SQLManager sqlManager, Net.Vpc.Upa.Impl.Uql.ExpressionDeclarationList declarations)
        {
            Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledLiteral o = (Net.Vpc.Upa.Impl.Uql.Compiledexpression.CompiledLiteral)oo;
            Net.Vpc.Upa.Impl.Util.ExprTypeInfo ei = Net.Vpc.Upa.Impl.Util.UPAUtils.ResolveExprTypeInfo(o);
            object objectValue = o.GetValue();

            Net.Vpc.Upa.Types.DataTypeTransform d = null;
            if (ei.GetOldReferrer() != null)
            {
                Net.Vpc.Upa.Field oldField = (Net.Vpc.Upa.Field)ei.GetOldReferrer();
                if (oldField.GetDataType() is Net.Vpc.Upa.Types.ManyToOneType)
                {
                    Net.Vpc.Upa.Types.ManyToOneType et = (Net.Vpc.Upa.Types.ManyToOneType)oldField.GetDataType();
                    objectValue = et.GetRelationship().GetTargetEntity().GetBuilder().ObjectToId(objectValue);
                }
            }
            else if (ei.GetReferrer() != null && ei.GetReferrer() is Net.Vpc.Upa.Field)
            {
                Net.Vpc.Upa.Field field = (Net.Vpc.Upa.Field)ei.GetReferrer();
                if (field.GetDataType() is Net.Vpc.Upa.Types.ManyToOneType)
                {
                    Net.Vpc.Upa.Types.ManyToOneType et = (Net.Vpc.Upa.Types.ManyToOneType)field.GetDataType();
                    objectValue = et.GetRelationship().GetTargetEntity().GetBuilder().ObjectToId(objectValue);
                    System.Collections.Generic.IList <Net.Vpc.Upa.Field> tf = et.GetRelationship().GetTargetEntity().GetPrimaryFields();
                    if ((tf).Count != 1)
                    {
                        throw new System.ArgumentException("Unsupported");
                    }
                    d = Net.Vpc.Upa.Impl.Util.UPAUtils.GetTypeTransformOrIdentity(tf[0]);
                }
            }
            if (d == null)
            {
                d = o.GetEffectiveDataType();
            }
            Net.Vpc.Upa.Impl.Persistence.TypeMarshaller mm = sqlManager.GetMarshallManager().GetTypeMarshaller(d);
            return(mm.ToSQLLiteral(objectValue));
        }