22using System . Data ;
33using System . Diagnostics ;
44using System . Linq ;
5- using System . Text ;
65using DataCommander . Providers . Connection ;
76using Foundation ;
87using Foundation . Data ;
@@ -23,6 +22,7 @@ internal sealed class LogResultWriter : IResultWriter
2322 private long _beforeExecuteReaderTimestamp ;
2423 private long _writeTableBeginTimestamp ;
2524 private long _firstRowReadBeginTimestamp ;
25+ private readonly OrmBuilder _ormBuilder = new OrmBuilder ( ) ;
2626
2727 public LogResultWriter ( Action < InfoMessage > addInfoMessage )
2828 {
@@ -49,9 +49,7 @@ void IResultWriter.BeforeExecuteReader(AsyncDataAdapterCommand asyncDataAdapterC
4949
5050 var parameters = command . Parameters ;
5151 if ( ! parameters . IsNullOrEmpty ( ) )
52- {
5352 message += "\r \n " + command . Parameters . ToLogString ( ) ;
54- }
5553
5654 _addInfoMessage ( new InfoMessage ( LocalTime . Default . Now , InfoMessageSeverity . Verbose , message ) ) ;
5755 }
@@ -81,212 +79,13 @@ void IResultWriter.WriteTableBegin(DataTable schemaTable)
8179
8280 var objectId = _tableCount + 1 ;
8381 var objectTypeName = $ "Object{ objectId } ";
84- var objectInstanceName = "@object" ;
8582 var columns = schemaTable . Rows . Cast < DataRow > ( ) . Select ( i => new DbColumn ( i ) ) . ToList ( ) ;
86- var stringBuilder = new StringBuilder ( ) ;
87- stringBuilder . Append ( "\r \n internal sealed class " ) ;
88- stringBuilder . Append ( objectTypeName ) ;
89- stringBuilder . Append ( "\r \n {\r \n " ) ;
90-
91- var first = true ;
92- foreach ( var column in columns )
93- {
94- if ( first )
95- first = false ;
96- else
97- stringBuilder . AppendLine ( ) ;
98-
99- stringBuilder . Append ( " public " ) ;
100- stringBuilder . Append ( GetCSharpTypeName ( column . DataType ) ) ;
101-
102- if ( column . AllowDbNull == true && IsValueType ( column . DataType ) )
103- stringBuilder . Append ( '?' ) ;
104-
105- stringBuilder . Append ( ' ' ) ;
106- stringBuilder . Append ( column . ColumnName ) ;
107- stringBuilder . Append ( ";" ) ;
108- }
109-
110- stringBuilder . AppendFormat ( @"
111- }}
112-
113- private static {0} Read{0}(IDataRecord dataRecord)
114- {{
115- var {1} = new {0}();
116- " , objectTypeName , objectInstanceName ) ;
117-
118- first = true ;
119- var index = 0 ;
120- foreach ( var column in columns )
121- {
122- if ( first )
123- first = false ;
124- else
125- stringBuilder . AppendLine ( ) ;
126-
127- stringBuilder . AppendFormat ( " {0}." , objectInstanceName ) ;
128- stringBuilder . Append ( column . ColumnName ) ;
129- stringBuilder . Append ( " = dataRecord." ) ;
130- stringBuilder . Append ( GetDataRecordMethodName ( column ) ) ;
131- stringBuilder . Append ( '(' ) ;
132- stringBuilder . Append ( index ) ;
133- stringBuilder . Append ( ");" ) ;
134-
135- ++ index ;
136- }
137-
138- stringBuilder . AppendFormat ( @"
139- return {0};
140- }}
141- " , objectInstanceName ) ;
142-
143- Log . Trace ( $ "SchemaTable of table[{ _tableCount } ]:\r \n { schemaTable . ToStringTableString ( ) } \r \n { stringBuilder } ") ;
144-
83+ _ormBuilder . Add ( objectTypeName , columns ) ;
84+ Log . Trace ( $ "SchemaTable of table[{ _tableCount } ]:\r \n { schemaTable . ToStringTableString ( ) } ") ;
14585 ++ _tableCount ;
14686 _rowCount = 0 ;
14787 }
14888
149- private static string GetDataRecordMethodName ( DbColumn column )
150- {
151- var typeCode = Type . GetTypeCode ( column . DataType ) ;
152- string methodName = null ;
153- switch ( typeCode )
154- {
155- case TypeCode . Empty :
156- break ;
157- case TypeCode . Object :
158- break ;
159- case TypeCode . DBNull :
160- break ;
161- case TypeCode . Boolean :
162- methodName = column . AllowDbNull == true ? "GetNullableBoolean" : "GetBoolean" ;
163- break ;
164- case TypeCode . Char :
165- break ;
166- case TypeCode . SByte :
167- break ;
168- case TypeCode . Byte :
169- methodName = column . AllowDbNull == true ? "GetNullableByte" : "GetByte" ;
170- break ;
171- case TypeCode . Int16 :
172- methodName = column . AllowDbNull == true ? "GetNullableInt16" : "GetInt16" ;
173- break ;
174- case TypeCode . UInt16 :
175- break ;
176- case TypeCode . Int32 :
177- methodName = column . AllowDbNull == true ? "GetNullableInt32" : "GetInt32" ;
178- break ;
179- case TypeCode . UInt32 :
180- break ;
181- case TypeCode . Int64 :
182- methodName = column . AllowDbNull == true ? "GetNullableInt64" : "GetInt64" ;
183- break ;
184- case TypeCode . UInt64 :
185- break ;
186- case TypeCode . Single :
187- methodName = column . AllowDbNull == true ? "GetNullableFloat" : "GetFloat" ;
188- break ;
189- case TypeCode . Double :
190- methodName = column . AllowDbNull == true ? "GetNullableDouble" : "GetDouble" ;
191- break ;
192- case TypeCode . Decimal :
193- methodName = column . AllowDbNull == true ? "GetNullableDecimal" : "GetDecimal" ;
194- break ;
195- case TypeCode . DateTime :
196- methodName = column . AllowDbNull == true ? "GetNullableDateTime" : "GetDateTime" ;
197- break ;
198- case TypeCode . String :
199- methodName = column . AllowDbNull == true ? "GetStringOrDefault" : "GetString" ;
200- break ;
201- default :
202- throw new ArgumentOutOfRangeException ( ) ;
203- }
204- return methodName ;
205- }
206-
207- private static string GetCSharpTypeName ( Type dbColumnDataType )
208- {
209- var typeCode = Type . GetTypeCode ( dbColumnDataType ) ;
210- string csharpTypeName ;
211- switch ( typeCode )
212- {
213- case TypeCode . Boolean :
214- csharpTypeName = "bool" ;
215- break ;
216- case TypeCode . Char :
217- csharpTypeName = "char" ;
218- break ;
219- case TypeCode . SByte :
220- csharpTypeName = "byte" ;
221- break ;
222- case TypeCode . Byte :
223- csharpTypeName = "byte" ;
224- break ;
225- case TypeCode . Int16 :
226- csharpTypeName = "shorrt" ;
227- break ;
228- case TypeCode . UInt16 :
229- csharpTypeName = "ushort" ;
230- break ;
231- case TypeCode . Int32 :
232- csharpTypeName = "int" ;
233- break ;
234- case TypeCode . UInt32 :
235- csharpTypeName = "uint" ;
236- break ;
237- case TypeCode . Int64 :
238- csharpTypeName = "long" ;
239- break ;
240- case TypeCode . UInt64 :
241- csharpTypeName = "ulong" ;
242- break ;
243- case TypeCode . Single :
244- csharpTypeName = "float" ;
245- break ;
246- case TypeCode . Double :
247- csharpTypeName = "double" ;
248- break ;
249- case TypeCode . Decimal :
250- csharpTypeName = "decimal" ;
251- break ;
252- case TypeCode . String :
253- csharpTypeName = "string" ;
254- break ;
255- default :
256- csharpTypeName = dbColumnDataType . Name ;
257- break ;
258- }
259- return csharpTypeName ;
260- }
261-
262- private static bool IsValueType ( Type dbColumnDataType )
263- {
264- var typeCode = Type . GetTypeCode ( dbColumnDataType ) ;
265- var isValueType = false ;
266-
267- switch ( typeCode )
268- {
269- case TypeCode . Boolean :
270- case TypeCode . Char :
271- case TypeCode . SByte :
272- case TypeCode . Byte :
273- case TypeCode . Int16 :
274- case TypeCode . UInt16 :
275- case TypeCode . Int32 :
276- case TypeCode . UInt32 :
277- case TypeCode . Int64 :
278- case TypeCode . UInt64 :
279- case TypeCode . Single :
280- case TypeCode . Double :
281- case TypeCode . Decimal :
282- case TypeCode . DateTime :
283- isValueType = true ;
284- break ;
285- }
286-
287- return isValueType ;
288- }
289-
29089 void IResultWriter . FirstRowReadBegin ( )
29190 {
29291 _firstRowReadBeginTimestamp = Stopwatch . GetTimestamp ( ) ;
@@ -321,6 +120,8 @@ void IResultWriter.End()
321120 var duration = Stopwatch . GetTimestamp ( ) - _beginTimestamp ;
322121 var message = $ "Query completed { _commandCount } command(s) in { StopwatchTimeSpan . ToString ( duration , 3 ) } seconds.";
323122 _addInfoMessage ( new InfoMessage ( LocalTime . Default . Now , InfoMessageSeverity . Verbose , message ) ) ;
123+
124+ Log . Trace ( $ "\r \n { _ormBuilder } ") ;
324125 }
325126
326127 #endregion
0 commit comments