Esempio n. 1
0
        public ValuesQueryResultAction(NeoDatis.Odb.Core.Query.IValuesQuery query, NeoDatis.Odb.Core.Layers.Layer3.IStorageEngine
                                       storageEngine, NeoDatis.Odb.Core.Layers.Layer2.Instance.IInstanceBuilder instanceBuilder
                                       ) : base()
        {
            this.engine          = storageEngine;
            this.query           = query;
            this.queryHasOrderBy = query.HasOrderBy();
            this.instanceBuilder = instanceBuilder;
            this.returnArraySize = query.GetObjectActions().Count;
            System.Collections.IEnumerator iterator = query.GetObjectActions().GetEnumerator(
                );
            NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction qfa = null;
            queryFieldActions = new NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction[returnArraySize
                                ];
            int i = 0;

            while (iterator.MoveNext())
            {
                qfa = (NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction)iterator.Current;
                queryFieldActions[i] = qfa.Copy();
                queryFieldActions[i].SetReturnInstance(query.ReturnInstance());
                queryFieldActions[i].SetInstanceBuilder(instanceBuilder);
                i++;
            }
        }
Esempio n. 2
0
 public virtual void End()
 {
     NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction          qfa = null;
     NeoDatis.Odb.Impl.Core.Query.List.Values.DefaultObjectValues dov = null;
     if (!query.IsMultiRow())
     {
         dov = new NeoDatis.Odb.Impl.Core.Query.List.Values.DefaultObjectValues(returnArraySize
                                                                                );
     }
     for (int i = 0; i < returnArraySize; i++)
     {
         qfa = queryFieldActions[i];
         qfa.End();
         if (!query.IsMultiRow())
         {
             object o = qfa.GetValue();
             // When Values queries return objects, they actually return the oid of the object
             // So we must load it here
             if (o != null && o is NeoDatis.Odb.OID)
             {
                 NeoDatis.Odb.Impl.Core.Oid.OdbObjectOID oid = (NeoDatis.Odb.Impl.Core.Oid.OdbObjectOID
                                                                )o;
                 o = engine.GetObjectFromOid(oid);
             }
             // Sets the values now
             dov.Set(i, qfa.GetAlias(), o);
         }
     }
     if (!query.IsMultiRow())
     {
         result.Add(dov);
     }
 }
Esempio n. 3
0
 public virtual void Start()
 {
     if (query != null && query.HasOrderBy())
     {
         result = new NeoDatis.Odb.Impl.Core.Query.List.Values.InMemoryBTreeCollectionForValues
                      ((int)nbObjects, query.GetOrderByType());
     }
     else
     {
         result = new NeoDatis.Odb.Impl.Core.Query.List.Values.SimpleListForValues((int)nbObjects
                                                                                   );
     }
     NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction qfa = null;
     for (int i = 0; i < returnArraySize; i++)
     {
         qfa = queryFieldActions[i];
         qfa.Start();
     }
 }
Esempio n. 4
0
        public virtual bool IsMultiRow()
        {
            bool isMultiRow = true;

            NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction oa = null;
            // Group by protection
            // When a group by with one field exist in the query, FieldObjectAction with this field must be set to SingleRow
            bool   groupBy         = hasGroupBy && groupByFieldList.Length == 1;
            string oneGroupByField = null;

            System.Collections.Generic.IEnumerator <NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction
                                                    > iterator = objectActions.GetEnumerator();
            if (groupBy)
            {
                oneGroupByField = groupByFieldList[0];
                while (iterator.MoveNext())
                {
                    oa = iterator.Current;
                    if (oa is NeoDatis.Odb.Impl.Core.Query.Values.FieldValueAction && oa.GetAttributeName
                            ().Equals(oneGroupByField))
                    {
                        oa.SetMultiRow(false);
                    }
                }
            }
            iterator = objectActions.GetEnumerator();
            if (iterator.MoveNext())
            {
                oa         = iterator.Current;
                isMultiRow = oa.IsMultiRow();
            }
            while (iterator.MoveNext())
            {
                oa = iterator.Current;
                if (isMultiRow != oa.IsMultiRow())
                {
                    throw new NeoDatis.Odb.ODBRuntimeException(NeoDatis.Odb.Core.NeoDatisError.ValuesQueryNotConsistent
                                                               .AddParameter(this));
                }
            }
            return(isMultiRow);
        }
