Example #1
0
        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)));
                    }
                }
            }
        }
Example #2
0
        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));
            }
        }
Example #3
0
        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)));
                }
            }
        }
Example #4
0
        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));
            }
        }