Пример #1
0
        /// <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)
            });
        }
Пример #2
0
        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
            });
        }