Example #1
0
        IDbQueryable <T> Intersect <T, TKey>(IDbQueryable <T> source, Expression <Func <T, TKey> > keySelector, List <EncodedValue> set, Dictionary <long, byte[]> cache)
        {
            if (source.LDBTree == null)
            {
                source.LDBTree = new QueryTree();
            }
            var tree = source.LDBTree;

            if (tree.IntersectInfo == null)
            {
                tree.IntersectInfo = new List <IntersectInfo>();
            }
            var info = new IntersectInfo();

            tree.IntersectInfo.Add(info);
            info.Set = set;

            string name = "Id";

            if (keySelector != null)
            {
                var par = keySelector.Parameters.First();
                name = SharedUtils.GetPropertyName(keySelector.Body.ToString());
            }
            var table_info = GetTableInfo(typeof(T).Name);

            info.TableNumber  = table_info.TableNumber;
            info.ColumnNumber = table_info.ColumnNumbers[name];
            info.ColumnType   = table_info.Columns[name];

            source.LDBTree.Prev    = info;
            source.LDBTree.Prev.Id = source.LDBTree.Counter + 1;
            source.LDBTree.Counter++;

            return(source);
        }
Example #2
0
        public List <int> IntersectOne(IntersectInfo info, TableInfo table_info, Dictionary <long, byte[]> cache, ReadOptions ro)
        {
            var result = new List <int>();


            //if (info.Set.Count() > 50)
            //{
            Oper odb = new Oper()
            {
                TableNumber  = info.TableNumber,
                ColumnType   = info.ColumnType,
                ColumnNumber = info.ColumnNumber,
                ColumnName   = table_info.ColumnNumbers.First(f => f.Value == info.ColumnNumber).Key,
                TableName    = table_info.Name
            };

            var skey   = MakeSnapshotKey(table_info.TableNumber, table_info.ColumnNumbers[odb.ColumnName]);
            var snapid = leveld_db.Get(skey, null, ro);

            if (snapid != null)
            {
                var snapshot_id = Encoding.UTF8.GetString(snapid);
                skey   = MakeSnapshotKey(table_info.TableNumber, table_info.ColumnNumbers["Id"]);
                snapid = leveld_db.Get(skey, null, ro);
                string id_snapshot_id = Encoding.UTF8.GetString(snapid);

                var index_res = IntersectWithIndex(odb, info.Set, ro, snapshot_id, id_snapshot_id);
                if (index_res != null)
                {
                    return(index_res);
                }
            }

            foreach (var val in info.Set)
            {
                Oper odb2 = new Oper()
                {
                    TableNumber  = info.TableNumber,
                    ColumnType   = info.ColumnType,
                    ColumnNumber = info.ColumnNumber,
                    ColumnName   = table_info.ColumnNumbers.First(f => f.Value == info.ColumnNumber).Key,
                    TableName    = table_info.Name
                };
                result.AddRange(EqualOperator(odb2, val, table_info, cache, ro, null, null));
            }

            return(result);
            //}

            //foreach (var val in info.Set)
            //{
            //    Oper odb = new Oper()
            //    {
            //        TableNumber = info.TableNumber,
            //        ColumnType = info.ColumnType,
            //        ColumnNumber = info.ColumnNumber,
            //        ColumnName = table_info.ColumnNumbers.First(f => f.Value == info.ColumnNumber).Key,
            //        TableName = table_info.Name
            //    };
            //    result.AddRange(EqualOperator(odb, val, table_info, cache, ro, null, null));
            //}

            //return result;
        }