public int DeleteRows(string relex) { var relexParser = new RelExParser(); var q = relexParser.Parse(relex); return(StorageDalc.Delete(q)); }
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); }
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); }
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"); }); }
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); }