Ejemplo n.º 1
0
 public virtual object CreateResult(Net.Vpc.Upa.Impl.Persistence.Result.ResultColumn[] row, Net.Vpc.Upa.Persistence.ResultMetaData metadata)
 {
     System.Collections.Generic.IList <Net.Vpc.Upa.Persistence.ResultField> fields = metadata.GetFields();
     Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData d = (Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData)metadata;
     string[] bindings = (string[])Net.Vpc.Upa.Impl.FwkConvertUtils.GetMapValue <string, object>(d.GetProperties(), CACHE_KEY);
     if (bindings == null)
     {
         bindings = new string[(fields).Count];
         for (int i = 0; i < (fields).Count; i++)
         {
             Net.Vpc.Upa.Persistence.ResultField field = fields[i];
             Net.Vpc.Upa.Expressions.Expression  ss    = field.GetExpression();
             string binding = ss == null ? "null" : ss.ToString();
             bindings[i] = binding;
         }
         d.GetProperties()[CACHE_KEY] = bindings;
     }
     if ((fields).Count == 1)
     {
         string binding = bindings[0];
         return(row[0].GetValue());
     }
     else
     {
         object[] allRet = new object[(fields).Count];
         for (int i = 0; i < allRet.Length; i++)
         {
             allRet[i] = row[i].GetValue();
         }
         return(allRet);
     }
 }
 public virtual object CreateResult(Net.Vpc.Upa.Impl.Persistence.Result.ResultColumn[] row, Net.Vpc.Upa.Persistence.ResultMetaData metadata)
 {
     System.Collections.Generic.IList <Net.Vpc.Upa.Persistence.ResultField> fields = metadata.GetFields();
     Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData d = (Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData)metadata;
     string[][] preferredNameAndBinding = (string[][])Net.Vpc.Upa.Impl.FwkConvertUtils.GetMapValue <string, object>(d.GetProperties(), CACHE_KEY);
     if (preferredNameAndBinding == null)
     {
         preferredNameAndBinding = (string[][])Net.Vpc.Upa.Impl.FwkConvertUtils.CreateMultiArray(typeof(string), (fields).Count, 2);
         for (int i = 0; i < (fields).Count; i++)
         {
             Net.Vpc.Upa.Persistence.ResultField field = fields[i];
             Net.Vpc.Upa.Expressions.Expression  ss    = field.GetExpression();
             string binding       = ss == null ? "null" : ss.ToString();
             string preferredName = binding;
             if (preferredName.IndexOf('.') >= 0)
             {
                 preferredName = preferredName.Substring(preferredName.LastIndexOf('.') + 1);
             }
             string alias = field.GetAlias();
             if (!Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(alias))
             {
                 preferredName = alias;
             }
             preferredNameAndBinding[i][0] = preferredName;
             preferredNameAndBinding[i][1] = binding;
         }
         d.GetProperties()[CACHE_KEY] = preferredNameAndBinding;
     }
     if ((fields).Count == 1 && row[0].GetValue() is Net.Vpc.Upa.Record)
     {
         return(row[0].GetValue());
     }
     Net.Vpc.Upa.Record r = new Net.Vpc.Upa.Impl.DefaultRecord();
     for (int i = 0; i < (fields).Count; i++)
     {
         string preferredName = preferredNameAndBinding[i][0];
         r.SetObject(preferredName, row[i].GetValue());
     }
     return(r);
 }
 public virtual Net.Vpc.Upa.Persistence.ResultMetaData CreateResultMetaData(Net.Vpc.Upa.Expressions.Expression baseExpression, Net.Vpc.Upa.Filters.FieldFilter fieldFilter, System.Collections.Generic.IList <Net.Vpc.Upa.Expressions.QueryStatement> context)
 {
     baseExpression = Net.Vpc.Upa.Impl.Uql.Util.UQLUtils.ParseUserExpressions(baseExpression, pu);
     Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData m = new Net.Vpc.Upa.Impl.Persistence.DefaultResultMetaData();
     if (baseExpression is Net.Vpc.Upa.Expressions.NonQueryStatement)
     {
         m.SetStatement((Net.Vpc.Upa.Expressions.EntityStatement)baseExpression);
         m.AddField(new Net.Vpc.Upa.Impl.Persistence.DefaultResultField(null, "result", Net.Vpc.Upa.Types.TypesFactory.INT, null, null));
         return(m);
     }
     else
     {
         Net.Vpc.Upa.Expressions.QueryStatement q = (Net.Vpc.Upa.Expressions.QueryStatement)baseExpression;
         if (q is Net.Vpc.Upa.Expressions.Select)
         {
             Net.Vpc.Upa.Expressions.Select qs = (Net.Vpc.Upa.Expressions.Select)q;
             if ((qs.GetFields()).Count == 0)
             {
                 if (!Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(qs.GetEntityAlias()))
                 {
                     qs.Field(new Net.Vpc.Upa.Expressions.Var(qs.GetEntityAlias()));
                 }
                 else if (qs.GetEntityName() != null)
                 {
                     qs.Field(new Net.Vpc.Upa.Expressions.Var(qs.GetEntityName()));
                 }
                 else
                 {
                     throw new Net.Vpc.Upa.Exceptions.UPAException("MissingAlias");
                 }
                 foreach (Net.Vpc.Upa.Expressions.JoinCriteria joinCriteria in qs.GetJoins())
                 {
                     if (!Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(joinCriteria.GetEntityAlias()))
                     {
                         qs.Field(new Net.Vpc.Upa.Expressions.Var(joinCriteria.GetEntityAlias()));
                     }
                     else if (joinCriteria.GetEntityName() != null)
                     {
                         qs.Field(new Net.Vpc.Upa.Expressions.Var(joinCriteria.GetEntityName()));
                     }
                     else
                     {
                         throw new Net.Vpc.Upa.Exceptions.UPAException("MissingAlias");
                     }
                 }
             }
             System.Collections.Generic.IList <Net.Vpc.Upa.Expressions.QueryField>     oldFields  = new System.Collections.Generic.List <Net.Vpc.Upa.Expressions.QueryField>(q.GetFields());
             System.Collections.Generic.IList <Net.Vpc.Upa.Expressions.QueryField>     newFields  = new System.Collections.Generic.List <Net.Vpc.Upa.Expressions.QueryField>();
             System.Collections.Generic.IList <Net.Vpc.Upa.Persistence.ResultField>    newResults = new System.Collections.Generic.List <Net.Vpc.Upa.Persistence.ResultField>();
             System.Collections.Generic.IList <Net.Vpc.Upa.Expressions.QueryStatement> context2   = new System.Collections.Generic.List <Net.Vpc.Upa.Expressions.QueryStatement>();
             Net.Vpc.Upa.Impl.FwkConvertUtils.ListAddRange(context2, context);
             context2.Add(q);
             foreach (Net.Vpc.Upa.Expressions.QueryField f in oldFields)
             {
                 Net.Vpc.Upa.Expressions.Expression expression = f.GetExpression();
                 string oldAlias = f.GetAlias();
                 System.Collections.Generic.IList <Net.Vpc.Upa.Persistence.ResultField> newVal = CreateResultFields(expression, oldAlias, fieldFilter, context2);
                 Net.Vpc.Upa.Impl.FwkConvertUtils.ListAddRange(newResults, newVal);
                 if ((newVal).Count == 0)
                 {
                 }
                 else if ((newVal).Count == 1)
                 {
                     f.SetExpression(newVal[0].GetExpression());
                     f.SetAlias(Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(oldAlias) ? oldAlias : newVal[0].GetAlias());
                     newFields.Add(f);
                 }
                 else
                 {
                     foreach (Net.Vpc.Upa.Persistence.ResultField nf in newVal)
                     {
                         Net.Vpc.Upa.Expressions.QueryField f2 = new Net.Vpc.Upa.Expressions.QueryField(Net.Vpc.Upa.Impl.Util.StringUtils.IsNullOrEmpty(oldAlias) ? oldAlias : nf.GetAlias(), nf.GetExpression());
                         newFields.Add(f2);
                     }
                 }
             }
             qs.ClearFields();
             foreach (Net.Vpc.Upa.Expressions.QueryField newField in newFields)
             {
                 qs.Field(newField);
             }
             m.SetStatement(qs);
             foreach (Net.Vpc.Upa.Persistence.ResultField newResult in newResults)
             {
                 m.AddField(newResult);
             }
         }
         else if (q is Net.Vpc.Upa.Expressions.Union)
         {
             System.Collections.Generic.IList <Net.Vpc.Upa.Expressions.QueryStatement> context2 = new System.Collections.Generic.List <Net.Vpc.Upa.Expressions.QueryStatement>();
             Net.Vpc.Upa.Impl.FwkConvertUtils.ListAddRange(context2, context);
             context2.Add(q);
             Net.Vpc.Upa.Expressions.Union         u0     = (Net.Vpc.Upa.Expressions.Union)q;
             Net.Vpc.Upa.Expressions.Union         u      = new Net.Vpc.Upa.Expressions.Union();
             Net.Vpc.Upa.Persistence.ResultField[] fields = null;
             foreach (Net.Vpc.Upa.Expressions.QueryStatement qs in u0.GetQueryStatements())
             {
                 Net.Vpc.Upa.Persistence.ResultMetaData resultMetaData = CreateResultMetaData(qs, fieldFilter, context2);
                 u.Add((Net.Vpc.Upa.Expressions.QueryStatement)resultMetaData.GetStatement());
                 System.Collections.Generic.IList <Net.Vpc.Upa.Persistence.ResultField> f = resultMetaData.GetFields();
                 if (fields == null)
                 {
                     fields = f.ToArray();
                 }
                 else
                 {
                     if (fields.Length != (f).Count)
                     {
                         throw new Net.Vpc.Upa.Exceptions.UPAException("InvalidUnion");
                     }
                     for (int i = 0; i < fields.Length; i++)
                     {
                         fields[i] = Merge(fields[i], f[i]);
                     }
                 }
             }
             m.SetStatement(u);
             if (fields != null)
             {
                 foreach (Net.Vpc.Upa.Persistence.ResultField field in fields)
                 {
                     m.AddField(field);
                 }
             }
         }
         else
         {
             throw new System.Exception();
         }
     }
     return(m);
 }