protected override string CreateCreatePrimaryKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonPrimaryKeyGroup primaryKeyGroup) { var requiredTable = (MetaTable)tableGroup.RequiredItem; var primaryKey = (MetaPrimaryKey)primaryKeyGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE ["); sb.Append(requiredTable.Name); sb.Append("] ADD CONSTRAINT "); sb.Append(primaryKey.Name); sb.Append(" PRIMARY KEY ( "); bool first = true; foreach (String columnName in primaryKey.ColumnNames) { if (!first) { sb.Append(" ,\n "); } else { first = false; } sb.Append(columnName); sb.Append(" "); } sb.Append(")"); return(sb.ToString()); }
protected override string CreateCreateForeginKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonForeignKeyGroup foreignKeyGroup) { var requiredTable = (MetaTable)tableGroup.RequiredItem; var metaForeignKey = (MetaForeignKey)foreignKeyGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE ["); sb.Append(requiredTable.Name); sb.Append("] ADD CONSTRAINT "); sb.Append(metaForeignKey.Name); sb.Append(" FOREIGN KEY "); sb.Append(" ( "); IEnumerator <MetaForeignKeyColumnMapping> enumerator = metaForeignKey.ColumnMappings.GetEnumerator(); enumerator.Reset(); int i = 0; while (enumerator.MoveNext()) { MetaForeignKeyColumnMapping mapping = enumerator.Current; if (i > 0) { sb.Append(" , "); } sb.Append(mapping.FromColumn); i++; } sb.Append(" ) "); sb.Append(" REFERENCES "); sb.Append(metaForeignKey.ToTable); sb.Append(" ( "); enumerator = metaForeignKey.ColumnMappings.GetEnumerator(); enumerator.Reset(); i = 0; while (enumerator.MoveNext()) { MetaForeignKeyColumnMapping mapping = enumerator.Current; if (i > 0) { sb.Append(" , "); } sb.Append(mapping.ToColumn); i++; } sb.Append(" ) "); sb.Append(" ON DELETE ").Append(metaForeignKey.DeleteRule); if (metaForeignKey.UpdateRule != ReferentialRuleType.Restrict) { sb.Append(" ON UPDATE ").Append(metaForeignKey.UpdateRule); } return(sb.ToString()); }
protected override string CreateDropTableQuery(MetaComparisonTableGroup tableGroup) { var metaTable = (MetaTable)tableGroup.ExistingItem; var sb = new StringBuilder(); sb.Append("DROP TABLE "); sb.Append(metaTable.Name); return(sb.ToString()); }
protected override string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup , MetaComparisonPrimaryKeyGroup primaryKeyGroup) { var requiredTable = (MetaTable)tableGroup.ExistingItem; var primaryKey = (MetaColumn)primaryKeyGroup.ExistingItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE "); sb.Append(requiredTable.Name); sb.Append(" DROP PRIMARY KEY"); return(sb.ToString()); }
protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonForeignKeyGroup foreignKeyGroup) { var requiredTable = (MetaTable)tableGroup.RequiredItem; var metaForeignKey = (MetaForeignKey)foreignKeyGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE ["); sb.Append(requiredTable.Name); sb.Append("] DROP CONSTRAINT "); sb.Append(metaForeignKey.ToTable); return(sb.ToString()); }
protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup , MetaComparisonForeignKeyGroup foreignKeyGroup) { var requiredTable = (MetaTable)tableGroup.ExistingItem; var metaForeignKey = (MetaColumn)foreignKeyGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE "); sb.Append(requiredTable.Name); sb.Append(" DROP FOREIGN KEY "); sb.Append(metaForeignKey.Name); return(sb.ToString()); }
protected override string CreateDropColumnQuery(MetaComparisonTableGroup tableGroup, MetaComparisonColumnGroup columnGroup) { var metaTable = (MetaTable)tableGroup.RequiredItem; var metaColumn = (MetaColumn)columnGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE ["); sb.Append(metaTable.Name); sb.Append("] DROP COLUMN "); sb.Append(metaColumn.Name); sb.Append(" "); return(sb.ToString()); }
protected override string CreateAlterColumnQuery(MetaComparisonTableGroup tableGroup, MetaComparisonColumnGroup columnGroup) { var metaTable = (MetaTable)tableGroup.RequiredItem; var metaColumn = (MetaColumn)columnGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("ALTER TABLE ["); sb.Append(metaTable.Name); sb.Append("] ALTER "); sb.Append(metaColumn.Name); sb.Append(" "); sb.Append(" SET DATA TYPE "); if (metaColumn.ColumnType == ColumnType.Char || metaColumn.ColumnType == ColumnType.Varchar) { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); sb.Append("("); sb.Append(metaColumn.Size); sb.Append(")"); } else { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); } sb.Append(" DEFAULT "); if (!metaColumn.Null) { string defaultValue = GetDefaultValueForType(metaColumn.ColumnType); if (defaultValue != null) { sb.Append(defaultValue); } } else { sb.Append("NULL"); } sb.Append(" "); sb.Append(metaColumn.Null ? "" : "NOT NULL"); sb.Append(" "); return(sb.ToString()); }
protected override string CreateCreateTableQuery(MetaComparisonTableGroup tableGroup) { var metaTable = (MetaTable)tableGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("CREATE TABLE ["); sb.Append(metaTable.Name); sb.Append("] ( "); bool first = true; foreach (MetaColumn metaColumn in metaTable.Columns) { if (!first) { sb.Append(" ,\n "); } else { first = false; } sb.Append(metaColumn.Name); sb.Append(" "); if (metaColumn.ColumnType == ColumnType.Char || metaColumn.ColumnType == ColumnType.Varchar) { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); sb.Append("("); sb.Append(metaColumn.Size > 0 ? "" + metaColumn.Size : "max"); sb.Append(")"); } else { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); } sb.Append(" "); sb.Append(metaColumn.Null ? "" : "NOT NULL"); sb.Append(" "); } sb.Append(")"); return(sb.ToString()); }
protected abstract string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonForeignKeyGroup foreignKeyGroup);
protected abstract string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonPrimaryKeyGroup primaryKeyGroup);
protected abstract string CreateAlterColumnQuery(MetaComparisonTableGroup tableGroup, MetaComparisonColumnGroup columnGroup);
protected abstract string CreateAlterTableQuery(MetaComparisonTableGroup tableGroup);
public ICollection <MetaQueryHolder> CreateDbPathSql(IMetaComparisonGroup metaComparisonGroup) { List <MetaQueryHolder> holders = new List <MetaQueryHolder>(); if (metaComparisonGroup is MetaComparisonTableGroup) { MetaComparisonTableGroup tableGroup = (MetaComparisonTableGroup)metaComparisonGroup; if (metaComparisonGroup.ShouldCreateInDb()) { string query = CreateCreateTableQuery(tableGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE, MetaQueryHolder.OPERATION_TYPE_ADD, query)); } } if (metaComparisonGroup.ShouldDeleteFromDb()) { string query = CreateDropTableQuery(tableGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE, MetaQueryHolder.OPERATION_TYPE_DELETE, query)); } } if (metaComparisonGroup.ShouldAlterInDb()) { string query = CreateAlterTableQuery(tableGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_TABLE, MetaQueryHolder.OPERATION_TYPE_ALTER, query)); } } if (tableGroup.PrimaryKey != null) { MetaComparisonPrimaryKeyGroup primaryKeyGroup = tableGroup.PrimaryKey; if (primaryKeyGroup.ShouldCreateInDb() || primaryKeyGroup.ShouldAlterInDb()) { string query = CreateCreatePrimaryKeyQuery(tableGroup, primaryKeyGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_PRIMARY_KEY, MetaQueryHolder.OPERATION_TYPE_ADD, query)); } } if (tableGroup.ShouldDeleteFromDb() || primaryKeyGroup.ShouldAlterInDb()) { string query = CreateDropPrimaryKeyQuery(tableGroup, primaryKeyGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_PRIMARY_KEY, MetaQueryHolder.OPERATION_TYPE_DELETE, query)); } } } foreach (MetaComparisonColumnGroup comparisonColumnGroup in tableGroup.Columns) { if (comparisonColumnGroup.ShouldCreateInDb()) { string query = CreateCreateColumnQuery(tableGroup, comparisonColumnGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN, MetaQueryHolder.OPERATION_TYPE_ADD, query)); } } if (comparisonColumnGroup.ShouldDeleteFromDb()) { string query = CreateDropColumnQuery(tableGroup, comparisonColumnGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN, MetaQueryHolder.OPERATION_TYPE_DELETE, query)); } } if (comparisonColumnGroup.ShouldAlterInDb()) { string query = CreateAlterColumnQuery(tableGroup, comparisonColumnGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_COLUMN, MetaQueryHolder.OPERATION_TYPE_ALTER, query)); } } } foreach (MetaComparisonForeignKeyGroup foreignKeyGroup in tableGroup.ForeignKeys) { if (foreignKeyGroup.ShouldCreateInDb() || foreignKeyGroup.ShouldAlterInDb()) { string query = CreateCreateForeginKeyQuery(tableGroup, foreignKeyGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_FOREIGN_KEY, MetaQueryHolder.OPERATION_TYPE_ADD, query)); } } if (tableGroup.ShouldDeleteFromDb() || foreignKeyGroup.ShouldAlterInDb()) { string query = CreateDropForeignKeyQuery(tableGroup, foreignKeyGroup); if (!string.IsNullOrEmpty(query)) { holders.Add(new MetaQueryHolder(MetaQueryHolder.OBJECT_TYPE_FOREIGN_KEY, MetaQueryHolder.OPERATION_TYPE_DELETE, query)); } } } } return(holders); }
protected override string CreateCreateTableQuery(MetaComparisonTableGroup tableGroup) { var metaTable = (MetaTable)tableGroup.RequiredItem; var sb = new StringBuilder(); sb.Append("CREATE TABLE "); sb.Append(metaTable.Name); sb.Append(" ( "); bool first = true; foreach (MetaColumn metaColumn in metaTable.Columns) { if (!first) { sb.Append(" ,\n "); } else { first = false; } sb.Append(metaColumn.Name); sb.Append(" "); if (metaColumn.ColumnType == ColumnType.Char || metaColumn.ColumnType == ColumnType.Varchar) { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); sb.Append("("); sb.Append(metaColumn.Size); sb.Append(")"); } else { sb.Append(MapColumnTypeToTypeName(metaColumn.ColumnType)); } sb.Append(" "); sb.Append(metaColumn.Null ? "" : "NOT NULL"); sb.Append(" "); } if (tableGroup.PrimaryKey != null && tableGroup.PrimaryKey.RequiredItem != null) { var primaryKey = (MetaPrimaryKey)tableGroup.PrimaryKey.RequiredItem; sb.Append(","); sb.Append("PRIMARY KEY("); bool mapFirst = true; foreach (string colName in primaryKey.ColumnNames) { if (!mapFirst) { sb.Append(","); } sb.Append(colName); mapFirst = false; } sb.Append(") "); } foreach (MetaComparisonForeignKeyGroup foreignKeyGroup in tableGroup.ForeignKeys) { var requiredKey = (MetaForeignKey)foreignKeyGroup.RequiredItem; sb.Append(","); sb.Append("FOREIGN KEY("); bool mapFirst = true; foreach (MetaForeignKeyColumnMapping mapping in requiredKey.ColumnMappings) { if (!mapFirst) { sb.Append(","); } sb.Append(mapping.FromColumn); mapFirst = false; } sb.Append(") "); sb.Append("REFERENCES "); sb.Append(requiredKey.ToTable); sb.Append(" ("); mapFirst = true; foreach (MetaForeignKeyColumnMapping mapping in requiredKey.ColumnMappings) { if (!mapFirst) { sb.Append(","); } sb.Append(mapping.ToColumn); mapFirst = false; } sb.Append(") "); } sb.Append(")"); return(sb.ToString()); }
protected override string CreateDropColumnQuery(MetaComparisonTableGroup tableGroup, MetaComparisonColumnGroup columnGroup) { //sql lite does not support this return(null); }
protected override string CreateDropPrimaryKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonPrimaryKeyGroup primaryKeyGroup) { return(null); }
protected override string CreateDropForeignKeyQuery(MetaComparisonTableGroup tableGroup, MetaComparisonForeignKeyGroup foreignKeyGroup) { return(null); }
protected override string CreateAlterTableQuery(MetaComparisonTableGroup tableGroup) { return(null); }