internal JoinedTableSource(TableSourceBase left, TableSourceBase right, PredicateBase on, JoinType type) { Left = Argument.NotNull(left, "left"); Right = Argument.NotNull(right, "right"); On = Argument.NotNull(on, "on"); Type = type; }
public static Query JoinLastTableSource(this Query query, TableSourceBase joinTableSource, PredicateBase on, JoinType joinType) { Argument.NotNull(query, "query"); Argument.NotNull(joinTableSource, "joinTableSource"); var lastTableSource = query.From.InternalNodes.LastOrDefault(); if (lastTableSource == null) { throw new InvalidOperationException("Query's table source list is empty."); } var newTableSource = new JoinedTableSource(lastTableSource, joinTableSource, on, joinType); return(new Query(query.Select, query.From.ReplaceLast(newTableSource), query.Where)); }
//public override void EnterSubqueryTableItem(MySqlParser.SubqueryTableItemContext context) //{ // if (_isOtherListener == 1) // { // if (context.ChildCount > 1) // { // Rules.Remove(Rules[Rules.Count - 1]); // } // SubqueryTableItem subqueryTableItem = // new SubqueryTableItem(context.SourceInterval, context, context.GetText()); // Rules.Add(subqueryTableItem); // } // _isOtherListener++; //} //public override void ExitSubqueryTableItem(MySqlParser.SubqueryTableItemContext context) //{ // _isOtherListener--; //} //public override void EnterAtomTableItem(MySqlParser.AtomTableItemContext context) //{ // if (_isOtherListener == 1) // { // if (context.ChildCount > 1) // { // Rules.Remove(Rules[Rules.Count - 1]); // } // AtomTableItem atomTableItem = // new AtomTableItem(context.SourceInterval, context, context.GetText()); // Rules.Add(atomTableItem); // } // _isOtherListener++; //} //public override void ExitAtomTableItem(MySqlParser.AtomTableItemContext context) //{ // _isOtherListener--; //} #endregion public override void EnterTableSourceBase(MySqlParser.TableSourceBaseContext context) { if (_isOtherListener == 1) { if (context.ChildCount > 1) { Rules.Remove(Rules[Rules.Count - 1]); } TableSourceBase tableSourceBase = new TableSourceBase(context.SourceInterval, context, context.GetText()); Rules.Add(tableSourceBase); } _isOtherListener++; }
public static Query Add(this Query query, TableSourceBase tableSource) { Argument.NotNull(query, "query"); Argument.NotNull(tableSource, "tableSource"); return(new Query(query.Select, query.From.Add(tableSource), query.Where)); }