public override void ExitSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.ExitSearch_condition(context); Debug.WriteLine("ExitSearch_condition"); Debug.WriteLine(context.GetText()); Statement.WhereClause = context.GetText(); }
public override void ExitSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.ExitSearch_condition(context); // this will set the full statement on the final exit _dmlStatement.WhereClause.Text = context.GetText(); _dmlStatement.WhereClause.TextWithWhiteSpace = GetWhiteSpaceFormat(context); }
public override void EnterSearch_condition([Antlr4.Runtime.Misc.NotNull] TSqlParser.Search_conditionContext ctx) { if (mode == JoinMode.Undefined) { return; } branch = BranchType.Search_condition; System.Console.WriteLine("Search_condition"); System.Console.WriteLine(ctx.GetText()); return; }
public override void ExitSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.ExitSearch_condition(context); // this will set the full statement on the final exit var select = GetStatementAsSelect(); select.WhereClause = context.GetText(); int a = context.Start.StartIndex; int b = context.Stop.StopIndex; Interval interval = new Interval(a, b); _charStream = context.Start.InputStream; select.WhereClauseWithWhiteSpace = _charStream.GetText(interval); }
public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.EnterSearch_condition(context); Debug.WriteLine("EnterSearch_condition"); Debug.WriteLine(context.GetText()); //Debug.WriteLine("----EnterSearch_condition children----"); //var children = context.children; //foreach (var x in children) //{ // Debug.WriteLine($"value of: {x.GetText()}"); //} //Debug.WriteLine("----EnterSearch_condition children----"); Debug.WriteLine("----EnterSearch_condition children----"); var child = context.GetChild(0); if (child.ChildCount == 3) { Debug.WriteLine(child.GetChild(0).GetText()); Debug.WriteLine(child.GetChild(1).GetText()); Debug.WriteLine(child.GetChild(2).GetText()); } Debug.WriteLine("----EnterSearch_condition children----"); //Debug.WriteLine("----Get OR Token Parents----"); //var item = context.GetTokens(235).ToList(); //item.ForEach(i => Debug.WriteLine($"{i.Parent.GetText()}")); //Debug.WriteLine("----Get OR Token Parents----"); //Debug.WriteLine("----Get AND Token Parents----"); //var item2 = context.GetTokens(9).ToList(); //item2.ForEach(i => Debug.WriteLine($"{i.Parent.GetText()}")); //Debug.WriteLine("----Get AND Token Parents----"); //var orItem = context.OR(); //Debug.WriteLine("----EnterSearch_condition OR----"); //orItem.ToList().ForEach(i => i.GetText()); //Debug.WriteLine("----EnterSearch_condition OR----"); //Debug.WriteLine(""); /* * 9 is AND * 235 is OR */ }
public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.EnterSearch_condition(context); Debug.WriteLine("EnterSearch_condition"); Debug.WriteLine(context.GetText()); if (_query is SelectQuery) { var query = (_query as SelectQuery); query.SearchConditionCount++; query.SearchConditionText = context.GetText(); if (query.SearchConditionText.Contains(QueryKeywords.And) || query.SearchConditionText.Contains(QueryKeywords.Or)) { query.HasBooleans = true; } } }
public override void EnterSearch_condition(TSqlParser.Search_conditionContext context) { AddSpace(); base.EnterSearch_condition(context); }
public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.EnterSearch_condition(context); }
public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { // Condition lCondition = ParseCondition.Parse(context.GetText().ToLower()); // int lColumnCount = 0; // string lTableName = ""; // if (AliasDic.Count == 0) // { // foreach (var nTable in Database.Tables) // {//TODO: kdyz neni alias, asi nastavit promenou s aliasy pokud neni tak tohle pokud je tak podle aliasu // if (lCondition.ColumnName != null || lCondition.Value != null || lCondition.Operator != null) // { // if (nTable.Columns.FirstOrDefault(aR => aR.Name.ToLower() == lCondition.ColumnName.ToLower()) != null) // { // if (mMentionedTables.Contains(nTable.Name)) // { // lColumnCount++; // } // lTableName = nTable.Name; // } // } // } // } // else // { // if (lCondition.ColumnName != null || lCondition.Value != null || lCondition.Operator != null) // { // Tuple<string, string> lColNameParts = ParseCondition.SplitAlias(lCondition.ColumnName); // if (lColNameParts != null) // { // string lTableFromDic = AliasDic.Where(aR => aR.Value == lColNameParts.Item1).Select(aR => aR.Key).FirstOrDefault(); // if (Database.Tables.FirstOrDefault(aR => aR.Name.ToLower() == lTableFromDic.ToLower()).Columns.FirstOrDefault(aR => aR.Name.ToLower() == lColNameParts.Item2.ToLower()) != null) // { // ParsedQueryStructure.Table lTable = Tables.FirstOrDefault(aR => aR.Name.ToLower() == lTableFromDic.ToLower()); // if (lTable.Columns.FirstOrDefault(aR => aR.Name.ToLower() == lColNameParts.Item2.ToLower()) != null) // { // Tables.FirstOrDefault(aR => aR.Name.ToLower() == lTableFromDic.ToLower()).Columns.FirstOrDefault(aR => aR.Name.ToLower() == lCondition.ColumnName.ToLower()) // .Conditions.Add(new Condition(lColNameParts.Item2, lCondition.Operator, lCondition.Value)); // } // else // { // Tables.FirstOrDefault(aR => aR.Name.ToLower() == lTableFromDic.ToLower()).Columns.Add(new ParsedQueryStructure.Column(lColNameParts.Item2)); // Tables.FirstOrDefault(aR => aR.Name.ToLower() == lTableFromDic.ToLower()).Columns.FirstOrDefault(aR => aR.Name.ToLower() == lColNameParts.Item2.ToLower()) // .Conditions.Add(new Condition(lColNameParts.Item2, lCondition.Operator, lCondition.Value)); // } // } // } // } // } // if (AliasDic.Count == 0) // { // if (lColumnCount > 1) { /*TODO: abmbigous column name*/ return; } // if (lColumnCount == 0) { /*TODO: column not found*/return; } // if (lColumnCount == 1) // { // ParsedQueryStructure.Table lTable = Tables.FirstOrDefault(aR => aR.Name == lTableName); // if (lTable.Columns.FirstOrDefault(aR => aR.Name == lCondition.ColumnName) != null) // { // Tables.FirstOrDefault(aR => aR.Name == lTableName).Columns.FirstOrDefault(aR => aR.Name == lCondition.ColumnName) // .Conditions.Add(new Condition(lCondition.ColumnName, lCondition.Operator, lCondition.Value)); // } // else // { // Tables.FirstOrDefault(aR => aR.Name == lTableName).Columns.Add(new ParsedQueryStructure.Column(lCondition.ColumnName)); // Tables.FirstOrDefault(aR => aR.Name == lTableName).Columns.FirstOrDefault(aR => aR.Name == lCondition.ColumnName) // .Conditions.Add(new Condition(lCondition.ColumnName, lCondition.Operator, lCondition.Value)); // } // } // } }
public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context) { base.EnterSearch_condition(context); bool hasAnd = false; bool hasOr = false; string debug = context.GetText(); var interval = context.SourceInterval; Console.WriteLine("EnterSearch_condition:"); Console.WriteLine($"Text: {debug}"); Console.WriteLine($"Interval: {interval.ToString()}"); // if the predicate is not null // we can try to examine the parent's children for an AND/OR keyword var predicate = context.predicate(); if (predicate != null) { var predicateText = predicate.GetText(); var andNode = predicate.AND; var predicateExpression = predicate.expression(); Console.WriteLine($"EnterSearch_condition - predicate: {predicateText}"); var predicateInterval = predicate.SourceInterval; Console.WriteLine($"EnterSearch_condition - predicate interval: {predicateInterval}"); if (context.Parent.ChildCount > 0) { var contextParent = context.Parent as TSqlParser.Search_conditionContext; if (contextParent is null) { return; } foreach (var a in contextParent.children) { // one of these will be the current predicate // the other will be the boolean operator // and the final will be the other operator you need to combine var aText = a.GetText(); Console.WriteLine($"EnterSearch_condition - predicate parent: {aText}"); var childInterval = a.SourceInterval; Console.WriteLine($"EnterSearch_condition - predicate parent interval: {childInterval}"); if (aText == "AND" || aText == "OR") { Debug.Write("Have a boolean"); } } if (context.Parent.Parent is TSqlParser.Search_conditionContext) { var contextGrandParent = context.Parent.Parent as TSqlParser.Search_conditionContext; foreach (var b in contextGrandParent.children) { var bText = b.GetText(); Console.WriteLine($"EnterSearch_condition - predicate grand parent: {bText}"); if (b is TSqlParser.Search_conditionContext) { var contextGreatGrandParent = b as TSqlParser.Search_conditionContext; var contextGreatGrandParentPredicate = contextGreatGrandParent.predicate(); if (contextGreatGrandParentPredicate != null) { var greatGrandParentText = contextGreatGrandParentPredicate.GetText(); Console.WriteLine($"EnterSearch_condition - predicate great grandparent predicate: {greatGrandParentText}"); var greatGrandParentInterval = contextGreatGrandParentPredicate.SourceInterval; Console.WriteLine($"EnterSearch_condition - predicate great grandparent predicate interval: {greatGrandParentInterval}"); } if (contextGreatGrandParent.ChildCount > 0) { foreach (var c in contextGrandParent.children) { if (c is TSqlParser.Search_conditionContext) { var greatGreatContext = c as TSqlParser.Search_conditionContext; var cText = greatGreatContext.GetText(); Console.WriteLine($"EnterSearch_condition - predicate great 2x children: {cText}"); var cInterval = greatGreatContext.SourceInterval; Console.WriteLine($"EnterSearch_condition - predicate great 2x interval: {cInterval}"); var greatPredicate = greatGreatContext.predicate(); if (greatPredicate != null) { var greatText = greatPredicate.GetText(); Console.WriteLine($"EnterSearch_condition - predicate great grandparent children predicate: {greatText}"); var greatInterval = greatPredicate.SourceInterval; Console.WriteLine($"EnterSearch_condition - predicate great grandparent children predicate interval: {greatInterval}"); } if (greatGreatContext.ChildCount > 0) { foreach (var d in greatGreatContext.children) { var dText = d.GetText(); Console.WriteLine($"D text: {dText}"); var dInterval = d.SourceInterval; Console.WriteLine($"D Interval: {dInterval}"); if (d is TSqlParser.Search_conditionContext) { var dSearch = d as TSqlParser.Search_conditionContext; var dPredicate = dSearch.predicate(); if (dPredicate != null) { var dPredicateText = dPredicate.GetText(); Console.WriteLine($"D Predicate Text: {dPredicateText}"); var dPredicateInterval = dPredicate.SourceInterval; Console.WriteLine($"D Predicate Interval: {dPredicateInterval}"); } } } } } } } } } } } } if (context.ChildCount > 1) { // we have multiple extra predicates foreach (var child in context.children) { Console.WriteLine("EnterSearch_condition - child"); var childText = child.GetText(); var childInterval = child.SourceInterval; Console.WriteLine($"Child Text: {childText}"); Console.WriteLine($"Child Interval: {childInterval.ToString()}"); if (string.Equals("AND", childText, StringComparison.OrdinalIgnoreCase)) { hasAnd = true; } if (string.Equals("OR", childText, StringComparison.OrdinalIgnoreCase)) { hasOr = true; } } } if (context.ChildCount > 1 && context.Parent != null && context.Parent is TSqlParser.Query_specificationContext) { // we are at the root level of the search parameters, i.e, the whole WHERE clause Debug.WriteLine("At root of where clause"); } if (context.ChildCount == 1 && context.Parent != null && context.Parent is TSqlParser.Search_conditionContext) { // we are at the lowest level of a predicate if (context.Parent.ChildCount > 1) { // we can look back at the parent to determine if we had an AND/OR operator previous to this one var parentChildCount = context.Parent.ChildCount; for (int i = 0; i < parentChildCount; i++) { // one of these will be an AND/OR keyword // we can use this to determine how the predicates will operate together var parentChild = context.Parent.GetChild(i); string parentChildDebug = parentChild.GetText(); // if this parentChildDebug value is the same as debug (in other words, the same as the level we're at) // it means the preceding predicates must be evaluated first or we've got predicates at the same level we're at that should be evaluated // this is kind of hard to explain } } } Console.WriteLine("---"); }