示例#1
0
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     return(string.Format(
                "ALTER TABLE {0} ALTER {1} DROP DEFAULT, ALTER {1} {2};",
                Quoter.QuoteTableName(expression.TableName, expression.SchemaName),
                Quoter.QuoteColumnName(expression.ColumnName),
                ((PostgresColumn)Column).FormatAlterDefaultValue(expression.ColumnName, expression.DefaultValue)));
 }
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     return(string.Format(AlterColumn, Quoter.QuoteTableName(expression.TableName, expression.SchemaName), Column.Generate(new ColumnDefinition
     {
         ModificationType = ColumnModificationType.Alter,
         Name = expression.ColumnName,
         DefaultValue = expression.DefaultValue
     })));
 }
示例#3
0
#pragma warning restore 618

        public override string Generate(AlterDefaultConstraintExpression expression)
        {
            Truncator.Truncate(expression);
            return(String.Format("ALTER TABLE {0} ALTER COLUMN {1} SET DEFAULT {2}",
                                 Quoter.QuoteTableName(expression.TableName),
                                 Quoter.QuoteColumnName(expression.ColumnName),
                                 Quoter.QuoteValue(expression.DefaultValue)
                                 ));
        }
        public void WhenDefaultSchemaConventionIsAppliedAndSchemaIsSetThenSchemaShouldNotBeChanged()
        {
            var expression = new AlterDefaultConstraintExpression {
                SchemaName = "testschema", TableName = "test", ColumnName = "Column1", DefaultValue = SystemMethods.CurrentDateTime
            };

            var processed = expression.Apply(ConventionSets.WithSchemaName);

            Assert.That(processed.SchemaName, Is.EqualTo("testschema"));
        }
        public void WhenDefaultSchemaConventionIsAppliedAndSchemaIsNotSetThenSchemaShouldBeNull()
        {
            var expression = new AlterDefaultConstraintExpression {
                TableName = "test", ColumnName = "Column1", DefaultValue = SystemMethods.CurrentDateTime
            };

            var processed = expression.Apply(ConventionSets.NoSchemaName);

            Assert.That(processed.SchemaName, Is.Null);
        }
        public void ErrorIsReturnedWhenColumnNameIsNull()
        {
            var expression = new AlterDefaultConstraintExpression {
                TableName = "test", ColumnName = "", DefaultValue = SystemMethods.CurrentDateTime
            };

            var errors = ValidationHelper.CollectErrors(expression);

            errors.ShouldContain(ErrorMessages.ColumnNameCannotBeNullOrEmpty);
        }
        public void ErrorIsReturnedWhenDefaultValueIsNull()
        {
            var expression = new AlterDefaultConstraintExpression {
                TableName = "test", ColumnName = "Column1", DefaultValue = null
            };

            var errors = ValidationHelper.CollectErrors(expression);

            errors.ShouldContain(ErrorMessages.DefaultValueCannotBeNull);
        }
        public void ErrorIsNotReturnedWhenTableNameAndColumnNameAndDefaultValueAreSet()
        {
            var expression = new AlterDefaultConstraintExpression {
                TableName = "test", ColumnName = "Column1", DefaultValue = SystemMethods.CurrentDateTime
            };

            var errors = ValidationHelper.CollectErrors(expression);

            Assert.That(errors.Count, Is.EqualTo(0));
        }
示例#9
0
        public override string Generate(AlterDefaultConstraintExpression expression)
        {
            // Available since MySQL 4.0.22 (2005)
            var defaultValue = ((MySqlColumn)Column).FormatDefaultValue(expression.DefaultValue);

            return(string.Format(
                       "ALTER TABLE {0} ALTER {1} SET {2}",
                       Quoter.QuoteTableName(expression.TableName),
                       Quoter.QuoteColumnName(expression.ColumnName),
                       defaultValue));
        }
