public void WhenDefaultSchemaConventionIsChangedAndSchemaIsNotSetThenSetSchema()
        {
            var expression = new CreateTableExpression {
                TableName = "table1"
            };

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

            Assert.That(processed.SchemaName, Is.EqualTo("testdefault"));
        }
        public void IsEscapingTableNameCorrectlyOnTableCreate()
        {
            var expression = new CreateTableExpression {
                TableName = _tableNameThatMustBeEscaped
            };

            expression.Columns.Add(_column.Object);

            Processor.Process(expression);
        }
示例#3
0
        public void IsEscapingTableNameCorrectlyOnTableExists()
        {
            CreateTableExpression expression = new CreateTableExpression {
                TableName = tableNameThanMustBeEscaped
            };

            expression.Columns.Add(column.Object);
            processor.Process(expression);
            processor.TableExists(null, tableNameThanMustBeEscaped).ShouldBeTrue();
        }
        public void WhenDefaultSchemaConventionIsAppliedAndSchemaIsNotSetThenSchemaShouldBeNull()
        {
            var expression = new CreateTableExpression {
                TableName = "table1"
            };

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

            Assert.That(processed.SchemaName, Is.Null);
        }
        public void WhenDefaultSchemaConventionIsAppliedAndSchemaIsSetThenSchemaShouldNotBeChanged()
        {
            var expression = new CreateTableExpression {
                SchemaName = "testschema", TableName = "table1"
            };

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

            Assert.That(processed.SchemaName, Is.EqualTo("testschema"));
        }
        public void ErrorIsReturnedWhenTableNameIsEmptyString()
        {
            var expression = new CreateTableExpression {
                TableName = string.Empty
            };

            var errors = ValidationHelper.CollectErrors(expression);

            errors.ShouldContain(ErrorMessages.TableNameCannotBeNullOrEmpty);
        }
        public void ErrorIsNotReturnedWhenTableNameIsSet()
        {
            var expression = new CreateTableExpression {
                TableName = "table1"
            };

            var errors = ValidationHelper.CollectErrors(expression);

            Assert.That(errors.Count, Is.EqualTo(0));
        }
示例#8
0
        public void CanCreateTableWithDefaultValue()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.Columns[0].DefaultValue = "abc";
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"public\".\"NewTable\" (\"ColumnName1\" text NOT NULL DEFAULT 'abc', \"ColumnName2\" integer NOT NULL)");
        }
        public ICreateTableWithColumnSyntax Table(string tableName)
        {
            var expression = new CreateTableExpression(_context.CurrentDatabaseProvider, _databaseProviders, _sqlSyntax)
            {
                TableName = tableName
            };

            _context.Expressions.Add(expression);
            return(new CreateTableBuilder(_context, _databaseProviders, expression));
        }
示例#10
0
        public void CanCreateTableInSchema()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.SchemaName = "wibble";
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"wibble\".\"NewTable\" (\"ColumnName1\" text NOT NULL, \"ColumnName2\" integer NOT NULL)");
        }
示例#11
0
        public void CanCreateTableWithPrimaryKey()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.Columns[0].IsPrimaryKey = true;
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"public\".\"NewTable\" (\"ColumnName1\" text NOT NULL, \"ColumnName2\" integer NOT NULL, PRIMARY KEY (\"ColumnName1\"))");
        }
示例#12
0
        public void IsEscapingTableNameCorrectlyOnReadTableData()
        {
            var expression = new CreateTableExpression {
                TableName = tableNameThanMustBeEscaped
            };

            expression.Columns.Add(column.Object);
            _processor.Process(expression);
            _processor.ReadTableData(null, tableNameThanMustBeEscaped).Tables.Count.ShouldBe(1);
        }
        public void CanCreateTableWithDefaultValue()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.Columns[0].DefaultValue = "abc";
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"NewTable\" (\"ColumnName1\" BLOB SUB_TYPE TEXT DEFAULT 'abc' NOT NULL, \"ColumnName2\" INTEGER NOT NULL)");
        }
        public void CanCreateTableInSchema()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.SchemaName = "wibble";
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"NewTable\" (\"ColumnName1\" BLOB SUB_TYPE TEXT NOT NULL, \"ColumnName2\" INTEGER NOT NULL)");
        }
        public void CanCreateTableWithMultiColumnPrimaryKey()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.Columns[0].IsPrimaryKey = true;
            expression.Columns[1].IsPrimaryKey = true;
            string sql = generator.Generate(expression);

            sql.ShouldBe("CREATE TABLE \"NewTable\" (\"ColumnName1\" BLOB SUB_TYPE TEXT NOT NULL, \"ColumnName2\" INTEGER NOT NULL, PRIMARY KEY (\"ColumnName1\", \"ColumnName2\"))");
        }
