Beispiel #1
0
        public int DeleteRows(string relex)
        {
            var relexParser = new RelExParser();
            var q           = relexParser.Parse(relex);

            return(StorageDalc.Delete(q));
        }
Beispiel #2
0
        public void test_RelexVar()
        {
            var relExParser = new RelExParser();
            var cnd         = relExParser.ParseCondition("\"hey:%{0}\":var = \"hey\" ");

            Assert.IsTrue(cnd is QueryConditionNode);
            Assert.IsTrue(((QueryConditionNode)cnd).LValue is QVar);
            ((QVar)((QueryConditionNode)cnd).LValue).Set("yeh");

            Assert.AreEqual("\"%yeh\"=\"hey\"", new RelexBuilder().BuildRelex(cnd));
        }
Beispiel #3
0
        public void test_Parse()
        {
            RelExParser relExParser = new RelExParser();
            // generate SQL by query
            SqlClientDalcFactory factory      = new SqlClientDalcFactory();
            DbCommandGenerator   cmdGenerator = new DbCommandGenerator(factory);

            for (int i = 0; i < oldRelExSamples.Length; i++)
            {
                string     relEx = oldRelExSamples[i];
                Query      q     = relExParser.Parse(relEx);
                IDbCommand cmd   = cmdGenerator.ComposeSelect(q);

                Assert.AreEqual(oldRelExCommandTexts[i], cmd.CommandText, "Parse failed: " + i.ToString());
            }

            for (int i = 0; i < relExSamples.Length; i++)
            {
                string     relEx = relExSamples[i];
                Query      q     = relExParser.Parse(relEx);
                IDbCommand cmd   = cmdGenerator.ComposeSelect(q);

                Assert.AreEqual(relExCommandTexts[i], cmd.CommandText, "Parse failed: " + i.ToString());
            }

            // test for named nodes
            string relexWithNamedNodes = @"users( (<idGroup> id=null and id!=null) and (<ageGroup> age>5 or age<2) and (<emptyGroup>) )[count(*)]";
            Query  qWithGroups         = relExParser.Parse(relexWithNamedNodes);

            Assert.AreNotEqual(null, FindNodeByName(qWithGroups.Condition, "idGroup"), "named group not found");
            Assert.AreNotEqual(null, FindNodeByName(qWithGroups.Condition, "ageGroup"), "named group not found");
            Assert.AreNotEqual(null, FindNodeByName(qWithGroups.Condition, "emptyGroup"), "named group not found");

            // just a parse test for real complex relex
            string sss = "sourcename( ( ((\"False\"=\"True\") or (\"False\"=\"True\")) and \"contact-of\" in agent_to_agent_role( left_uid in agent_accounts(agent_accounts.id=\"\")[agent_id] and (right_uid=agent_institutions.id) )[role_uid] ) or ( ((agent_institutions.id in events( events.id in event_assignments( person_id in agent_accounts (agent_accounts.id=\"\")[agent_id] )[event_id] )[client_institution_id]) or (agent_institutions.id in events( events.id in event_assignments( person_id in agent_accounts (agent_accounts.id=\"\")[agent_id] )[event_id] )[supplier_institution_id])) and (\"False\"=\"True\") ) or ( (agent_institutions.id in agent_to_agent_role( (left_uid in agent_to_agent_role( left_uid in agent_accounts(agent_accounts.id=\"\")[agent_id] and role_uid='contact-of' )[right_uid]) and role_uid='supplier-of')[right_uid] ) or (agent_institutions.id in events( events.supplier_institution_id in agent_to_agent_role( (agent_to_agent_role.role_uid='contact-of') and (agent_to_agent_role.left_uid in agent_accounts(agent_accounts.id=\"\")[agent_id]) )[agent_to_agent_role.right_uid] )[events.client_institution_id]) or (agent_institutions.id in events( events.client_institution_id in agent_to_agent_role( (agent_to_agent_role.role_uid='contact-of') and (agent_to_agent_role.left_uid in agent_accounts(agent_accounts.id=\"\")[agent_id]) )[agent_to_agent_role.right_uid] )[events.supplier_institution_id]) ) or (\"False\"=\"True\") or ( (\"False\"=\"True\") and (agent_institutions.id in agent_to_agent_role( role_uid='supplier-of' and right_uid = \"\" )[left_uid]) ) or (\"False\"=\"True\") )[*]";

            relExParser.Parse(sss);


            var complexSortAndFields = "users.u( u.id=1 )[\"name+','\";id asc,id desc,\"sum(id)\"]";
            var complexQ             = relExParser.Parse(complexSortAndFields);

            Assert.AreEqual(1, complexQ.Fields.Length);
            Assert.AreEqual(3, complexQ.Sort.Length);

            Assert.Catch <RelExParseException>(() => {
                relExParser.Parse("users[id");
            });
        }