示例#10
0
        public static AlterDefaultConstraintExpression GetAlterDefaultConstraintExpression()
        {
            var expression = new AlterDefaultConstraintExpression
            {
                ColumnName   = TestColumnName1,
                DefaultValue = 1,
                TableName    = TestTableName1
            };

            return(expression);
        }
        public void WhenDefaultSchemaConventionIsChangedAndSchemaIsNotSetThenSetSchema()
        {
            var expression = new AlterDefaultConstraintExpression {
                TableName = "test", ColumnName = "Column1", DefaultValue = SystemMethods.CurrentDateTime
            };
            var migrationConventions = new MigrationConventions {
                GetDefaultSchema = () => "testdefault"
            };

            expression.ApplyConventions(migrationConventions);

            Assert.That(expression.SchemaName, Is.EqualTo("testdefault"));
        }
示例#12
0
        public void CanAlterDefaultConstraintToNewGuid()
        {
            var expression = new AlterDefaultConstraintExpression
            {
                SchemaName   = "Schema1",
                TableName    = "Table1",
                ColumnName   = "Col1",
                DefaultValue = SystemMethods.NewGuid
            };

            var sql = generator.Generate(expression);

            sql.ShouldBe("ALTER TABLE \"Schema1\".\"Table1\" ALTER \"Col1\" DROP DEFAULT, ALTER \"Col1\" SET DEFAULT uuid_generate_v4()");
        }
示例#13
0
        public void CanAlterDefaultConstraintToCurrentUtcDateTime()
        {
            var expression = new AlterDefaultConstraintExpression
            {
                SchemaName   = "Schema1",
                TableName    = "Table1",
                ColumnName   = "Col1",
                DefaultValue = SystemMethods.CurrentUTCDateTime
            };

            var sql = generator.Generate(expression);

            sql.ShouldBe("ALTER TABLE \"Schema1\".\"Table1\" ALTER \"Col1\" DROP DEFAULT, ALTER \"Col1\" SET DEFAULT (now() at time zone 'UTC')");
        }
示例#14
0
        public void CanAlterDefaultConstraintToCurrentUser()
        {
            var expression = new AlterDefaultConstraintExpression
            {
                SchemaName   = "Schema1",
                TableName    = "Table1",
                ColumnName   = "Col1",
                DefaultValue = SystemMethods.CurrentUser
            };

            var sql = generator.Generate(expression);

            sql.ShouldBe("ALTER TABLE \"Schema1\".\"Table1\" ALTER \"Col1\" DROP DEFAULT, ALTER \"Col1\" SET DEFAULT current_user");
        }
示例#15
0
        /// <inheritdoc />
        public IAlterColumnOptionSyntax WithDefaultValue(object value)
        {
            // we need to do a drop constraint and then add constraint to change the default value
            var dc = new AlterDefaultConstraintExpression {
                TableName    = Expression.TableName,
                SchemaName   = Expression.SchemaName,
                ColumnName   = Expression.Column.Name,
                DefaultValue = value
            };

            _context.Expressions.Add(dc);
            Expression.Column.DefaultValue = value;
            return(this);
        }
示例#16
0
        public IAlterColumnOptionSyntax WithDefaultValue(object value)
        {
            var dc = new AlterDefaultConstraintExpression
            {
                TableName    = Expression.TableName,
                SchemaName   = Expression.SchemaName,
                ColumnName   = Expression.Column.Name,
                DefaultValue = value
            };

            _context.Expressions.Add(dc);

            Expression.Column.DefaultValue = value;

            return(this);
        }
示例#17
0
        public IAlterColumnOptionSyntax WithDefault(SystemMethods method)
        {
            var dc = new AlterDefaultConstraintExpression
            {
                TableName    = Expression.TableName,
                SchemaName   = Expression.SchemaName,
                ColumnName   = Expression.Column.Name,
                DefaultValue = method
            };

            _context.Expressions.Add(dc);

            Expression.Column.DefaultValue = method;

            return(this);
        }
        public IAlterColumnOptionSyntax WithDefaultValue(object value)
        {
            var dc = new AlterDefaultConstraintExpression(_context.CurrentDatabaseProvider, _databaseProviders, Expression.SqlSyntax)
            {
                TableName    = Expression.TableName,
                SchemaName   = Expression.SchemaName,
                ColumnName   = Expression.Column.Name,
                DefaultValue = value
            };

            _context.Expressions.Add(dc);

            Expression.Column.DefaultValue = value;

            return(this);
        }
        public IAlterTableColumnOptionBuilder WithDefaultValue(object value)
        {
            if (CurrentColumn.ModificationType == ModificationType.Alter)
            {
                var dc = new AlterDefaultConstraintExpression(_context)
                {
                    TableName    = Expression.TableName,
                    ColumnName   = CurrentColumn.Name,
                    DefaultValue = value
                };

                Expression.Expressions.Add(dc);
            }

            CurrentColumn.DefaultValue = value;
            return(this);
        }
示例#20
0
        public IAlterTableColumnOptionOrAddColumnOrAlterColumnSyntax WithDefaultValue(object value)
        {
            if (CurrentColumn.ModificationType == ColumnModificationType.Alter)
            {
                // TODO: This is code duplication from the AlterColumnExpressionBuilder
                // we need to do a drop constraint and then add constraint to change the defualt value
                var dc = new AlterDefaultConstraintExpression {
                    TableName    = Expression.TableName,
                    SchemaName   = Expression.SchemaName,
                    ColumnName   = CurrentColumn.Name,
                    DefaultValue = value
                };

                _context.Expressions.Add(dc);
            }

            CurrentColumn.DefaultValue = value;
            return(this);
        }
        public override string Generate(AlterDefaultConstraintExpression expression)
        {
            // before we alter a default constraint on a column, we have to drop any default value constraints in SQL Anywhere
            var builder       = new StringBuilder();
            var deleteDefault = Generate(new DeleteDefaultConstraintExpression
            {
                ColumnName = expression.ColumnName,
                SchemaName = expression.SchemaName,
                TableName  = expression.TableName
            }) + ";";

            builder.AppendLine(deleteDefault);

            builder.Append(String.Format("-- create alter table command to create new default constraint as string and run it" + Environment.NewLine + "ALTER TABLE {0} ALTER {1} DEFAULT {2};",
                                         Quoter.QuoteTableName(expression.TableName, expression.SchemaName),
                                         Quoter.QuoteColumnName(expression.ColumnName),
                                         Quoter.QuoteValue(expression.DefaultValue)));

            return(builder.ToString());
        }
示例#22
0
        public override string Generate(AlterDefaultConstraintExpression expression)
        {
            // before we alter a default constraint on a column, we have to drop any default value constraints in SQL Server
            var builder = new StringBuilder();

            builder.AppendLine(Generate(new DeleteDefaultConstraintExpression {
                ColumnName = expression.ColumnName,
                SchemaName = expression.SchemaName,
                TableName  = expression.TableName
            }));
            builder.AppendLine();
            builder.AppendFormat(
                "-- create alter table command to create new default constraint as string and run it" +
                Environment.NewLine + "ALTER TABLE {0} WITH NOCHECK ADD CONSTRAINT {3} DEFAULT({2}) FOR {1};",
                Quoter.QuoteTableName(expression.TableName, expression.SchemaName),
                Quoter.QuoteColumnName(expression.ColumnName),
                SqlServer2000Column.FormatDefaultValue(expression.DefaultValue, Quoter),
                Quoter.QuoteConstraintName(
                    SqlServer2000Column.GetDefaultConstraintName(expression.TableName, expression.ColumnName)));
            return(builder.ToString());
        }
示例#23
0
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     throw new NotImplementedException();
 }
示例#24
0
 public virtual void Process(AlterDefaultConstraintExpression expression)
 {
     Process(Generator.Generate(expression));
 }
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     throw new DatabaseOperationNotSupportedException();
 }
示例#26
0
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     return(CompatibilityMode.HandleCompatibilty("SQLite does not support altering of default constraints"));
 }
