示例#1
0
        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()
            });
        }
示例#2
0
        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;
        }