Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }