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,157 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="dbenumerator.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.Collections;
|
||||
using System.Data;
|
||||
using System.Data.ProviderBase;
|
||||
using System.Diagnostics;
|
||||
using System.ComponentModel;
|
||||
|
||||
public class DbEnumerator : IEnumerator {
|
||||
|
||||
internal IDataReader _reader;
|
||||
internal DbDataRecord _current;
|
||||
internal SchemaInfo[] _schemaInfo; // shared schema info among all the data records
|
||||
internal PropertyDescriptorCollection _descriptors; // cached property descriptors
|
||||
private FieldNameLookup _fieldNameLookup; // MDAC 69015
|
||||
private bool closeReader;
|
||||
|
||||
// users must get enumerators off of the datareader interfaces
|
||||
public DbEnumerator(IDataReader reader) {
|
||||
if (null == reader) {
|
||||
throw ADP.ArgumentNull("reader");
|
||||
}
|
||||
_reader = reader;
|
||||
}
|
||||
|
||||
public DbEnumerator(IDataReader reader, bool closeReader) { // MDAC 68670
|
||||
if (null == reader) {
|
||||
throw ADP.ArgumentNull("reader");
|
||||
}
|
||||
_reader = reader;
|
||||
this.closeReader = closeReader;
|
||||
}
|
||||
|
||||
public DbEnumerator(DbDataReader reader)
|
||||
: this((IDataReader)reader) {
|
||||
}
|
||||
|
||||
public DbEnumerator(DbDataReader reader, bool closeReader)
|
||||
: this((IDataReader)reader, closeReader) {
|
||||
}
|
||||
|
||||
public object Current {
|
||||
get {
|
||||
return _current;
|
||||
}
|
||||
}
|
||||
|
||||
public bool MoveNext() {
|
||||
|
||||
if (null == _schemaInfo) {
|
||||
BuildSchemaInfo();
|
||||
}
|
||||
|
||||
Debug.Assert(null != _schemaInfo && null != _descriptors, "unable to build schema information!");
|
||||
_current = null;
|
||||
|
||||
if (_reader.Read()) {
|
||||
// setup our current record
|
||||
object[] values = new object[_schemaInfo.Length];
|
||||
_reader.GetValues(values); // this.GetValues()
|
||||
_current = new DataRecordInternal(_schemaInfo, values, _descriptors, _fieldNameLookup); // this.NewRecord()
|
||||
return true;
|
||||
}
|
||||
if (closeReader) {
|
||||
_reader.Close();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
[ EditorBrowsableAttribute(EditorBrowsableState.Never) ] // MDAC 69508
|
||||
public void Reset() {
|
||||
throw ADP.NotSupported();
|
||||
}
|
||||
|
||||
private void BuildSchemaInfo() {
|
||||
int count = _reader.FieldCount;
|
||||
string[] fieldnames = new string[count];
|
||||
for (int i = 0; i < count; ++i) {
|
||||
fieldnames[i] = _reader.GetName(i);
|
||||
}
|
||||
ADP.BuildSchemaTableInfoTableNames(fieldnames); // MDAC 71401
|
||||
|
||||
SchemaInfo[] si = new SchemaInfo[count];
|
||||
PropertyDescriptor[] props = new PropertyDescriptor[_reader.FieldCount];
|
||||
for (int i = 0; i < si.Length; i++) {
|
||||
SchemaInfo s = new SchemaInfo();
|
||||
s.name = _reader.GetName(i);
|
||||
s.type = _reader.GetFieldType(i);
|
||||
s.typeName = _reader.GetDataTypeName(i);
|
||||
props[i] = new DbColumnDescriptor(i, fieldnames[i], s.type);
|
||||
si[i] = s;
|
||||
}
|
||||
|
||||
_schemaInfo = si;
|
||||
_fieldNameLookup = new FieldNameLookup(_reader, -1); // MDAC 71470
|
||||
_descriptors = new PropertyDescriptorCollection(props);
|
||||
}
|
||||
|
||||
sealed private class DbColumnDescriptor : PropertyDescriptor {
|
||||
int _ordinal;
|
||||
Type _type;
|
||||
|
||||
internal DbColumnDescriptor(int ordinal, string name, Type type)
|
||||
: base(name, null) {
|
||||
_ordinal = ordinal;
|
||||
_type = type;
|
||||
}
|
||||
|
||||
public override Type ComponentType {
|
||||
get {
|
||||
return typeof(IDataRecord);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsReadOnly {
|
||||
get {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override Type PropertyType {
|
||||
get {
|
||||
return _type;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanResetValue(object component) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public override object GetValue(object component) {
|
||||
return ((IDataRecord)component)[_ordinal];
|
||||
}
|
||||
|
||||
public override void ResetValue(object component) {
|
||||
throw ADP.NotSupported();
|
||||
}
|
||||
|
||||
public override void SetValue(object component, object value) {
|
||||
throw ADP.NotSupported();
|
||||
}
|
||||
|
||||
public override bool ShouldSerializeValue(object component) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user