private void Generate(DropTableOperation op) { using (var tw = Format.CreateIndentedTextWriter()) { tw.Write("DROP TABLE "); tw.Write(Format.ReservedWord(Format.RemoveDbo(op.Name))); AddSqlStatement(tw); } }
private void Generate(RenameTableOperation op) { using (var tw = Format.CreateIndentedTextWriter()) { tw.Write("ALTER TABLE "); tw.Write(Format.ReservedWord(Format.RemoveDbo(op.Name))); tw.Write(" RENAME TO "); tw.Write(Format.ReservedWord(Format.RemoveDbo(op.NewName))); AddSqlStatement(tw); } }
private void Generate(CreateTableOperation op) { foreach (var column in op.Columns) { SetAnnotatedColumn(column, op.Name); } using (var tw = Format.CreateIndentedTextWriter()) { GenerateCreateTableCommand(op, tw); AddSqlStatement(tw); } }
private void Generate(DropIndexOperation op) { using (var tw = Format.CreateIndentedTextWriter()) { var indexName = op.HasDefaultName ? string.Format(CultureInfo.InvariantCulture, "{0}_{1}", op.Name, Format.ReservedWord(Format.RemoveDbo(op.Table))) : op.Name; tw.Write("DROP INDEX "); tw.Write(indexName); AddSqlStatement(tw); } }
/// <summary> /// Generate CREATE TABLE command /// </summary> private void GenerateCreateTableCommand(CreateTableOperation op, IndentedTextWriter tw) { tw.WriteLine("CREATE TABLE " + Format.ReservedWord(Format.RemoveDbo(op.Name)) + " ("); tw.Indent++; bool hasGeneratedIdPk = false; for (int i = 0; i < op.Columns.Count; i++) { ColumnModel lcmDadosColuna = op.Columns.ToList()[i]; hasGeneratedIdPk |= Generate(lcmDadosColuna, tw, op.PrimaryKey); if (i < op.Columns.Count - 1) { tw.WriteLine(","); } } if ((op.PrimaryKey != null) && !hasGeneratedIdPk) { tw.WriteLine(","); tw.Write("CONSTRAINT "); tw.Write(Format.RemoveDbo(op.PrimaryKey.Name)); tw.Write(" PRIMARY KEY "); tw.Write("("); for (int li = 0; li < op.PrimaryKey.Columns.Count; li++) { var lstrNomeColuna = op.PrimaryKey.Columns[li]; tw.Write(lstrNomeColuna); if (li < op.PrimaryKey.Columns.Count - 1) { tw.WriteLine(","); } } tw.WriteLine(")"); } else { tw.WriteLine(); } tw.Indent--; tw.Write(")"); }
private void Generate(AddForeignKeyOperation op) { if (!_migrationStatements.Any(item => item.Sql.Contains("CREATE TABLE"))) { return; } var createScript = string.Format(CultureInfo.InvariantCulture, "CREATE TABLE {0} (", Format.ReservedWord(Format.RemoveDbo(op.DependentTable))); var migrationStatement = _migrationStatements .FirstOrDefault(item => item.Sql .Contains(createScript)); if (migrationStatement == null) { throw new NotSupportedException("SQL command to create the dependent table not found."); } using (var tw = Format.CreateIndentedTextWriter()) { tw.Write(migrationStatement.Sql.TrimEnd(')').TrimEnd('\r', '\n')); tw.WriteLine(","); tw.Indent++; var referenceList = op.DependentColumns.Select(dependentColumn => op.PrincipalColumns[op.DependentColumns.IndexOf(dependentColumn)]).ToList(); var cmd = string.Format(CultureInfo.InvariantCulture, "FOREIGN KEY ({0}) REFERENCES [{1}] ({2}) {3}", string.Join(", ", op.DependentColumns.Select(Format.ReservedWord)), Format.ReservedWord(op.PrincipalTable), string.Join(", ", referenceList.Select(Format.ReservedWord)), (op.CascadeDelete ? "ON DELETE CASCADE" : "ON DELETE NO ACTION")); tw.WriteLine(Format.RemoveDbo(cmd)); tw.Indent--; tw.Write(")"); migrationStatement.Sql = tw.InnerWriter.ToString(); } }
private void Generate(AddColumnOperation op) { SetAnnotatedColumn(op.Column, op.Table); using (var tw = Format.CreateIndentedTextWriter()) { tw.Write("ALTER TABLE "); tw.Write(Format.ReservedWord(Format.RemoveDbo(op.Table))); tw.Write(" ADD "); var col = op.Column; Generate(col, tw, null); if ((col.IsNullable != null) && !col.IsNullable.Value && (col.DefaultValue == null) && (string.IsNullOrWhiteSpace(col.DefaultValueSql)) && !col.IsIdentity && !col.IsTimestamp && ( col.StoreType == null || ( !col.StoreType.Equals("rowversion", StringComparison.OrdinalIgnoreCase) && !col.StoreType.Equals("timestamp", StringComparison.OrdinalIgnoreCase)))) { tw.Write(" DEFAULT "); if (col.Type == PrimitiveTypeKind.DateTime) { tw.Write(Generate(DateTime.Parse("1900-01-01 00:00:00", CultureInfo.InvariantCulture))); } else { tw.Write(Generate((dynamic)col.ClrDefaultValue)); } } AddSqlStatement(tw); } }
private static void SetAnnotatedColumn(ColumnModel column, string tableName) { AnnotationValues values; if (column.Annotations.TryGetValue("SqlDefaultValue", out values)) { if (values.NewValue == null) { column.DefaultValueSql = null; using (var writer = Format.CreateIndentedTextWriter()) { // Drop Constraint //writer.WriteLine(GetSqlDropConstraintQuery(tableName, column.Name)); //Statement(writer); } } else { column.DefaultValueSql = (string)values.NewValue; } } }
private void Generate(CreateIndexOperation op) { using (var tw = Format.CreateIndentedTextWriter()) { var indexName = op.HasDefaultName ? string.Format(CultureInfo.InvariantCulture, "{0}_{1}", op.Name, Format.RemoveDbo(op.Table)) : op.Name; tw.Write("CREATE "); if (op.IsUnique) { tw.Write(" UNIQUE "); } tw.Write("INDEX "); tw.Write(Format.ReservedWord(indexName)); tw.Write(" ON "); tw.Write(Format.ReservedWord(Format.RemoveDbo(op.Table))); tw.Write("("); for (int i = 0; i < op.Columns.Count; i++) { tw.Write(Format.ReservedWord(op.Columns[i])); if (i < op.Columns.Count - 1) { tw.WriteLine(","); } } tw.Write(")"); AddSqlStatement(tw); } }
/// <summary> /// Generate column definition. Returns <c>true</c> if the column was the primary key. /// </summary> private bool Generate(ColumnModel column, IndentedTextWriter tw, PrimaryKeyOperation primaryKeyOp) { bool isIdPk = false; tw.Write(Format.ReservedWord(column.Name)); tw.Write(" "); bool isPrimaryKey = false; if (primaryKeyOp != null) { isPrimaryKey = primaryKeyOp.Columns.Contains(column.Name); } if (isPrimaryKey) { if ((column.Type == PrimitiveTypeKind.Int16) || (column.Type == PrimitiveTypeKind.Int32)) { tw.Write("INTEGER"); } else { tw.Write(Format.BuildColumnType(_providerManifest, column)); } if (column.IsIdentity || column.Annotations.ContainsKey("Autoincrement")) { tw.Write(" PRIMARY KEY"); isIdPk = true; if (column.Annotations.ContainsKey("Autoincrement")) { tw.Write(" AUTOINCREMENT"); } } } else { tw.Write(Format.BuildColumnType(_providerManifest, column)); if ((column.IsNullable != null) && !column.IsNullable.Value) { tw.Write(" NOT NULL"); } if (column.DefaultValue != null) { tw.Write(" DEFAULT "); tw.Write(Generate((dynamic)column.DefaultValue)); } else if (!string.IsNullOrWhiteSpace(column.DefaultValueSql)) { tw.Write(" DEFAULT "); tw.Write("(" + column.DefaultValueSql + ")"); } AnnotationValues uniqueAnnotation; if (column.Annotations.TryGetValue("Unique", out uniqueAnnotation)) { tw.Write(" UNIQUE" + Format.UniqueConflictText(uniqueAnnotation)); } AnnotationValues collateAnnotation; if (column.Annotations.TryGetValue("Collate", out collateAnnotation)) { tw.Write(Format.CollateFunctionText(collateAnnotation)); } } return(isIdPk); }
private void Generate(SqlOperation opeSQL) { var sql = Format.RemoveDbo(opeSQL.Sql); AddSqlStatement(sql, opeSQL.SuppressTransaction); }