Пример #1
0
 protected override void BuildFromClause(SqlStatement statement, SelectQuery selectQuery)
 {
     if (!statement.IsUpdate())
     {
         base.BuildFromClause(statement, selectQuery);
     }
 }
Пример #2
0
 protected override void BuildFromClause(SqlStatement statement, SelectQuery selectQuery)
 {
     if (!statement.IsUpdate())
     {
         base.BuildFromClause(statement, selectQuery);
     }
     if (selectQuery.From.Tables.Count == 0)
     {
         StringBuilder.Append("FROM DUMMY");
     }
 }
Пример #3
0
        //protected override void BuildFunction(SqlFunction func) {
        //  // http://blog.linq2db.com/
        //  func =  ConvertFunctionParameters(func);
        //  switch (func.Name.ToLower()) {
        //    case "coalesce": {
        //        func = new SqlFunction(func.SystemType, "Value", func.Parameters[0], func.Parameters[1]);
        //        break;
        //      }
        //    case "replicate": {
        //        func = new SqlFunction(func.SystemType, "Repeat", func.Parameters[0], func.Parameters[1]);
        //        break;
        //      }
        //    case "x_upper": {
        //        func = new SqlFunction(func.SystemType, "sqlbuilder_UCase", func.Parameters[0]);
        //        break;
        //      }
        //  }
        //  base.BuildFunction(func);
        //}

        protected override void BuildFromClause(SqlStatement statement, SelectQuery selectQuery)
        {
            if (!statement.IsUpdate())
            {
                if (selectQuery.From.Tables.Count == 0)
                {
                    StringBuilder.Append($"FROM {Provider.NamingConvention.DummyTableWithSchema()}").AppendLine();
                }
                base.BuildFromClause(statement, selectQuery);
            }
        }
Пример #4
0
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            // SQL Server 2012 supports OFFSET/FETCH providing there is an ORDER BY
            // UPDATE queries do not directly support ORDER BY, TOP, OFFSET, or FETCH, but they are supported in subqueries

            if (statement.IsUpdate() || statement.IsDelete())
            {
                statement = WrapRootTakeSkipOrderBy(statement);
            }
            statement = AddOrderByForSkip(statement);

            return(statement);
        }
Пример #5
0
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            //SQL Server 2008 supports ROW_NUMBER but not OFFSET/FETCH

            statement = SeparateDistinctFromPagination(statement, q => q.Select.TakeValue != null || q.Select.SkipValue != null);
            if (statement.IsUpdate() || statement.IsDelete())
            {
                statement = WrapRootTakeSkipOrderBy(statement);
            }
            statement = ReplaceSkipWithRowNumber(statement);

            return(statement);
        }
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            if (statement.IsUpdate())
            {
                statement = ReplaceTakeSkipWithRowNumber(statement, false);
            }
            else
            {
                statement = ReplaceTakeSkipWithRowNumber(statement, true);
                CorrectRootSkip(statement.SelectQuery !);
            }

            return(statement);
        }
Пример #7
0
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            if (statement.IsUpdate() || statement.IsInsert() || statement.IsDelete())
            {
                statement = ReplaceTakeSkipWithRowNum(statement, false);
            }

            switch (statement.QueryType)
            {
            case QueryType.Delete: statement = GetAlternativeDelete((SqlDeleteStatement)statement); break;

            case QueryType.Update: statement = GetAlternativeUpdate((SqlUpdateStatement)statement); break;
            }

            return(statement);
        }
Пример #8
0
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            //SQL Server 2008 supports ROW_NUMBER but not OFFSET/FETCH

            statement = SeparateDistinctFromPagination(statement, q => q.Select.TakeValue != null || q.Select.SkipValue != null);
            if (statement.IsUpdate() || statement.IsDelete())
            {
                statement = WrapRootTakeSkipOrderBy(statement);
            }
            statement = ReplaceSkipWithRowNumber(statement);
            if (statement.QueryType == QueryType.Select)
            {
                statement = QueryHelper.OptimizeSubqueries(statement);                 // OptimizeSubqueries can break update queries
            }
            return(statement);
        }
        public override SqlStatement TransformStatement(SqlStatement statement)
        {
            // very limited provider, it do not support Window functions.

            if (statement.IsUpdate())
            {
                var selectQuery = statement.SelectQuery !;
                if (selectQuery.Select.SkipValue != null || selectQuery.Select.TakeValue != null)
                {
                    throw new LinqToDBException("SQL Server 2000 do not support Skip, Take in Update statement.");
                }

                if (!statement.SelectQuery !.OrderBy.IsEmpty)
                {
                    statement.SelectQuery.OrderBy.Items.Clear();
                }
            }

            return(statement);
        }