示例#27
0
        public override void Process(Expressions.AlterColumnExpression expression)
        {
            truncator.Truncate(expression);
            CheckColumn(expression.TableName, expression.Column.Name);
            FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this);
            FirebirdTableSchema    table  = schema.GetTableSchema(expression.TableName);
            ColumnDefinition       colDef = table.Definition.Columns.First(x => x.Name == quoter.ToFbObjectName(expression.Column.Name));

            //Change nullable constraint
            if (colDef.IsNullable != expression.Column.IsNullable)
            {
                PerformDBOperationExpression unSet = new PerformDBOperationExpression();
                unSet.Operation = (connection, transaction) =>
                {
                    string sql = (Generator as FirebirdGenerator).GenerateSetNull(colDef);
                    Announcer.Sql(sql);
                    using (var cmd = Factory.CreateCommand(sql, connection, transaction))
                    {
                        cmd.CommandTimeout = Options.Timeout;
                        cmd.ExecuteNonQuery();
                    }
                };
                FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression <AlterColumnExpression>(expression, this);
                if (this.FBOptions.UndoEnabled)
                {
                    fbExpression.AddUndoExpression(unSet);
                }
                RegisterExpression(fbExpression);
                InternalProcess((Generator as FirebirdGenerator).GenerateSetNull(expression.Column));
            }

            //Change default value
            if (!FirebirdGenerator.DefaultValuesMatch(colDef, expression.Column))
            {
                IMigrationExpression defaultConstraint;
                IMigrationExpression unsetDefaultConstraint;
                if (expression.Column.DefaultValue is ColumnDefinition.UndefinedDefaultValue)
                {
                    defaultConstraint = new DeleteDefaultConstraintExpression()
                    {
                        SchemaName = expression.SchemaName,
                        TableName  = expression.TableName,
                        ColumnName = expression.Column.Name
                    };
                }
                else
                {
                    defaultConstraint = new AlterDefaultConstraintExpression()
                    {
                        ColumnName   = expression.Column.Name,
                        DefaultValue = expression.Column.DefaultValue,
                        TableName    = expression.TableName,
                        SchemaName   = expression.SchemaName
                    };
                }

                if (colDef.DefaultValue is ColumnDefinition.UndefinedDefaultValue)
                {
                    unsetDefaultConstraint = new DeleteDefaultConstraintExpression()
                    {
                        ColumnName = colDef.Name,
                        TableName  = expression.TableName,
                        SchemaName = expression.SchemaName
                    };
                }
                else
                {
                    unsetDefaultConstraint = new AlterDefaultConstraintExpression()
                    {
                        ColumnName   = colDef.Name,
                        DefaultValue = colDef.DefaultValue,
                        TableName    = expression.TableName,
                        SchemaName   = expression.SchemaName
                    };
                }

                FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression(defaultConstraint, defaultConstraint.GetType(), this);
                if (this.FBOptions.UndoEnabled)
                {
                    fbExpression.AddUndoExpression(unsetDefaultConstraint);
                }
                RegisterExpression(fbExpression);
                if (defaultConstraint is DeleteDefaultConstraintExpression)
                {
                    InternalProcess(Generator.Generate(defaultConstraint as DeleteDefaultConstraintExpression));
                }
                else if (defaultConstraint is AlterDefaultConstraintExpression)
                {
                    InternalProcess(Generator.Generate(defaultConstraint as AlterDefaultConstraintExpression));
                }
                else
                {
                    throw new InvalidOperationException("No expression generated for alter default constraint");
                }
            }

            //Change type
            if (!FirebirdGenerator.ColumnTypesMatch(colDef, expression.Column))
            {
                PerformDBOperationExpression unSet = new PerformDBOperationExpression();
                unSet.Operation = (connection, transaction) =>
                {
                    string sql = (Generator as FirebirdGenerator).GenerateSetType(colDef);
                    Announcer.Sql(sql);
                    using (var cmd = Factory.CreateCommand(sql, connection, transaction))
                    {
                        cmd.CommandTimeout = Options.Timeout;
                        cmd.ExecuteNonQuery();
                    }
                };
                FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression <AlterColumnExpression>(expression, this);
                if (this.FBOptions.UndoEnabled)
                {
                    fbExpression.AddUndoExpression(unSet);
                }
                RegisterExpression(fbExpression);
                InternalProcess((Generator as FirebirdGenerator).GenerateSetType(expression.Column));
            }

            bool identitySequenceExists;

            try
            {
                identitySequenceExists = SequenceExists(String.Empty, GetSequenceName(expression.TableName, expression.Column.Name));
            }
            catch (ArgumentException)
            {
                identitySequenceExists = false;
            }


            //Adjust identity generators
            if (expression.Column.IsIdentity)
            {
                if (!identitySequenceExists)
                {
                    CreateSequenceForIdentity(expression.TableName, expression.Column.Name);
                }
            }
            else
            {
                if (identitySequenceExists)
                {
                    DeleteSequenceForIdentity(expression.TableName, expression.Column.Name);
                }
            }
        }