示例#16
0
        public override void Process(CreateTableExpression expression)
        {
            if (TableExists(expression.SchemaName, expression.TableName))
            {
                return;
            }

            var sql = Generator.Generate(expression);

            ProcessWithErrorFilter(sql, expression.GetErrorFilters());
        }
示例#17
0
        /// <summary>
        /// Gets create table expression for entity type
        /// </summary>
        /// <param name="type">Entity type</param>
        /// <returns>Expression to create a table</returns>
        public virtual CreateTableExpression GetCreateTableExpression(Type type)
        {
            var expression = new CreateTableExpression {
                TableName = NameCompatibilityManager.GetTableName(type)
            };
            var builder = new CreateTableExpressionBuilder(expression, CreateNullMigrationContext());

            RetrieveTableExpressions(type, builder);

            return(builder.Expression);
        }
示例#18
0
        public void CanCreateTableExpression()
        {
            var expression = new CreateTableExpression {
                TableName = _tableName
            };

            expression.Columns.Add(_column.Object);

            Processor.Process(expression);
            Processor.TableExists(null, _tableName).ShouldBeTrue();
            Processor.ColumnExists(null, _tableName, _columnName).ShouldBeTrue();
        }
        public override string Generate(CreateTableExpression expression)
        {
            var descriptionStatements      = DescriptionGenerator.GenerateDescriptionStatements(expression);
            var createTableStatement       = base.Generate(expression);
            var descriptionStatementsArray = descriptionStatements as string[] ?? descriptionStatements.ToArray();

            if (!descriptionStatementsArray.Any())
            {
                return(createTableStatement);
            }
            return(ComposeStatements(createTableStatement, descriptionStatementsArray));
        }
示例#20
0
        public void NotLoadingConventionSetFromAssemblyWithScanForMigrations()
        {
            var services = new ServiceCollection()
                           .AddFluentMigratorCore()
                           .ConfigureRunner(rb => rb.AddSQLite().ScanIn(this.GetType().Assembly).For.Migrations())
                           .BuildServiceProvider(false);
            var conventionSet      = services.GetRequiredService <IConventionSet>();
            ISchemaExpression expr = new CreateTableExpression();

            conventionSet.SchemaConvention.Apply(expr);
            Assert.AreEqual(null, expr.SchemaName);
        }
        public void CanCreateTableWithMultipartKey()
        {
            string tableName = "NewTable";
            CreateTableExpression expression = GetCreateTableExpression(tableName);

            expression.Columns[0].IsPrimaryKey = true;
            expression.Columns[1].IsPrimaryKey = true;
            string sql = generator.Generate(expression);

            // See the note in OracleColumn about why the PK should not be named
            sql.ShouldBe("CREATE TABLE \"public\".\"NewTable\" (\"ColumnName1\" text NOT NULL, \"ColumnName2\" integer NOT NULL, CONSTRAINT \"ColumnName1_ColumnName2_PK\" PRIMARY KEY (\"ColumnName1\",\"ColumnName2\"))");
        }
示例#22
0
        public void WhenDefaultSchemaConventionIsChangedAndSchemaIsNotSetThenSetSchema()
        {
            var expression = new CreateTableExpression {
                TableName = "table1"
            };
            var migrationConventions = new MigrationConventions {
                GetDefaultSchema = () => "testdefault"
            };

            expression.ApplyConventions(migrationConventions);

            Assert.That(expression.SchemaName, Is.EqualTo("testdefault"));
        }
        public override string Generate(CreateTableExpression expression)
        {
            var descriptionStatements      = DescriptionGenerator.GenerateDescriptionStatements(expression);
            var createTableStatement       = string.Format("CREATE TABLE {0}.{1}", Quoter.QuoteSchemaName(expression.SchemaName), base.Generate(expression));
            var descriptionStatementsArray = descriptionStatements as string[] ?? descriptionStatements.ToArray();

            if (!descriptionStatementsArray.Any())
            {
                return(createTableStatement);
            }

            return(ComposeStatements(createTableStatement, descriptionStatementsArray));
        }
        public void CanUseSystemMethodCurrentDateTimeAsADefaultValueForAColumn()
        {
            var expression = new CreateTableExpression {
                TableName = "TestTable1"
            };

            expression.Columns.Add(new ColumnDefinition {
                Name = "DateTimeCol", Type = DbType.DateTime, DefaultValue = SystemMethods.CurrentDateTime
            });

            var result = Generator.Generate(expression);

            result.ShouldBe("CREATE TABLE \"TestTable1\" (\"DateTimeCol\" TEXT NOT NULL DEFAULT (datetime('now','localtime')))");
        }
