public virtual void Visit(WQueryParenthesisExpression node) { node.AcceptChildren(this); }
private WSelectQueryExpression ParseSelectQueryStatement(QueryExpression queryExpr) { if (queryExpr == null) { return null; } switch (queryExpr.GetType().Name) { case "BinaryQueryExpression": { var bqe = queryExpr as BinaryQueryExpression; var pQueryExpr = new WBinaryQueryExpression { All = bqe.All, FirstQueryExpr = ParseSelectQueryStatement(bqe.FirstQueryExpression), SecondQueryExpr = ParseSelectQueryStatement(bqe.SecondQueryExpression), FirstTokenIndex = bqe.FirstTokenIndex, LastTokenIndex = bqe.LastTokenIndex }; //pQueryExpr.OrderByExpr = parseOrderbyExpr(bqe.OrderByClause); return pQueryExpr; } case "QueryParenthesisExpression": { var qpe = queryExpr as QueryParenthesisExpression; var pQueryExpr = new WQueryParenthesisExpression { QueryExpr = ParseSelectQueryStatement(qpe.QueryExpression), FirstTokenIndex = qpe.FirstTokenIndex, LastTokenIndex = qpe.LastTokenIndex }; //pQueryExpr.OrderByExpr = parseOrderbyExpr(qpe.OrderByClause); return pQueryExpr; } case "QuerySpecification": { var qs = queryExpr as QuerySpecification; var pQueryExpr = new WSelectQueryBlock { FirstTokenIndex = qs.FirstTokenIndex, LastTokenIndex = qs.LastTokenIndex, SelectElements = new List<WSelectElement>(qs.SelectElements.Count), }; // // SELECT clause // foreach (var wsel in qs.SelectElements.Select(ParseSelectElement).Where(wsel => wsel != null)) { pQueryExpr.SelectElements.Add(wsel); } // // Top row filter // if (qs.TopRowFilter != null) { pQueryExpr.TopRowFilter = new WTopRowFilter { Percent = qs.TopRowFilter.Percent, WithTies = qs.TopRowFilter.WithTies, Expression = ParseScalarExpression(qs.TopRowFilter.Expression), FirstTokenIndex = qs.TopRowFilter.FirstTokenIndex, LastTokenIndex = qs.TopRowFilter.LastTokenIndex }; } pQueryExpr.UniqueRowFilter = qs.UniqueRowFilter; // // FROM clause // if (qs.FromClause != null && qs.FromClause.TableReferences != null) { pQueryExpr.FromClause.FirstTokenIndex = qs.FromClause.FirstTokenIndex; pQueryExpr.FromClause.LastTokenIndex = qs.FromClause.LastTokenIndex; pQueryExpr.FromClause.TableReferences = new List<WTableReference>(qs.FromClause.TableReferences.Count); foreach (var pref in qs.FromClause.TableReferences.Select(ParseTableReference).Where(pref => pref != null)) { pQueryExpr.FromClause.TableReferences.Add(pref); } } // // WHERE clause // if (qs.WhereClause != null && qs.WhereClause.SearchCondition != null) { pQueryExpr.WhereClause.FirstTokenIndex = qs.WhereClause.FirstTokenIndex; pQueryExpr.WhereClause.LastTokenIndex = qs.WhereClause.LastTokenIndex; pQueryExpr.WhereClause.SearchCondition = ParseBooleanExpression(qs.WhereClause.SearchCondition); } // GROUP-BY clause if (qs.GroupByClause != null) { pQueryExpr.GroupByClause = ParseGroupbyClause(qs.GroupByClause); } // Having clause if (qs.HavingClause != null) { pQueryExpr.HavingClause = new WHavingClause { SearchCondition = ParseBooleanExpression(qs.HavingClause.SearchCondition), FirstTokenIndex = qs.HavingClause.FirstTokenIndex, LastTokenIndex = qs.HavingClause.LastTokenIndex }; } // // ORDER-BY clause // if (qs.OrderByClause != null) { pQueryExpr.OrderByClause = ParseOrderbyClause(qs.OrderByClause); } return pQueryExpr; } default: return null; } }
public virtual void Visit(WQueryParenthesisExpression node) { node.AcceptChildren(this); }