Esempio n. 5
0
 private NeoDatis.Odb.ObjectValues ConvertObject(NeoDatis.Odb.Core.Layers.Layer2.Meta.AttributeValuesMap
                                                 values)
 {
     NeoDatis.Odb.Impl.Core.Query.List.Values.DefaultObjectValues dov = new NeoDatis.Odb.Impl.Core.Query.List.Values.DefaultObjectValues
                                                                            (returnArraySize);
     NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction qfa = null;
     for (int i = 0; i < returnArraySize; i++)
     {
         qfa = queryFieldActions[i];
         qfa.Execute(values.GetObjectInfoHeader().GetOid(), values);
         object o = qfa.GetValue();
         // When Values queries return objects, they actually return the oid of the object
         // So we must load it here
         if (o != null && o is NeoDatis.Odb.OID)
         {
             NeoDatis.Odb.Impl.Core.Oid.OdbObjectOID oid = (NeoDatis.Odb.Impl.Core.Oid.OdbObjectOID
                                                            )o;
             o = engine.GetObjectFromOid(oid);
         }
         dov.Set(i, qfa.GetAlias(), o);
     }
     return(dov);
 }
Esempio n. 6
0
        /// <summary>Returns the list of involved fields for this query.</summary>
        /// <remarks>
        /// Returns the list of involved fields for this query. List of String
        /// <pre>
        /// If query must return sum("value") and field("name"), involvedField will contain "value","name"
        /// </pre>
        /// </remarks>
        public override NeoDatis.Tool.Wrappers.List.IOdbList <string> GetAllInvolvedFields
            ()
        {
            NeoDatis.Tool.Wrappers.List.IOdbList <string> l = new NeoDatis.Tool.Wrappers.List.OdbArrayList
                                                              <string>();
            // To check field duplicity
            System.Collections.Generic.IDictionary <string, string> map = new NeoDatis.Tool.Wrappers.Map.OdbHashMap
                                                                          <string, string>();
            l.AddAll(base.GetAllInvolvedFields());
            if (!l.IsEmpty())
            {
                for (int i = 0; i < l.Count; i++)
                {
                    map.Add(l[i], l[i]);
                }
            }
            System.Collections.Generic.IEnumerator <NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction
                                                    >           iterator = objectActions.GetEnumerator();
            NeoDatis.Odb.Core.Query.Execution.IQueryFieldAction oa       = null;
            string name = null;

            while (iterator.MoveNext())
            {
                oa = iterator.Current;
                if (oa.GetType() != typeof(NeoDatis.Odb.Impl.Core.Query.Values.CountAction))
                {
                    name = oa.GetAttributeName();
                    if (!map.ContainsKey(name))
                    {
                        l.Add(name);
                        map.Add(name, name);
                    }
                }
            }
            if (hasGroupBy)
            {
                for (int i = 0; i < groupByFieldList.Length; i++)
                {
                    name = groupByFieldList[i];
                    if (!map.ContainsKey(name))
                    {
                        l.Add(name);
                        map.Add(name, name);
                    }
                }
            }
            if (HasOrderBy())
            {
                for (int i = 0; i < orderByFields.Length; i++)
                {
                    name = orderByFields[i];
                    if (!map.ContainsKey(name))
                    {
                        l.Add(name);
                        map.Add(name, name);
                    }
                }
            }
            map.Clear();
            map = null;
            return(l);
        }