Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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
             */
        }
Ejemplo n.º 6
0
        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;
                }
            }
        }
Ejemplo n.º 7
0
        public override void EnterSearch_condition(TSqlParser.Search_conditionContext context)
        {
            AddSpace();

            base.EnterSearch_condition(context);
        }
Ejemplo n.º 8
0
 public override void EnterSearch_condition([NotNull] TSqlParser.Search_conditionContext context)
 {
     base.EnterSearch_condition(context);
 }
Ejemplo n.º 9
0
        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));
            //            }
            //        }
            //    }
        }
Ejemplo n.º 10
0
        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("---");
        }