protected override void Generate( CreateTableOperation operation, IModel model, MigrationCommandListBuilder builder) { base.Generate(operation, model, builder, terminate: false); var memoryOptimized = IsMemoryOptimized(operation); if (memoryOptimized) { builder.AppendLine(); using (builder.Indent()) { builder.AppendLine("WITH"); using (builder.Indent()) { builder.Append("(MEMORY_OPTIMIZED = ON)"); } } } builder .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator) .EndCommand(suppressTransaction: memoryOptimized); }
protected override void Generate( InsertDataOperation operation, IModel model, MigrationCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); builder.Append("IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [object_id] = OBJECT_ID(N'"); if (operation.Schema != null) { builder .Append(Dependencies.SqlGenerationHelper.EscapeLiteral(operation.Schema)) .Append("."); } builder .Append(Dependencies.SqlGenerationHelper.EscapeLiteral(operation.Table)) .AppendLine("'))"); using (builder.Indent()) { builder .Append("SET IDENTITY_INSERT ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema)) .Append(" ON") .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); } base.Generate(operation, model, builder, terminate: false); builder .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator) .Append("IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [object_id] = OBJECT_ID(N'"); if (operation.Schema != null) { builder .Append(Dependencies.SqlGenerationHelper.EscapeLiteral(operation.Schema)) .Append("."); } builder .Append(Dependencies.SqlGenerationHelper.EscapeLiteral(operation.Table)) .AppendLine("'))"); using (builder.Indent()) { builder .Append("SET IDENTITY_INSERT ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema)) .Append(" OFF") .AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); } builder.EndCommand(); }
protected virtual void Generate(CreateUserDefinedTypeOperation operation, IModel model, MigrationCommandListBuilder builder, bool terminate = true) { builder .Append("CREATE TYPE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { for (var i = 0; i < operation.Columns.Count; i++) { var column = operation.Columns[i]; ColumnDefinition(column, model, builder); if (i != operation.Columns.Count - 1) { builder.AppendLine(","); } } builder.AppendLine(); } builder.Append(")"); if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } }
/// <summary> /// Builds commands for the given <see cref="CreateTableOperation" /> by making calls on the given /// <see cref="MigrationCommandListBuilder" />. /// </summary> /// <param name="operation"> The operation. </param> /// <param name="model"> The target model which may be <c>null</c> if the operations exist without a model. </param> /// <param name="builder"> The command builder to use to build the commands. </param> /// <param name="terminate"> Indicates whether or not to terminate the command after generating SQL for the operation. </param> protected override void Generate( CreateTableOperation operation, IModel model, MigrationCommandListBuilder builder, bool terminate = true) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); operation.Schema = _taosConnectionStringBuilder.DataBase; builder .Append("CREATE TABLE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { CreateTableColumns(operation, model, builder); builder.AppendLine(); } builder.Append(")"); if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } }
/// <summary> /// Builds commands for the given <see cref="CreateTableOperation" /> by making calls on the given /// <see cref="MigrationCommandListBuilder" />. /// </summary> /// <param name="operation"> The operation. </param> /// <param name="model"> The target model which may be <c>null</c> if the operations exist without a model. </param> /// <param name="builder"> The command builder to use to build the commands. </param> /// <param name="terminate"> Indicates whether or not to terminate the command after generating SQL for the operation. </param> protected override void Generate( CreateTableOperation operation, IModel model, MigrationCommandListBuilder builder, bool terminate = true) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); // Lifts a primary key definition into the typename. // This handles the quirks of creating integer primary keys using autoincrement, not default rowid behavior. if (operation.PrimaryKey?.Columns.Length == 1) { var columnOp = operation.Columns.FirstOrDefault(o => o.Name == operation.PrimaryKey.Columns[0]); if (columnOp != null) { columnOp.AddAnnotation(SqliteAnnotationNames.InlinePrimaryKey, true); if (!string.IsNullOrEmpty(operation.PrimaryKey.Name)) { columnOp.AddAnnotation(SqliteAnnotationNames.InlinePrimaryKeyName, operation.PrimaryKey.Name); } operation.PrimaryKey = null; } } if (string.IsNullOrEmpty(operation.Comment)) { base.Generate(operation, model, builder, terminate); } else { builder .Append("CREATE TABLE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { builder .AppendLines(Dependencies.SqlGenerationHelper.GenerateComment(operation.Comment)) .AppendLine(); CreateTableColumns(operation, model, builder); CreateTableConstraints(operation, model, builder); builder.AppendLine(); } builder.Append(")"); if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } } }
protected virtual void Generate( [NotNull] CreateTableOperation operation, [CanBeNull] IModel model, [NotNull] MigrationCommandListBuilder builder, bool terminate) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); builder .Append("CREATE TABLE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { for (var i = 0; i < operation.Columns.Count; i++) { var column = operation.Columns[i]; ColumnDefinition(column, model, builder); if (i != operation.Columns.Count - 1) { builder.AppendLine(","); } } if (operation.PrimaryKey != null) { builder.AppendLine(","); PrimaryKeyConstraint(operation.PrimaryKey, model, builder); } foreach (var uniqueConstraint in operation.UniqueConstraints) { builder.AppendLine(","); UniqueConstraint(uniqueConstraint, model, builder); } foreach (var foreignKey in operation.ForeignKeys) { builder.AppendLine(","); ForeignKeyConstraint(foreignKey, model, builder); } builder.AppendLine(); } builder.Append(")"); if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } }
protected override void Generate(CreateTableOperation operation, IModel model, MigrationCommandListBuilder builder, bool terminate = true) { builder .Append("CREATE TABLE ") .Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name, operation.Schema)) .AppendLine(" ("); using (builder.Indent()) { for (var i = 0; i < operation.Columns.Count; i++) { var column = operation.Columns[i]; ColumnDefinition(column, model, builder); if (i != operation.Columns.Count - 1) { builder.AppendLine(","); } } if (operation.PrimaryKey != null) { builder.AppendLine(","); PrimaryKeyConstraint(operation.PrimaryKey, model, builder); } builder.AppendLine(); } builder.Append(")"); var entityType = model.GetEntityTypes().First(s => s.GetTableName() == operation.Name); var options = entityType.GetClusteringOrderByOptions(); if (options.Any()) { builder.AppendLine().Append("WITH CLUSTERING ORDER BY ("); var lstOpts = new List <string>(); foreach (var option in options) { lstOpts.Add($"{Dependencies.SqlGenerationHelper.DelimitIdentifier(option.ColumnName)} {(option.Order == CassandraClusteringOrderByOptions.ASC ? "ASC" : "DESC")}"); } builder.Append(string.Join(",", lstOpts)); builder.Append(")"); } if (terminate) { builder.AppendLine(Dependencies.SqlGenerationHelper.StatementTerminator); EndStatement(builder); } }
protected override void Generate( AlterDatabaseOperation operation, IModel model, MigrationCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); builder.AppendLine("IF SERVERPROPERTY('IsXTPSupported') = 1 AND SERVERPROPERTY('EngineEdition') <> 5"); using (builder.Indent()) { builder .AppendLine("BEGIN") .AppendLine("IF NOT EXISTS ("); using (builder.Indent()) { builder .Append("SELECT 1 FROM [sys].[filegroups] [FG] ") .Append("JOIN [sys].[database_files] [F] ON [FG].[data_space_id] = [F].[data_space_id] ") .AppendLine("WHERE [FG].[type] = N'FX' AND [F].[type] = 2)"); } using (builder.Indent()) { builder .AppendLine("BEGIN") .AppendLine("DECLARE @db_name NVARCHAR(MAX) = DB_NAME();") .AppendLine("DECLARE @fg_name NVARCHAR(MAX);") .AppendLine("SELECT TOP(1) @fg_name = [name] FROM [sys].[filegroups] WHERE [type] = N'FX';") .AppendLine() .AppendLine("IF @fg_name IS NULL"); using (builder.Indent()) { builder .AppendLine("BEGIN") .AppendLine("SET @fg_name = @db_name + N'_MODFG';") .AppendLine("EXEC(N'ALTER DATABASE CURRENT ADD FILEGROUP [' + @fg_name + '] CONTAINS MEMORY_OPTIMIZED_DATA;');") .AppendLine("END"); } builder .AppendLine() .AppendLine("DECLARE @path NVARCHAR(MAX);") .Append("SELECT TOP(1) @path = [physical_name] FROM [sys].[database_files] ") .AppendLine("WHERE charindex('\\', [physical_name]) > 0 ORDER BY [file_id];") .AppendLine("IF (@path IS NULL)") .IncrementIndent().AppendLine("SET @path = '\\' + @db_name;").DecrementIndent() .AppendLine() .AppendLine("DECLARE @filename NVARCHAR(MAX) = right(@path, charindex('\\', reverse(@path)) - 1);") .AppendLine("SET @filename = REPLACE(left(@filename, len(@filename) - charindex('.', reverse(@filename))), '''', '''''') + N'_MOD';") .AppendLine("DECLARE @new_path NVARCHAR(MAX) = REPLACE(CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS NVARCHAR(MAX)), '''', '''''') + @filename;") .AppendLine() .AppendLine("EXEC(N'"); using (builder.Indent()) { builder .AppendLine("ALTER DATABASE CURRENT") .AppendLine("ADD FILE (NAME=''' + @filename + ''', filename=''' + @new_path + ''')") .AppendLine("TO FILEGROUP [' + @fg_name + '];')"); } builder.AppendLine("END"); } builder.AppendLine("END"); } builder.AppendLine() .AppendLine("IF SERVERPROPERTY('IsXTPSupported') = 1") .AppendLine("EXEC(N'"); using (builder.Indent()) { builder .AppendLine("ALTER DATABASE CURRENT") .AppendLine("SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;')"); } builder.EndCommand(suppressTransaction: true); }