Beispiel #4
0
        public LoadValuesResult LoadValues(string relex, bool totalcount)
        {
            var res         = new LoadValuesResult();
            var relexParser = new RelExParser();
            var q           = relexParser.Parse(relex);

            var fldMapping = new FieldMapping(q.Fields);

            q.Fields = fldMapping.GetCompactFields();

            if (totalcount)
            {
                res.TotalCount = StorageDalc.RecordsCount(q);
            }

            var cols = new List <string>();
            var data = new List <object[]>();

            StorageDalc.ExecuteReader(q, (reader) => {
                for (int i = 0; i < q.StartRecord; i++)
                {
                    reader.Read();                     // skip first N records
                }
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    var fName = reader.GetName(i);
                    cols.Add(fldMapping.GetOriginalFieldName(fName));
                }

                while (reader.Read() && data.Count < q.RecordCount)
                {
                    var values = new object[reader.FieldCount];
                    reader.GetValues(values);
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        if (DBNull.Value.Equals(values[i]))
                        {
                            values[i] = null;
                        }
                    }
                    data.Add(values);
                }
            });
            res.Columns = cols.ToArray();
            res.Data    = data;
            return(res);
        }
Beispiel #5
0
        public LoadRowsResult LoadRows(string relex, bool totalcount)
        {
            var res         = new LoadRowsResult();
            var relexParser = new RelExParser();
            var q           = relexParser.Parse(relex);

            var fldMapping = new FieldMapping(q.Fields);

            q.Fields = fldMapping.GetCompactFields();

            if (totalcount)
            {
                res.TotalCount = StorageDalc.RecordsCount(q);
            }

            var data = new RowList();

            StorageDalc.ExecuteReader(q, (reader) => {
                for (int i = 0; i < q.StartRecord; i++)
                {
                    reader.Read();                     // skip first N records
                }
                var cols = new List <string>();
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    var fName = reader.GetName(i);
                    cols.Add(fldMapping.GetOriginalFieldName(fName));
                }

                while (reader.Read() && data.Count < q.RecordCount)
                {
                    var values = new object[reader.FieldCount];
                    reader.GetValues(values);
                    var row = new Dictionary <string, object>(values.Length);
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        row[cols[i]] = DBNull.Value.Equals(values[i]) ? null : values[i];
                    }
                    data.Add(new DictionaryItem(row));
                }
            });

            res.Data = data;
            return(res);
        }
Beispiel #6
0
        public void test_RelexParseSpeed()
        {
            var relExParser = new RelExParser();

            var stopwatch = new System.Diagnostics.Stopwatch();

            stopwatch.Start();
            var iterations = 1000;

            for (int iter = 0; iter < iterations; iter++)
            {
                for (int i = 0; i < relExSamples.Length; i++)
                {
                    string relEx = relExSamples[i];
                    Query  q     = relExParser.Parse(relEx);
                }
            }
            stopwatch.Stop();
            Console.WriteLine("Speedtest for relex parse ({1} times): {0}", stopwatch.Elapsed, iterations * relExSamples.Length);
        }