/// <summary> /// Returns SQL statement for the provided SelectClause /// </summary> /// <param name="selectClause"></param> /// <returns></returns> public SelectStatementModel GetModel(SelectStatement selectClause) { var select = selectClause.IsDistinct ? "SELECT DISTINCT " : "SELECT "; var from = ""; var where = ""; var limit = ""; //this is a pseudo select if (selectClause.FromClause == null) { var _list = BuildSelectList(selectClause, null).ToList(); return(new SelectStatementModel() { Sql = select + SelectSql(_list), SelectList = _list }); } //generate alias list var aliasList = StatementGenerator.GetAliasList(selectClause.FromClause, GetModel); //process from clause if (selectClause.FromClause != null) { from = FromSql(selectClause.FromClause, aliasList, _formatter); } if (selectClause.WhereClause != null) { where = WhereSql(selectClause.WhereClause, aliasList, _formatter); } var selectList = BuildSelectList(selectClause, aliasList).ToList(); select = select + SelectSql(selectList); var groupby = ""; if (selectList.Any(a => a.IsGroupRequired == true)) { groupby = GroupBySql(selectList.Where(s => s.IsGroupRequired == false)); } //set limit on result set if (selectClause.ResultLimit > 0) { limit = "limit " + selectClause.ResultLimit; } return(new SelectStatementModel() { Sql = select + " " + from + " " + where + " " + groupby + " " + limit, AliasList = aliasList, SelectList = selectList.ToList(), IsAllSelect = selectList.Aggregate(true, (a, b) => b.IsAllSelect & a) }); }
private static ExpressionSql HandleExpression <T>(WhereClause <T> statement, IConnectorFormatter formatter) { if (statement == null) { return(null); } var aliasList = StatementGenerator.GetAliasList(statement.FromClause); var fromSql = StatementGenerator.FromSql(statement.FromClause, aliasList, formatter); var whereSql = StatementGenerator.WhereSql(statement, aliasList, formatter); return(new ExpressionSql { WhereSql = whereSql, FromSql = fromSql }); }