public static string GetSqlEquivalent(this IMigrationExpression migrationExpression, IMigrationGenerator migrationGenerator) { if (migrationExpression is ExecuteSqlScriptExpression executeSqlScriptExpression) { return(executeSqlScriptExpression.SqlScript); } else if (migrationExpression is ExecuteSqlStatementExpression executeSqlStatementExpression) { return(executeSqlStatementExpression.SqlStatement); } else { if (migrationExpression is CreateForeignKeyExpression cfke) { cfke.ForeignKey.ForeignColumns = cfke.ForeignKey.ForeignColumns.Select(c => c.ToSnakeCase()).ToList(); cfke.ForeignKey.PrimaryColumns = cfke.ForeignKey.PrimaryColumns.Select(c => c.ToSnakeCase()).ToList(); cfke.ForeignKey.ForeignTable = cfke.ForeignKey.ForeignTable.ToSnakeCase(); cfke.ForeignKey.PrimaryTable = cfke.ForeignKey.PrimaryTable.ToSnakeCase(); cfke.ForeignKey.Name = cfke.ForeignKey.Name ?? $"FK_{cfke.ForeignKey.ForeignTable}_{cfke.ForeignKey.ForeignColumns.First()}_{cfke.ForeignKey.PrimaryTable}_{cfke.ForeignKey.PrimaryColumns.First()}"; } else if (migrationExpression is CreateTableExpression cte) { List <ColumnDefinition> columnDefinitions = cte.Columns.ToList(); columnDefinitions.ForEach(cd => cd.Name = cd.Name.ToSnakeCase()); cte.Columns = columnDefinitions; } else if (migrationExpression is CreateConstraintExpression cce && cce.Constraint.IsPrimaryKeyConstraint) { cce.Constraint.Columns = cce.Constraint.Columns.Select(c => c.ToSnakeCase()).ToList(); cce.Constraint.ConstraintName = $"PK_{cce.Constraint.TableName}"; } MethodInfo processMethod = migrationGenerator.GetType().GetMethod("Generate", new[] { migrationExpression.GetType() }); string sql = (string)processMethod.Invoke(migrationGenerator, new[] { migrationExpression }); return(sql); } }
public static string GetName([NotNull] this IMigrationGenerator generator) { return(generator.GetType().Name.Replace("Generator", string.Empty)); }