private static void AddIndexes(TableInfo tableInfo, DataView allIndexes) { const string viewColumnName = "COLUMN_NAME"; const string viewExpression = "EXPRESSION"; var table = tableInfo.InputTableName; allIndexes.RowFilter = string.Format("TABLE_NAME = '{0}'", table); foreach (var indexName in GetIndexNames(allIndexes)) { allIndexes.RowFilter = string.Format("TABLE_NAME = '{0}' AND INDEX_NAME = '{1}'", table, indexName); if (allIndexes.Count == 1) { var columnName = allIndexes[0][viewColumnName].ToString(); var expression = allIndexes[0][viewExpression].ToString(); if (!tableInfo.IsIgnoredColumn(columnName)) { tableInfo.AddIndex(new IndexInfo(indexName, expression, columnName, tableInfo.IsUniqueColumns(new[] { columnName }))); } } else if (allIndexes.Count > 1) { var expression = allIndexes[0][viewExpression].ToString(); var columnNames = (from DataRowView row in allIndexes select row[viewColumnName].ToString()).ToList(); if (!columnNames.Any(tableInfo.IsIgnoredColumn)) { tableInfo.AddIndex(new IndexInfo(indexName, expression, columnNames, tableInfo.IsUniqueColumns(columnNames))); } } } }
private static void AddColumn(TableInfo tableInfo, DataRow row) { const string numericPrecisionColumn = "NUMERIC_PRECISION"; const string numericScaleColumn = "NUMERIC_SCALE"; const string characterMaximumLengthColumn = "CHARACTER_MAXIMUM_LENGTH"; var columnName = row["COLUMN_NAME"].ToString(); if (tableInfo.IsIgnoredColumn(columnName)) return; var dbType = (OleDbType) row["DATA_TYPE"]; OleDbType overiddenDbType; if (tableInfo.IsDbTypeOverridden(columnName, out overiddenDbType)) dbType = overiddenDbType; var ordinalPosition = (Int64) row["ORDINAL_POSITION"]; int? numericPrecision = null; if (row[numericPrecisionColumn] != DBNull.Value) { numericPrecision = int.Parse(row[numericPrecisionColumn].ToString()); } int? numericScale = null; if (row[numericScaleColumn] != DBNull.Value) { numericScale = int.Parse(row[numericScaleColumn].ToString()); } long? maxLength = null; if (row[characterMaximumLengthColumn] != DBNull.Value) { maxLength = long.Parse(row[characterMaximumLengthColumn].ToString()); } long overriddenMaxLength; if (tableInfo.IsMaxLengthOverridden(columnName, out overriddenMaxLength)) { maxLength = overriddenMaxLength; } switch (dbType) { case OleDbType.Char: case OleDbType.Integer: case OleDbType.Numeric: case OleDbType.Boolean: case OleDbType.DBDate: case OleDbType.Binary: var columnInfo = new ColumnInfo(columnName, ordinalPosition, dbType, maxLength, numericPrecision, numericScale, tableInfo.PrimaryKey != null && columnName.Equals(tableInfo.PrimaryKey)); tableInfo.AddColumn(columnInfo); break; default: throw new InvalidOperationException(string.Format("Unknown database type: {0}", dbType)); } }
private static void AddIndexes(TableInfo tableInfo, DataView allIndexes) { const string viewColumnName = "COLUMN_NAME"; const string viewExpression = "EXPRESSION"; var table = tableInfo.InputTableName; allIndexes.RowFilter = string.Format("TABLE_NAME = '{0}'", table); foreach (var indexName in GetIndexNames(allIndexes)) { allIndexes.RowFilter = string.Format("TABLE_NAME = '{0}' AND INDEX_NAME = '{1}'", table, indexName); if (allIndexes.Count == 1) { var columnName = allIndexes[0][viewColumnName].ToString(); var expression = allIndexes[0][viewExpression].ToString(); if (!tableInfo.IsIgnoredColumn(columnName)) tableInfo.AddIndex(new IndexInfo(indexName, expression, columnName, tableInfo.IsUniqueColumns(new[] {columnName}))); } else if (allIndexes.Count > 1) { var expression = allIndexes[0][viewExpression].ToString(); var columnNames = (from DataRowView row in allIndexes select row[viewColumnName].ToString()).ToList(); if (!columnNames.Any(tableInfo.IsIgnoredColumn)) tableInfo.AddIndex(new IndexInfo(indexName, expression, columnNames, tableInfo.IsUniqueColumns(columnNames))); } } }
private static void AddColumn(TableInfo tableInfo, DataRow row) { const string numericPrecisionColumn = "NUMERIC_PRECISION"; const string numericScaleColumn = "NUMERIC_SCALE"; const string characterMaximumLengthColumn = "CHARACTER_MAXIMUM_LENGTH"; var columnName = row["COLUMN_NAME"].ToString(); if (tableInfo.IsIgnoredColumn(columnName)) { return; } var dbType = (OleDbType)row["DATA_TYPE"]; OleDbType overiddenDbType; if (tableInfo.IsDbTypeOverridden(columnName, out overiddenDbType)) { dbType = overiddenDbType; } var ordinalPosition = (Int64)row["ORDINAL_POSITION"]; int?numericPrecision = null; if (row[numericPrecisionColumn] != DBNull.Value) { numericPrecision = int.Parse(row[numericPrecisionColumn].ToString()); } int?numericScale = null; if (row[numericScaleColumn] != DBNull.Value) { numericScale = int.Parse(row[numericScaleColumn].ToString()); } long?maxLength = null; if (row[characterMaximumLengthColumn] != DBNull.Value) { maxLength = long.Parse(row[characterMaximumLengthColumn].ToString()); } long overriddenMaxLength; if (tableInfo.IsMaxLengthOverridden(columnName, out overriddenMaxLength)) { maxLength = overriddenMaxLength; } switch (dbType) { case OleDbType.Char: case OleDbType.Integer: case OleDbType.Numeric: case OleDbType.Boolean: case OleDbType.DBDate: case OleDbType.Binary: var columnInfo = new ColumnInfo(columnName, ordinalPosition, dbType, maxLength, numericPrecision, numericScale, tableInfo.PrimaryKey != null && columnName.Equals(tableInfo.PrimaryKey)); tableInfo.AddColumn(columnInfo); break; default: throw new InvalidOperationException(string.Format("Unknown database type: {0}", dbType)); } }