예제 #1
0
        protected override void SetRootPagingStatments(TempTableNode root, QueryExpand queryExpand)
        {
            Query query = queryExpand.Query;

            root.TempTableName = GetTempTableName();
            PagingClauseCollection clauses = GeneratePagingClauseCollection(query, out DbParameter[] dbParameters);
            List <string>          list    = new List <string>
            {
                string.Format("CREATE GLOBAL TEMPORARY TABLE {0} ON COMMIT PRESERVE ROWS AS", root.TempTableName),
                clauses.Select,
                clauses.From,
                string.Join(" ", clauses.LeftJoins),
                clauses.Where ?? string.Empty,
                clauses.OrderBy ?? string.Empty
            };

            list.AddRange(clauses.Clauses);

            string sql = string.Join(" ", list);

            root.BeforeExecuteStatments.Add(new SQLStatment(sql, dbParameters));

            //
            string fetchSql = string.Format("SELECT * FROM {0}", root.TempTableName);

            root.FetchTableStatment = new SQLStatment(fetchSql);
        }
예제 #2
0
        protected PagingClauseCollection GeneratePagingClauseCollection(Query query, out DbParameter[] dbParameters)
        {
            PagingClauseCollection clauses = Database.QueryGenerator.GeneratePagingClauseCollection(query, out IReadOnlyDictionary <string, object> dbParameterValues);

            dbParameters = CreateParameters(dbParameterValues);
            return(clauses);
        }
예제 #3
0
        protected override PagingClauseCollection GeneratePagingClauseCollection(Query query, out IReadOnlyDictionary <string, object> dbParameterValues)
        {
            long top = (query.Top == 0) ? long.MaxValue : query.Top;

            SelectClauseCollection selectClauses = GenerateSelectClauseCollection(query, out dbParameterValues);
            PagingClauseCollection PagingClauses = new PagingClauseCollection(selectClauses)
            {
                Clauses = new string[1]
            };

            PagingClauses.Clauses[0] = string.Format("LIMIT {0},{1}", query.Skip, top);

            return(PagingClauses);
        }
예제 #4
0
        public virtual string GeneratePagingStatement(Query query, out IReadOnlyDictionary <string, object> dbParameterValues)
        {
            PagingClauseCollection clauses = GeneratePagingClauseCollection(query, out dbParameterValues);

            List <string> list = new List <string>
            {
                clauses.Select,
                clauses.From,
                string.Join(" ", clauses.LeftJoins),
                clauses.Where ?? string.Empty,
                clauses.OrderBy ?? string.Empty
            };

            list.AddRange(clauses.Clauses);
            return(string.Join(" ", list));
        }
예제 #5
0
        internal protected override PagingClauseCollection GeneratePagingClauseCollection(Query query, out IReadOnlyDictionary <string, object> dbParameterValues)
        {
            SelectClauseCollection selectClauses = GenerateSelectClauseCollection(query, out dbParameterValues);
            PagingClauseCollection pagingClauses = new PagingClauseCollection(selectClauses);

            List <string> clauses = new List <string>
            {
                string.Format("OFFSET {0} ROWS", query.Skip)
            };

            if (query.Top != 0)
            {
                clauses.Add(string.Format("FETCH NEXT {0} ROWS ONLY", query.Top));
            }
            pagingClauses.Clauses = clauses.ToArray();

            return(pagingClauses);
        }