protected override void BuildColumnSql(List<string> vals, Column column, bool compoundPrimaryKey) { AddColumnName(vals, column); AddColumnType(vals, column); AddDefaultValueSql(vals, column); AddNotNullSql(vals, column); AddPrimaryKeySql(vals, column, compoundPrimaryKey); AddUniqueSql(vals, column); }
public virtual string GetColumnSql(Column column, bool compoundPrimaryKey) { Require.IsNotNull(column, "Не задан обрабатываемый столбец"); List<string> vals = new List<string>(); BuildColumnSql(vals, column, compoundPrimaryKey); string columnSql = String.Join(" ", vals.ToArray()); return columnSql; }
public ColumnSqlBuilder(Column column, TypeMap typeMap, PropertyMap propertyMap, Func<string, string> nameConverter) { Require.IsNotNull(column, "Не задан столбец таблицы для построения SQL-выражения"); Require.IsNotNull(typeMap, "Не задан мэппинг типов данных"); Require.IsNotNull(propertyMap, "Не задан мэппинг свойств столбца таблицы"); Require.IsNotNull(nameConverter, "Не задан конвертер имени столбца таблицы"); this.column = column; this.typeMap = typeMap; this.propertyMap = propertyMap; this.nameConverter = nameConverter; }
public override string GetSqlColumnDef(Column column, bool compoundPrimaryKey) { var sqlBuilder = new ColumnSqlBuilder(column, typeMap, propertyMap, GetQuotedName); sqlBuilder.AppendColumnName(); sqlBuilder.AppendColumnType(IdentityNeedsType); sqlBuilder.AppendDefaultValueSql(GetSqlDefaultValue); sqlBuilder.AppendNotNullSql(NeedsNotNullForIdentity); sqlBuilder.AppendPrimaryKeySql(compoundPrimaryKey); sqlBuilder.AppendUniqueSql(); return sqlBuilder.ToString(); }
public override void ChangeColumn(string table, Column column) { if (!ColumnExists(table, column.Name)) { Logger.Warn("Column {0}.{1} does not exist", table, column.Name); return; } string tempColumn = "temp_" + column.Name; RenameColumn(table, column.Name, tempColumn); AddColumn(table, column); ExecuteQuery(String.Format("UPDATE {0} SET {1}={2}", table, column.Name, tempColumn)); RemoveColumn(table, tempColumn); }
// XXX: Using INFORMATION_SCHEMA.COLUMNS should work, but it was causing trouble, so I used the MySQL specific thing. public override Column[] GetColumns(string table) { List<Column> columns = new List<Column>(); using ( IDataReader reader = ExecuteQuery( String.Format("SHOW COLUMNS FROM {0}", table))) { while (reader.Read()) { Column column = new Column(reader.GetString(0), DbType.String); string nullableStr = reader.GetString(2); bool isNullable = nullableStr == "YES"; column.ColumnProperty |= isNullable ? ColumnProperty.Null : ColumnProperty.NotNull; columns.Add(column); } } return columns.ToArray(); }
public override Column[] GetColumns(string table) { List<Column> columns = new List<Column>(); using ( IDataReader reader = ExecuteQuery( String.Format("select COLUMN_NAME, IS_NULLABLE from information_schema.columns where table_schema = 'public' AND table_name = lower('{0}');", table))) { // FIXME: Mostly duplicated code from the Transformation provider just to support stupid case-insensitivty of Postgre while (reader.Read()) { Column column = new Column(reader[0].ToString(), DbType.String); bool isNullable = reader.GetString(1) == "YES"; column.ColumnProperty |= isNullable ? ColumnProperty.Null : ColumnProperty.NotNull; columns.Add(column); } } return columns.ToArray(); }
public override Column[] GetColumns(string table) { List<Column> columns = new List<Column>(); foreach (string columnDef in GetColumnDefs(table)) { string name = ExtractNameFromColumnDef(columnDef); // FIXME: Need to get the real type information Column column = new Column(name, DbType.String); bool isNullable = IsNullable(columnDef); column.ColumnProperty |= isNullable ? ColumnProperty.Null : ColumnProperty.NotNull; columns.Add(column); } return columns.ToArray(); }
public virtual string GetSqlColumnDef(Column column, bool compoundPrimaryKey) { var sqlBuilder = new ColumnSqlBuilder(column, typeMap, propertyMap, GetQuotedName); sqlBuilder.AppendColumnName(); sqlBuilder.AppendColumnType(IdentityNeedsType); // identity не нуждаетс¤ в типе sqlBuilder.AppendSqlForIdentityWhichNotNeedsType(IdentityNeedsType); sqlBuilder.AppendUnsignedSql(); sqlBuilder.AppendNotNullSql(NeedsNotNullForIdentity); sqlBuilder.AppendPrimaryKeySql(compoundPrimaryKey); // identity нуждаетс¤ в типе sqlBuilder.AppendSqlForIdentityWhichNeedsType(IdentityNeedsType); sqlBuilder.AppendUniqueSql(); sqlBuilder.AppendDefaultValueSql(GetSqlDefaultValue); return sqlBuilder.ToString(); }
protected void AddColumnType(List<string> vals, Column column) { string type = !IdentityNeedsType && column.IsIdentity ? String.Empty : GetTypeName(column.ColumnType); if (!type.IsNullOrEmpty()) vals.Add(type); }
protected void AddNotNullSql(List<string> vals, Column column) { if (!column.ColumnProperty.HasProperty(ColumnProperty.PrimaryKey) || NeedsNotNullForIdentity) AddValueIfSelected(column, ColumnProperty.NotNull, vals); }
protected void AddValueIfSelected(Column column, ColumnProperty property, ICollection<string> vals) { if (column.ColumnProperty.HasProperty(property)) vals.Add(SqlForProperty(property)); }
protected virtual void BuildColumnSql(List<string> vals, Column column, bool compoundPrimaryKey) { AddColumnName(vals, column); AddColumnType(vals, column); // identity не нуждается в типе AddSqlForIdentityWhichNotNeedsType(vals, column); AddUnsignedSql(vals, column); AddNotNullSql(vals, column); AddPrimaryKeySql(vals, column, compoundPrimaryKey); // identity нуждается в типе AddSqlForIdentityWhichNeedsType(vals, column); AddUniqueSql(vals, column); AddForeignKeySql(vals, column); AddDefaultValueSql(vals, column); }
protected void AddUnsignedSql(List<string> vals, Column column) { AddValueIfSelected(column, ColumnProperty.Unsigned, vals); }
protected void AddSqlForIdentityWhichNotNeedsType(List<string> vals, Column column) { if (!IdentityNeedsType)// todo: исправить как унаследованные мэпперы AddValueIfSelected(column, ColumnProperty.Identity, vals); }
protected void AddPrimaryKeySql(List<string> vals, Column column, bool compoundPrimaryKey) { if (!compoundPrimaryKey) AddValueIfSelected(column, ColumnProperty.PrimaryKey, vals); }
protected void AddDefaultValueSql(List<string> vals, Column column) { if (column.DefaultValue != null) vals.Add(Default(column.DefaultValue)); }
public virtual void AddColumn(SchemaQualifiedObjectName table, Column column) { string sqlColumnDef = GetSqlColumnDef(column, false); string sqlAddColumn = GetSqlAddColumn(table, sqlColumnDef); ExecuteNonQuery(sqlAddColumn); }
protected void AddColumnName(List<string> vals, Column column) { vals.Add(NamesNeedsQuote ? Quote(column.Name) : column.Name); }
protected void AddForeignKeySql(List<string> vals, Column column) { AddValueIfSelected(column, ColumnProperty.ForeignKey, vals); }