/// <summary> /// Composes a source query for a remote table /// </summary> /// <param name="table"></param> /// <returns></returns> public SourceTableQuery PrepareCopyRemoteTable(TableReference table) { // -- Load schema var sm = this.GetSchemaManager(false); var ds = sm.Datasets[table.DatasetName]; // Graywulf dataset has to be converted to prevent registry access if (ds is GraywulfDataset) { ds = new SqlServerDataset(ds); } // --- Generate most restrictive query // Find the query specification this table belongs to var qs = ((TableSource)table.Node).QuerySpecification; // Run the normalizer to convert where clause to a normal form var cnr = new SearchConditionNormalizer(); cnr.NormalizeQuerySpecification(qs); var cg = SqlCodeGeneratorFactory.CreateCodeGenerator(ds); var sql = cg.GenerateMostRestrictiveTableQuery(table, true, 0); return new SourceTableQuery() { Dataset = ds, Query = sql }; }
public SourceQueryParameters PrepareCopyRemoteTable(TableReference table) { // Load schema var sm = this.GetSchemaManager(false); var ds = sm.Datasets[table.DatasetName]; // Graywulf dataset is to be converted to prevent registry access if (ds is GraywulfDataset) { ds = new SqlServerDataset(ds); } var source = new SourceQueryParameters(); source.Dataset = ds; // Find the query specification this table belongs to var qs = ((TableSource)table.Node).QuerySpecification; // Run the normalizer var cnr = new SearchConditionNormalizer(); cnr.NormalizeQuerySpecification(qs); var cg = SqlCodeGeneratorFactory.CreateCodeGenerator(ds); source.Query = cg.GenerateMostRestrictiveTableQuery(table, true, 0); return source; }
// --- private IEnumerable<LogicalExpressions.Expression> EnumerateCnfTermsTestHelper(string query) { var select = CreateSelect(query); var scn = new SearchConditionNormalizer(); scn.Execute(select); var conditions = typeof(SearchConditionNormalizer).GetField("conditions", BindingFlags.Instance | BindingFlags.NonPublic); var enumterms = typeof(SearchConditionNormalizer).GetMethod("EnumerateCnfTerms", BindingFlags.Static | BindingFlags.NonPublic); return (IEnumerable<LogicalExpressions.Expression>)enumterms.Invoke(null, new object[] { ((List<LogicalExpressions.Expression>)conditions.GetValue(scn)).First() }); }
private string[] GetWhereClauses(string query) { SearchConditionNormalizer cn = new SearchConditionNormalizer(); var select = CreateSelect(query); var res = new List<string>(); foreach (var qs in select.EnumerateQuerySpecifications()) { cn.NormalizeQuerySpecification(qs); // TODO use qs.SourceTableReferences ??? foreach (var tr in qs.EnumerateSourceTableReferences(true)) { WhereClause where = cn.GenerateWhereClauseSpecificToTable(tr); if (where != null) { var cg = new SqlServerCodeGenerator(); cg.ResolveNames = true; var sw = new StringWriter(); cg.Execute(sw, where); res.Add(sw.ToString()); } else { res.Add(""); } } } return res.ToArray(); }
/// <summary> /// Interprets the parsed query /// </summary> protected bool Interpret(bool forceReinitialize) { if (interpretedQueryString == null || forceReinitialize) { // --- Execute name resolution var nr = CreateNameResolver(forceReinitialize); nr.Execute(selectStatement); // --- Normalize where conditions var wcn = new SearchConditionNormalizer(); wcn.Execute(selectStatement); FinishInterpret(forceReinitialize); return true; } else { return false; } }