You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@@ -0,0 +1,125 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="DBSchemaTable.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
// <owner current="true" primary="true">[....]</owner>
|
||||
// <owner current="true" primary="false">[....]</owner>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Data.Common {
|
||||
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Data.ProviderBase;
|
||||
using System.Diagnostics;
|
||||
|
||||
sealed internal class DbSchemaTable {
|
||||
|
||||
private enum ColumnEnum {
|
||||
ColumnName,
|
||||
ColumnOrdinal,
|
||||
ColumnSize,
|
||||
BaseServerName,
|
||||
BaseCatalogName,
|
||||
BaseColumnName,
|
||||
BaseSchemaName,
|
||||
BaseTableName,
|
||||
IsAutoIncrement,
|
||||
IsUnique,
|
||||
IsKey,
|
||||
IsRowVersion,
|
||||
DataType,
|
||||
ProviderSpecificDataType,
|
||||
AllowDBNull,
|
||||
ProviderType,
|
||||
IsExpression,
|
||||
IsHidden,
|
||||
IsLong,
|
||||
IsReadOnly,
|
||||
SchemaMappingUnsortedIndex,
|
||||
}
|
||||
|
||||
static readonly private string[] DBCOLUMN_NAME = new string[] {
|
||||
SchemaTableColumn.ColumnName,
|
||||
SchemaTableColumn.ColumnOrdinal,
|
||||
SchemaTableColumn.ColumnSize,
|
||||
SchemaTableOptionalColumn.BaseServerName,
|
||||
SchemaTableOptionalColumn.BaseCatalogName,
|
||||
SchemaTableColumn.BaseColumnName,
|
||||
SchemaTableColumn.BaseSchemaName,
|
||||
SchemaTableColumn.BaseTableName,
|
||||
SchemaTableOptionalColumn.IsAutoIncrement,
|
||||
SchemaTableColumn.IsUnique,
|
||||
SchemaTableColumn.IsKey,
|
||||
SchemaTableOptionalColumn.IsRowVersion,
|
||||
SchemaTableColumn.DataType,
|
||||
SchemaTableOptionalColumn.ProviderSpecificDataType,
|
||||
SchemaTableColumn.AllowDBNull,
|
||||
SchemaTableColumn.ProviderType,
|
||||
SchemaTableColumn.IsExpression,
|
||||
SchemaTableOptionalColumn.IsHidden,
|
||||
SchemaTableColumn.IsLong,
|
||||
SchemaTableOptionalColumn.IsReadOnly,
|
||||
DbSchemaRow.SchemaMappingUnsortedIndex,
|
||||
};
|
||||
|
||||
internal DataTable dataTable;
|
||||
private DataColumnCollection columns;
|
||||
private DataColumn[] columnCache = new DataColumn[DBCOLUMN_NAME.Length];
|
||||
private bool _returnProviderSpecificTypes;
|
||||
|
||||
internal DbSchemaTable(DataTable dataTable, bool returnProviderSpecificTypes) {
|
||||
this.dataTable = dataTable;
|
||||
this.columns = dataTable.Columns;
|
||||
_returnProviderSpecificTypes = returnProviderSpecificTypes;
|
||||
}
|
||||
|
||||
internal DataColumn ColumnName { get { return CachedDataColumn(ColumnEnum.ColumnName);}}
|
||||
internal DataColumn Size { get { return CachedDataColumn(ColumnEnum.ColumnSize);}}
|
||||
internal DataColumn BaseServerName { get { return CachedDataColumn(ColumnEnum.BaseServerName);}}
|
||||
internal DataColumn BaseColumnName { get { return CachedDataColumn(ColumnEnum.BaseColumnName);}}
|
||||
internal DataColumn BaseTableName { get { return CachedDataColumn(ColumnEnum.BaseTableName);}}
|
||||
internal DataColumn BaseCatalogName { get { return CachedDataColumn(ColumnEnum.BaseCatalogName);}}
|
||||
internal DataColumn BaseSchemaName { get { return CachedDataColumn(ColumnEnum.BaseSchemaName);}}
|
||||
internal DataColumn IsAutoIncrement { get { return CachedDataColumn(ColumnEnum.IsAutoIncrement);}}
|
||||
internal DataColumn IsUnique { get { return CachedDataColumn(ColumnEnum.IsUnique);}}
|
||||
internal DataColumn IsKey { get { return CachedDataColumn(ColumnEnum.IsKey);}}
|
||||
internal DataColumn IsRowVersion { get { return CachedDataColumn(ColumnEnum.IsRowVersion);}}
|
||||
|
||||
internal DataColumn AllowDBNull { get { return CachedDataColumn(ColumnEnum.AllowDBNull);}}
|
||||
internal DataColumn IsExpression { get { return CachedDataColumn(ColumnEnum.IsExpression);}}
|
||||
internal DataColumn IsHidden { get { return CachedDataColumn(ColumnEnum.IsHidden);}}
|
||||
internal DataColumn IsLong { get { return CachedDataColumn(ColumnEnum.IsLong);}}
|
||||
internal DataColumn IsReadOnly { get { return CachedDataColumn(ColumnEnum.IsReadOnly);}}
|
||||
|
||||
internal DataColumn UnsortedIndex { get { return CachedDataColumn(ColumnEnum.SchemaMappingUnsortedIndex);}}
|
||||
|
||||
internal DataColumn DataType {
|
||||
get {
|
||||
if (_returnProviderSpecificTypes) {
|
||||
return CachedDataColumn(ColumnEnum.ProviderSpecificDataType, ColumnEnum.DataType);
|
||||
}
|
||||
return CachedDataColumn(ColumnEnum.DataType);
|
||||
}
|
||||
}
|
||||
|
||||
private DataColumn CachedDataColumn(ColumnEnum column) {
|
||||
return CachedDataColumn(column, column);
|
||||
}
|
||||
|
||||
private DataColumn CachedDataColumn(ColumnEnum column, ColumnEnum column2) {
|
||||
DataColumn dataColumn = columnCache[(int) column];
|
||||
if (null == dataColumn) {
|
||||
int index = columns.IndexOf(DBCOLUMN_NAME[(int) column]);
|
||||
if ((-1 == index) && (column != column2)) {
|
||||
index = columns.IndexOf(DBCOLUMN_NAME[(int) column2]);
|
||||
}
|
||||
if (-1 != index) {
|
||||
dataColumn = columns[index];
|
||||
columnCache[(int) column] = dataColumn;
|
||||
}
|
||||
}
|
||||
return dataColumn;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user