annotate Source/Mapping/DataReaderMapper.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Data.SqlTypes;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 namespace BLToolkit.Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public class DataReaderMapper : IMapDataSource
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public DataReaderMapper(MappingSchema mappingSchema, IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 _mappingSchema = mappingSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 _dataReader = dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 _dataReaderEx = dataReader as IDataReaderEx;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 readonly IDataReaderEx _dataReaderEx;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 readonly IDataReader _dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public IDataReader DataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 get { return _dataReader; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 readonly MappingSchema _mappingSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public MappingSchema MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 get { return _mappingSchema; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 #region IMapDataSource Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public virtual int Count
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 get { return _dataReader.FieldCount; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 public virtual Type GetFieldType(int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 return _dataReader.GetFieldType(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public virtual string GetName(int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 return _dataReader.GetName(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public virtual int GetOrdinal(string name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 return _dataReader.GetOrdinal(name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public virtual object GetValue(object o, int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 var value = _dataReader.GetValue(index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 return value is DBNull? null: value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 public virtual object GetValue(object o, string name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 var value = _dataReader[name];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 return value is DBNull? null: value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public virtual bool IsNull (object o, int index) { return _dataReader.IsDBNull(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public virtual bool SupportsTypedValues(int index) { return true; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 // Simple type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public virtual SByte GetSByte (object o, int index) { return _mappingSchema.ConvertToSByte(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public virtual Int16 GetInt16 (object o, int index) { return _dataReader.GetInt16 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 public virtual Int32 GetInt32 (object o, int index) { return _dataReader.GetInt32 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public virtual Int64 GetInt64 (object o, int index) { return _dataReader.GetInt64 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public virtual Byte GetByte (object o, int index) { return _dataReader.GetByte (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 public virtual UInt16 GetUInt16 (object o, int index) { return _mappingSchema.ConvertToUInt16(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 public virtual UInt32 GetUInt32 (object o, int index) { return _mappingSchema.ConvertToUInt32(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public virtual UInt64 GetUInt64 (object o, int index) { return _mappingSchema.ConvertToUInt64(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 public virtual Boolean GetBoolean (object o, int index) { return _dataReader.GetBoolean (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public virtual Char GetChar (object o, int index) { return _dataReader.GetChar (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public virtual Single GetSingle (object o, int index) { return _dataReader.GetFloat (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 public virtual Double GetDouble (object o, int index) { return _dataReader.GetDouble (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 public virtual Decimal GetDecimal (object o, int index) { return _dataReader.GetDecimal (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 public virtual Guid GetGuid (object o, int index) { return _dataReader.GetGuid (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 public virtual DateTime GetDateTime(object o, int index) { return _dataReader.GetDateTime(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public virtual DateTimeOffset GetDateTimeOffset(object o, int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return _dataReaderEx != null?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 _dataReaderEx.GetDateTimeOffset(index):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 _mappingSchema.ConvertToDateTimeOffset(_dataReader.GetValue(index));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 // Nullable type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 public virtual SByte? GetNullableSByte (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableSByte(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 public virtual Int16? GetNullableInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int16?)_dataReader.GetInt16 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 public virtual Int32? GetNullableInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int32?)_dataReader.GetInt32 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 public virtual Int64? GetNullableInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int64?)_dataReader.GetInt64 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 public virtual Byte? GetNullableByte (object o, int index) { return _dataReader.IsDBNull(index)? null: (Byte?) _dataReader.GetByte (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 public virtual UInt16? GetNullableUInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt16(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 public virtual UInt32? GetNullableUInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt32(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 public virtual UInt64? GetNullableUInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt64(GetValue(o, index)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 public virtual Boolean? GetNullableBoolean (object o, int index) { return _dataReader.IsDBNull(index)? null: (Boolean?) _dataReader.GetBoolean (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 public virtual Char? GetNullableChar (object o, int index) { return _dataReader.IsDBNull(index)? null: (Char?) _dataReader.GetChar (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 public virtual Single? GetNullableSingle (object o, int index) { return _dataReader.IsDBNull(index)? null: (Single?) _dataReader.GetFloat (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 public virtual Double? GetNullableDouble (object o, int index) { return _dataReader.IsDBNull(index)? null: (Double?) _dataReader.GetDouble (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 public virtual Decimal? GetNullableDecimal (object o, int index) { return _dataReader.IsDBNull(index)? null: (Decimal?) _dataReader.GetDecimal (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public virtual Guid? GetNullableGuid (object o, int index) { return _dataReader.IsDBNull(index)? null: (Guid?) _dataReader.GetGuid (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 public virtual DateTime? GetNullableDateTime(object o, int index) { return _dataReader.IsDBNull(index)? null: (DateTime?)_dataReader.GetDateTime(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public virtual DateTimeOffset? GetNullableDateTimeOffset(object o, int index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 return _dataReader.IsDBNull(index)? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 _dataReaderEx != null? _dataReaderEx.GetDateTimeOffset(index):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 _mappingSchema.ConvertToNullableDateTimeOffset(_dataReader.GetValue(index));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 // SQL type getters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 public virtual SqlByte GetSqlByte (object o, int index) { return _dataReader.IsDBNull(index)? SqlByte. Null: _dataReader.GetByte (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 public virtual SqlInt16 GetSqlInt16 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt16. Null: _dataReader.GetInt16 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public virtual SqlInt32 GetSqlInt32 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt32. Null: _dataReader.GetInt32 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 public virtual SqlInt64 GetSqlInt64 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt64. Null: _dataReader.GetInt64 (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 public virtual SqlSingle GetSqlSingle (object o, int index) { return _dataReader.IsDBNull(index)? SqlSingle. Null: _dataReader.GetFloat (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 public virtual SqlBoolean GetSqlBoolean (object o, int index) { return _dataReader.IsDBNull(index)? SqlBoolean. Null: _dataReader.GetBoolean (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 public virtual SqlDouble GetSqlDouble (object o, int index) { return _dataReader.IsDBNull(index)? SqlDouble. Null: _dataReader.GetDouble (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 public virtual SqlDateTime GetSqlDateTime(object o, int index) { return _dataReader.IsDBNull(index)? SqlDateTime.Null: _dataReader.GetDateTime(index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 public virtual SqlDecimal GetSqlDecimal (object o, int index) { return _dataReader.IsDBNull(index)? SqlDecimal. Null: _dataReader.GetDecimal (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 public virtual SqlMoney GetSqlMoney (object o, int index) { return _dataReader.IsDBNull(index)? SqlMoney. Null: _dataReader.GetDecimal (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public virtual SqlGuid GetSqlGuid (object o, int index) { return _dataReader.IsDBNull(index)? SqlGuid. Null: _dataReader.GetGuid (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 public virtual SqlString GetSqlString (object o, int index) { return _dataReader.IsDBNull(index)? SqlString. Null: _dataReader.GetString (index); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }