protected override void Mapper(IDataRecord record) { var schema = record.GetString("SchemaName"); var tableName = record.GetString("TableName"); var name = record.GetString("IndexName"); var index = Result.FirstOrDefault(f => f.Name == name && f.SchemaOwner == schema && f.TableName.Equals(tableName, StringComparison.OrdinalIgnoreCase)); if (index == null) { index = new DatabaseIndex { SchemaOwner = schema, TableName = tableName, Name = name, IndexType = record.GetString("INDEX_TYPE"), IsUnique = record.GetBoolean("IsUnique"), }; if (record.GetBoolean("IsPrimary")) { index.IndexType = "PRIMARY"; } index.AddAdditionalProperties(record, _additionalPropertyNames); Result.Add(index); } var colName = record.GetString("ColumnName"); if (string.IsNullOrEmpty(colName)) { return; } var isIncluded = record.GetBoolean("IsIncluded"); var ordinal = record.GetInt("Ordinal"); var col = new DatabaseColumn { Name = colName, IsIncludeColumnInIndex = isIncluded, Ordinal = ordinal }; col.AddAdditionalProperties(record, _additionalIndexColumnProperties); index.Columns.Add(col); }
public DatabaseColumn Convert(IDataRecord row, string[] additionalProperties = null) { var column = new DatabaseColumn(); var columnsKeyMap = _keyMap; var hasIsUnsigned = !string.IsNullOrEmpty(columnsKeyMap.IsUnsignedKey); column.Name = row[columnsKeyMap.Key].ToString(); column.TableName = row[columnsKeyMap.TableKey].ToString(); if (!string.IsNullOrEmpty(columnsKeyMap.SchemaKey)) { column.SchemaOwner = row[columnsKeyMap.SchemaKey].ToString(); } if (string.Equals("sqlite_default_schema", column.SchemaOwner, StringComparison.OrdinalIgnoreCase)) { column.SchemaOwner = string.Empty; } if (!string.IsNullOrEmpty(columnsKeyMap.OrdinalKey)) { column.Ordinal = System.Convert.ToInt32(row[columnsKeyMap.OrdinalKey], CultureInfo.CurrentCulture); } if (!string.IsNullOrEmpty(columnsKeyMap.DatatypeKey)) { column.DbDataType = row[columnsKeyMap.DatatypeKey].ToString(); } if (hasIsUnsigned && row.GetBoolean(columnsKeyMap.IsUnsignedKey)) { column.DbDataType += " unsigned"; } column.Nullable = row.GetBoolean(columnsKeyMap.NullableKey); //the length unless it's an OleDb blob or clob if (!string.IsNullOrEmpty(columnsKeyMap.LengthKey)) { column.Length = row.GetNullableInt(columnsKeyMap.LengthKey); } if (!string.IsNullOrEmpty(columnsKeyMap.DataLengthKey)) { //oracle only var dataLength = row.GetNullableInt(columnsKeyMap.DataLengthKey); //column length already set for char/varchar. For other data types, get data length if (column.Length < 1) { column.Length = dataLength; } } if (!string.IsNullOrEmpty(columnsKeyMap.PrecisionKey)) { column.Precision = row.GetNullableInt(columnsKeyMap.PrecisionKey); } if (!string.IsNullOrEmpty(columnsKeyMap.ScaleKey)) { column.Scale = row.GetNullableInt(columnsKeyMap.ScaleKey); } if (columnsKeyMap.DateTimePrecision != null) { column.DateTimePrecision = row.GetNullableInt(columnsKeyMap.DateTimePrecision); } AddColumnDefault(row, columnsKeyMap.DefaultKey, column); if (!string.IsNullOrEmpty(columnsKeyMap.PrimaryKeyKey) && (bool)row[columnsKeyMap.PrimaryKeyKey]) { column.IsPrimaryKey = true; } if (!string.IsNullOrEmpty(columnsKeyMap.AutoIncrementKey) && (bool)row[columnsKeyMap.AutoIncrementKey]) { column.IsAutoNumber = true; } if (!string.IsNullOrEmpty(columnsKeyMap.UniqueKey) && row.GetBoolean(columnsKeyMap.UniqueKey)) { column.IsUniqueKey = true; } column.AddAdditionalProperties(row, additionalProperties); return(column); }