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")); }
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); }
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")); }
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++; }
/// <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); } } } }
public virtual void Visit(OuterJoin node) { VisitInternal(node.LeftTableRef); VisitInternal(node.OnCond); VisitInternal(node.RightTableRef); }
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"); }