Пример #1
0
        public void When_building_Then_builds_properly()
        {
            var join = new OuterJoin(new TableClause("Lol l"), new TableClause("Wat w"), "l.WatID = w.ID");

            join.ToSql().Should().BeEquivalentToIgnoringNewLines(@"Lol l
    OUTER JOIN Wat w ON l.WatID = w.ID");
        }
        public void When_building_Then_builds_properly()
        {
            var join = new OuterJoin(new TableClause("Lol l"), new TableClause("Wat w"), "l.WatID = w.ID");

            Assert.That(
                join.ToSql(),
                SqlCompareConstraint.EqualTo(@"Lol l
    OUTER JOIN Wat w ON l.WatID = w.ID"));
        }
Пример #3
0
        public void Visit(OuterJoin node)
        {
            var tr1 = node.LeftTableRef;
            var tr2 = node.RightTableRef;
            var on  = node.OnCond;

            VisitChild(1, _verdictColumn, _verdictGroupFunc, tr1, tr2);
            VisitChild(2, _verdictColumn && IsVerdictPassthroughWhere(on), false, on);
        }
Пример #4
0
        public void When_building_nested_Then_builds_properly()
        {
            var join = new OuterJoin(new TableClause("Lol l"), new TableClause("Wat w"), "l.WatID = w.ID");

            var innerJoin = new InnerJoin(join, new TableClause("Derp d"), "l.DerpID = d.ID");

            innerJoin.ToSql().Should().BeEquivalentToIgnoringNewLines(@"Lol l
    OUTER JOIN Wat w ON l.WatID = w.ID
    INNER JOIN Derp d ON l.DerpID = d.ID");
        }
        public void When_building_nested_Then_builds_properly()
        {
            var join = new OuterJoin(new TableClause("Lol l"), new TableClause("Wat w"), "l.WatID = w.ID");

            var innerJoin = new InnerJoin(join, new TableClause("Derp d"), "l.DerpID = d.ID");

            Assert.That(
                innerJoin.ToSql(),
                SqlCompareConstraint.EqualTo(@"Lol l
    OUTER JOIN Wat w ON l.WatID = w.ID
    INNER JOIN Derp d ON l.DerpID = d.ID"));
        }
Пример #6
0
        public override void EnterOuterJoin(MySqlParser.OuterJoinContext context)
        {
            if (_isOtherListener == 1)
            {
                if (context.ChildCount > 1)
                {
                    Rules.Remove(Rules[Rules.Count - 1]);
                }

                OuterJoin outerJoin =
                    new OuterJoin(context.SourceInterval, context, context.GetText());

                Rules.Add(outerJoin);
            }
            _isOtherListener++;
        }
Пример #7
0
        /// <exception cref="System.SqlSyntaxErrorException" />
        private TableReference BuildTableReference(TableReference @ref)
        {
            for (;;)
            {
                IExpression    on;
                IList <string> @using;
                TableReference temp;
                var            isOut  = false;
                var            isLeft = true;
                switch (lexer.Token())
                {
                case MySqlToken.KwInner:
                case MySqlToken.KwCross:
                {
                    lexer.NextToken();
                    goto case MySqlToken.KwJoin;
                }

                case MySqlToken.KwJoin:
                {
                    lexer.NextToken();
                    temp = TableFactor();
                    switch (lexer.Token())
                    {
                    case MySqlToken.KwOn:
                    {
                        lexer.NextToken();
                        on   = exprParser.Expression();
                        @ref = new InnerJoin(@ref, temp, on);
                        break;
                    }

                    case MySqlToken.KwUsing:
                    {
                        lexer.NextToken();
                        Match(MySqlToken.PuncLeftParen);
                        @using = IdNameList();
                        @ref   = new InnerJoin(@ref, temp, @using);
                        break;
                    }

                    default:
                    {
                        @ref = new InnerJoin(@ref, temp);
                        break;
                    }
                    }
                    break;
                }

                case MySqlToken.KwStraightJoin:
                {
                    lexer.NextToken();
                    temp = TableFactor();
                    switch (lexer.Token())
                    {
                    case MySqlToken.KwOn:
                    {
                        lexer.NextToken();
                        on   = exprParser.Expression();
                        @ref = new StraightJoin(@ref, temp, on);
                        break;
                    }

                    default:
                    {
                        @ref = new StraightJoin(@ref, temp);
                        break;
                    }
                    }
                    break;
                }

                case MySqlToken.KwRight:
                {
                    isLeft = false;
                    goto case MySqlToken.KwLeft;
                }

                case MySqlToken.KwLeft:
                {
                    lexer.NextToken();
                    if (lexer.Token() == MySqlToken.KwOuter)
                    {
                        lexer.NextToken();
                    }
                    Match(MySqlToken.KwJoin);
                    temp = TableReference();
                    switch (lexer.Token())
                    {
                    case MySqlToken.KwOn:
                    {
                        lexer.NextToken();
                        on   = exprParser.Expression();
                        @ref = new OuterJoin(isLeft, @ref, temp, on);
                        break;
                    }

                    case MySqlToken.KwUsing:
                    {
                        lexer.NextToken();
                        Match(MySqlToken.PuncLeftParen);
                        @using = IdNameList();
                        @ref   = new OuterJoin(isLeft, @ref, temp, @using);
                        break;
                    }

                    default:
                    {
                        var condition = temp.RemoveLastConditionElement();
                        if (condition is IExpression)
                        {
                            @ref = new OuterJoin(isLeft, @ref, temp, (IExpression)condition);
                        }
                        else
                        {
                            if (condition is IList)
                            {
                                @ref = new OuterJoin(isLeft, @ref, temp, (IList <string>)condition);
                            }
                            else
                            {
                                throw Err("conditionExpr cannot be null for outer join");
                            }
                        }
                        break;
                    }
                    }
                    break;
                }

                case MySqlToken.KwNatural:
                {
                    lexer.NextToken();
                    switch (lexer.Token())
                    {
                    case MySqlToken.KwRight:
                    {
                        isLeft = false;
                        goto case MySqlToken.KwLeft;
                    }

                    case MySqlToken.KwLeft:
                    {
                        lexer.NextToken();
                        if (lexer.Token() == MySqlToken.KwOuter)
                        {
                            lexer.NextToken();
                        }
                        isOut = true;
                        goto case MySqlToken.KwJoin;
                    }

                    case MySqlToken.KwJoin:
                    {
                        lexer.NextToken();
                        temp = TableFactor();
                        @ref = new NaturalJoin(isOut, isLeft, @ref, temp);
                        break;
                    }

                    default:
                    {
                        throw Err("unexpected token after NATURAL for natural join:" + lexer.Token());
                    }
                    }
                    break;
                }

                default:
                {
                    return(@ref);
                }
                }
            }
        }
Пример #8
0
 public virtual void Visit(OuterJoin node)
 {
     VisitInternal(node.LeftTableRef);
     VisitInternal(node.OnCond);
     VisitInternal(node.RightTableRef);
 }
Пример #9
0
        private void JoinClause()
        {
            // Large set of defaults for joins.
            // This is where we start to think about moving some
            // parsing into the individual elements, esp. since
            // the responsibility for executing the query is
            // delegated to the executive.
            do
            {
                Join j = null;
                Join.OrientationType orientation = Join.OrientationType.Left;

                if (tokenizer.Token == "LEFT")
                {
                    orientation = Join.OrientationType.Left;
                    tokenizer.Match("LEFT");
                }

                if (tokenizer.Token == "RIGHT")
                {
                    orientation = Join.OrientationType.Right;
                    tokenizer.Match("RIGHT");
                }

                if (tokenizer.Token == "JOIN")
                {
                    tokenizer.Match("JOIN");
                    j = new InnerJoin();
                }

                if (tokenizer.Token == "INNER")
                {
                    tokenizer.Match("INNER");
                    tokenizer.Match("JOIN");
                    j = new InnerJoin();
                }

                if (tokenizer.Token == "OUTER")
                {
                    tokenizer.Match("OUTER");
                    tokenizer.Match("JOIN");
                    j = new OuterJoin();
                }

                j.Orientation = orientation;
                j.TableName = tokenizer.Token;
                tokenizer.GetToken();

                tokenizer.Match("ON");
                j.LeftField = tokenizer.Token;
                tokenizer.GetToken();
                tokenizer.Match("=");
                j.RightField = tokenizer.Token;
                tokenizer.GetToken();
                ((SelectQuery)this.Query).Joins.Add(j);
            } while (tokenizer.Token == "JOIN" ||
                    tokenizer.Token == "LEFT" ||
                    tokenizer.Token == "RIGHT" ||
                    tokenizer.Token == "INNER" ||
                    tokenizer.Token == "OUTER");
        }
Пример #10
0
        private void JoinClause()
        {
            // Large set of defaults for joins.
            // This is where we start to think about moving some
            // parsing into the individual elements, esp. since
            // the responsibility for executing the query is
            // delegated to the executive.
            do
            {
                Join j = null;
                Join.OrientationType orientation = Join.OrientationType.Left;

                if (tokenizer.Token == "LEFT")
                {
                    orientation = Join.OrientationType.Left;
                    tokenizer.Match("LEFT");
                }

                if (tokenizer.Token == "RIGHT")
                {
                    orientation = Join.OrientationType.Right;
                    tokenizer.Match("RIGHT");
                }

                if (tokenizer.Token == "JOIN")
                {
                    tokenizer.Match("JOIN");
                    j = new InnerJoin();
                }

                if (tokenizer.Token == "INNER")
                {
                    tokenizer.Match("INNER");
                    tokenizer.Match("JOIN");
                    j = new InnerJoin();
                }

                if (tokenizer.Token == "OUTER")
                {
                    tokenizer.Match("OUTER");
                    tokenizer.Match("JOIN");
                    j = new OuterJoin();
                }

                j.Orientation = orientation;
                j.TableName   = tokenizer.Token;
                tokenizer.GetToken();

                tokenizer.Match("ON");
                j.LeftField = tokenizer.Token;
                tokenizer.GetToken();
                tokenizer.Match("=");
                j.RightField = tokenizer.Token;
                tokenizer.GetToken();
                ((SelectQuery)this.Query).Joins.Add(j);
            } while (tokenizer.Token == "JOIN" ||
                     tokenizer.Token == "LEFT" ||
                     tokenizer.Token == "RIGHT" ||
                     tokenizer.Token == "INNER" ||
                     tokenizer.Token == "OUTER");
        }