示例#28
0
 public abstract string Generate(AlterDefaultConstraintExpression expression);
示例#29
0
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     return compatabilityMode.HandleCompatabilty("Altering of default constraints is not supporteed for MySql");
 }
        public override void Process(AlterColumnExpression expression)
        {
            Truncator.Truncate(expression);
            CheckColumn(expression.TableName, expression.Column.Name);
            FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this, _quoter);
            FirebirdTableSchema    table  = schema.GetTableSchema(expression.TableName);
            ColumnDefinition       colDef = table.Definition.Columns.FirstOrDefault(x => x.Name == _quoter.ToFbObjectName(expression.Column.Name));

            var generator = (FirebirdGenerator)Generator;

            var tableName = expression.Column.TableName ?? expression.TableName;

            //Change nullable constraint
            if (colDef == null || colDef.IsNullable != expression.Column.IsNullable)
            {
                string nullConstraintCommand;
                if (IsFirebird3)
                {
                    nullConstraintCommand = generator.GenerateSetNull3(tableName, expression.Column);
                }
                else
                {
                    nullConstraintCommand = generator.GenerateSetNullPre3(tableName, expression.Column);
                }

                InternalProcess(nullConstraintCommand);
            }

            //Change default value
            if (colDef == null || !FirebirdGenerator.DefaultValuesMatch(colDef, expression.Column))
            {
                IMigrationExpression defaultConstraint;
                if (expression.Column.DefaultValue is ColumnDefinition.UndefinedDefaultValue)
                {
                    defaultConstraint = new DeleteDefaultConstraintExpression()
                    {
                        SchemaName = expression.SchemaName,
                        TableName  = expression.TableName,
                        ColumnName = expression.Column.Name
                    };
                }
                else
                {
                    defaultConstraint = new AlterDefaultConstraintExpression()
                    {
                        ColumnName   = expression.Column.Name,
                        DefaultValue = expression.Column.DefaultValue,
                        TableName    = expression.TableName,
                        SchemaName   = expression.SchemaName
                    };
                }

                if (defaultConstraint is DeleteDefaultConstraintExpression deleteDefaultConstraintExpression)
                {
                    InternalProcess(Generator.Generate(deleteDefaultConstraintExpression));
                }
                else
                {
                    InternalProcess(Generator.Generate((AlterDefaultConstraintExpression)defaultConstraint));
                }
            }

            //Change type
            if (colDef == null || !FirebirdGenerator.ColumnTypesMatch(colDef, expression.Column))
            {
                InternalProcess(generator.GenerateSetType(tableName, expression.Column));
            }

            bool identitySequenceExists;

            try
            {
                identitySequenceExists = SequenceExists(string.Empty, GetSequenceName(expression.TableName, expression.Column.Name));
            }
            catch (ArgumentException)
            {
                identitySequenceExists = false;
            }


            //Adjust identity generators
            if (expression.Column.IsIdentity)
            {
                if (!identitySequenceExists)
                {
                    CreateSequenceForIdentity(expression.TableName, expression.Column.Name);
                }
            }
            else
            {
                if (identitySequenceExists)
                {
                    DeleteSequenceForIdentity(expression.TableName, expression.Column.Name);
                }
            }
        }
示例#31
0
 public override string Generate(AlterDefaultConstraintExpression expression)
 {
     return(compatabilityMode.HandleCompatabilty("Altering of default constraints is not supporteed for MySql"));
 }