public IdCopy(IdSet x, EvalEnv ee)
 {
     foreach (long id in x.All(ee))
     {
         Copy.Add(id);
     }
 }
Beispiel #2
0
        public void ExecDelete(Exp where, bool[] used, EvalEnv ee)
        {
            Value [] tr = new Value[Cols.Count];
            ee.Row = tr;

            IdSet IdSet = where == null ? null : where.GetIdSet(this, ee);

            if (IdSet == null)
            {
                IdSet = new UpTo(RowCount);
            }
            else
            {
                IdSet = new IdCopy(IdSet, ee); // Need to take a copy of the id values, as indexes may be updated.
            }
            foreach (long id in IdSet.All(ee))
            {
                if (Get(id, tr, null))
                {
                    if (where == null || (where.Eval(ee).B))
                    {
                        Delete(id, tr);
                    }
                }
            }
        }
Beispiel #3
0
 public override G.IEnumerable <long> All(EvalEnv ee)
 {
     G.SortedSet <long> copy = new G.SortedSet <long>();
     foreach (long id in X.All(ee))
     {
         copy.Add(id);
     }
     foreach (long id in copy)
     {
         yield return(id);
     }
 }
Beispiel #4
0
        public void ExecUpdate(Assign[] a, Exp where, bool [] used, int idCol, EvalEnv ee)
        {
            Value [] tr = new Value[Cols.Count];
            Value [] nr = new Value[Cols.Count]; // The new row.
            ee.Row = tr;

            IdSet IdSet = where == null ? null : where.GetIdSet(this, ee);

            if (IdSet == null)
            {
                IdSet = new UpTo(RowCount);
            }
            else
            {
                IdSet = new IdCopy(IdSet, ee); // Need to take a copy of the id values if an index is used.
            }
            foreach (long id in IdSet.All(ee))
            {
                if (Get(id, tr, null))
                {
                    for (int i = 0; i < nr.Length; i += 1)
                    {
                        nr[i] = tr[i];
                    }

                    if (where == null || (where.Eval(ee).B))
                    {
                        for (int i = 0; i < a.Length; i += 1)
                        {
                            int ix = a[i].Lhs.ColIx;
                            nr[ix] = a[i].Rhs.Eval(ee);
                        }
                        if (idCol >= 0 && nr[idCol].L != id)
                        {
                            Delete(id, tr);
                            Insert(nr, idCol);
                        }
                        else
                        {
                            Update(id, tr, nr);
                        }
                    }
                }
            }
        }