示例#25
0
        public static CreateTableExpression GetCreateTableWithAutoIncrementExpression()
        {
            var expression = new CreateTableExpression {
                TableName = TestTableName1
            };

            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName1, IsIdentity = true, Type = DbType.Int32
            });
            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName2, Type = DbType.Int32
            });
            return(expression);
        }
示例#26
0
        public static CreateTableExpression GetCreateTableWithNamedMultiColumnPrimaryKeyExpression()
        {
            var expression = new CreateTableExpression {
                TableName = TestTableName1
            };

            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName1, IsPrimaryKey = true, PrimaryKeyName = "TestKey", Type = DbType.String
            });
            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName2, Type = DbType.Int32, IsPrimaryKey = true
            });
            return(expression);
        }
示例#27
0
        public static CreateTableExpression GetCreateTableWithNullableColumn()
        {
            var expression = new CreateTableExpression {
                TableName = TestTableName1
            };

            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName1, IsNullable = true, Type = DbType.String
            });
            expression.Columns.Add(new ColumnDefinition {
                Name = TestColumnName2, Type = DbType.Int32
            });
            return(expression);
        }
示例#28
0
        public void CanUseSystemMethodCurrentUTCDateTimeAsDefaultValueForColumn()
        {
            var expression = new CreateTableExpression {
                TableName = "TestTable1"
            };

            expression.Columns.Add(new ColumnDefinition {
                Name = "DateTimeCol", Type = DbType.DateTime, DefaultValue = SystemMethods.CurrentUTCDateTime
            });

            var result = Generator.Generate(expression);

            result.ShouldBe("CREATE TABLE \"TestTable1\" (\"DateTimeCol\" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP)");
        }
        public void CanCreateTableWithIgnoredRowGuidCol()
        {
            var expression = new CreateTableExpression()
            {
                TableName = "TestTable1",
            };

            new CreateTableExpressionBuilder(expression, new MigrationContext(null, null, null, null))
            .WithColumn("Id").AsGuid().PrimaryKey().RowGuid();

            var result = Generator.Generate(expression);

            result.ShouldBe("CREATE TABLE [dbo].[TestTable1] ([Id] UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL, PRIMARY KEY ([Id]))");
        }
示例#30
0
        private IEnumerable <DifferentialExpression> GetAlters(CreateTableExpression from, CreateTableExpression to)
        {
            if (from == null || to == null)
            {
                return(Enumerable.Empty <DifferentialExpression>());
            }

            var removedCols = from.Columns.Where(f => !to.Columns.Any(t => AreSameColumnName(f, t)))
                              .Select(c => new CreateColumnExpression
            {
                TableName  = to.TableName,
                SchemaName = to.SchemaName,
                Column     = c
            }).Select(x => new DifferentialExpression(x.Reverse(), x));

            var addedCols = to.Columns.Where(t => !from.Columns.Any(f => AreSameColumnName(f, t)))
                            .Select(c => new CreateColumnExpression
            {
                TableName  = to.TableName,
                SchemaName = to.SchemaName,
                Column     = c
            }).Select(x => new DifferentialExpression(x));

            var matches = from.Columns
                          .Select(f => new
            {
                From = f,
                To   = to.Columns.FirstOrDefault(t => AreSameColumnName(f, t))
            }).Where(x => x.To != null)     //if To == null, this is a dropped column
                          .Where(x => !AreSameColumnDef(x.From, x.To)).ToList();

            var updatedCols = matches.Select(x => new DifferentialExpression(
                                                 new ExtendedAlterColumnExpression
            {
                SchemaName = to.SchemaName,
                TableName  = to.TableName,
                Column     = x.To,
                Previous   = x.From
            },
                                                 new AlterColumnExpression
            {
                SchemaName = to.SchemaName,
                TableName  = to.TableName,
                Column     = x.From
            }
                                                 ));

            return(addedCols.Concat(updatedCols).Concat(removedCols));
        }