public static TableSchema Schema(this IDataReader reader) { var schemaTable = reader.GetSchemaTable(); if (schemaTable == null) { return(null); } var colNames = schemaTable.Columns.OfType <DataColumn>().Select(c => c.ColumnName).ToHashSet(); var cols = schemaTable.Rows.Cast <DataRow>().Select(r => { var col = new ColumnSchema(); foreach (var prop in col.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (colNames.Contains(prop.Name)) { col.SetPropValue(prop.Name, r[prop.Name]); } } return(col); }); return(new() { Columns = cols.ToArray() }); }
public override string BuildAlterColumnCommand(ColumnSchema schema) { // skip pk if(schema.PrimaryKey) { return string.Empty; } var sb = new StringBuilder(); if(schema.GetType().IsBoolean()) { // To ensure that the data format conversion is correct, // processing data before correction. sb.AppendFormat( @"UPDATE {0} SET {1} = '1' WHERE {1} = 'True'; UPDATE {0} SET {1} = '0' WHERE {1} = 'False';", Api.CommandBuilder.QuoteIdentifier(schema.TableName), Api.CommandBuilder.QuoteIdentifier(schema.ColumnName) ); sb.AppendLine(); } sb.AppendFormat( @"ALTER TABLE {0} MODIFY {1};", Api.CommandBuilder.QuoteIdentifier(schema.TableName), ColumnSqlCommand(schema) ); string sql = sb.ToString(); return sql; }