1010using Foundation ;
1111using Foundation . Assertions ;
1212using Foundation . Data ;
13- using Foundation . Data . SqlClient . Orm ;
13+ using Foundation . DbQueryBuilding ;
1414using Foundation . Diagnostics ;
1515using Foundation . Linq ;
1616using Foundation . Log ;
@@ -23,9 +23,9 @@ internal sealed class LogResultWriter : IResultWriter
2323 {
2424 private class Result
2525 {
26- public readonly ReadOnlyCollection < Field > Fields ;
26+ public readonly ReadOnlyCollection < DbQueryResultField > Fields ;
2727
28- public Result ( ReadOnlyCollection < Field > fields )
28+ public Result ( ReadOnlyCollection < DbQueryResultField > fields )
2929 {
3030 Fields = fields ;
3131 }
@@ -58,22 +58,22 @@ public LogResultWriter(Action<InfoMessage> addInfoMessage)
5858 void IResultWriter . BeforeExecuteReader ( AsyncDataAdapterCommand asyncDataAdapterCommand )
5959 {
6060 _beforeExecuteReaderTimestamp = Stopwatch . GetTimestamp ( ) ;
61- var command = asyncDataAdapterCommand . Command ;
62- var message = $ "Executing command[{ _commandCount } ] from line { asyncDataAdapterCommand . LineIndex + 1 } ...\r \n { command . CommandText } ";
63-
6461 ++ _commandCount ;
6562
66- var commandText = asyncDataAdapterCommand . Command . CommandText ;
63+ var command = asyncDataAdapterCommand . Command ;
64+ var commandText = command . CommandText ;
6765 if ( commandText . StartsWith ( "/* Query" ) )
6866 {
6967 var index = command . CommandText . IndexOf ( "*/" ) ;
7068 _commandText = commandText . Substring ( index + 4 ) ;
7169 var json = commandText . Substring ( 10 , index - 10 ) ;
7270 _query = JsonConvert . DeserializeObject < QueryConfiguration . Query > ( json ) ;
7371 _results = new List < Result > ( ) ;
74- asyncDataAdapterCommand . Command . CommandText = GetParameterizedCommandText ( _query . Parameters , _commandText ) ;
72+ command . CommandText = GetParameterizedCommandText ( _query . Parameters , _commandText ) ;
7573 }
7674
75+ var message = $ "Executing command[{ _commandCount } ] from line { asyncDataAdapterCommand . LineIndex + 1 } ...\r \n { command . CommandText } ";
76+
7777 var parameters = command . Parameters ;
7878 if ( ! parameters . IsNullOrEmpty ( ) )
7979 message += "\r \n " + command . Parameters . ToLogString ( ) ;
@@ -85,7 +85,7 @@ private static string GetParameterizedCommandText(ReadOnlyCollection<Parameter>
8585 {
8686 var stringBuilder = new StringBuilder ( ) ;
8787 foreach ( var parameter in parameters )
88- stringBuilder . Append ( $ "declare @{ parameter . Name } { parameter . DataType } = { parameter . Value } \r \n ") ;
88+ stringBuilder . Append ( $ "declare @{ parameter . Name } { parameter . DataType } { parameter . Value } \r \n ") ;
8989 stringBuilder . Append ( commandText ) ;
9090 return stringBuilder . ToString ( ) ;
9191 }
@@ -108,8 +108,23 @@ void IResultWriter.AfterCloseReader(int affectedRows)
108108 var message = $ "Command[{ _commandCount - 1 } ] completed in { StopwatchTimeSpan . ToString ( duration , 3 ) } seconds. { affected } ";
109109 _addInfoMessage ( new InfoMessage ( now , InfoMessageSeverity . Verbose , null , message ) ) ;
110110
111- _query = null ;
112- _results = null ;
111+ if ( _query != null )
112+ {
113+ var parameters = _query . Parameters . Select ( ToParameter ) . ToReadOnlyCollection ( ) ;
114+ var results = _query . Results . Zip ( _results , ToResult ) . ToReadOnlyCollection ( ) ;
115+ var query = new DbQuery ( _query . Namespace , _query . Name , _commandText , 0 , parameters , results ) ;
116+
117+ var queryBuilder = new DbQueryBuilder ( query ) ;
118+ var csharpSourceCode = queryBuilder . Build ( ) ;
119+ Log . Trace ( $ "\r \n { csharpSourceCode } ") ;
120+
121+ var timestamp = LocalTime . Default . Now . ToString ( "yyyy.MM.dd HHmmss.fff" ) ;
122+ var path = Path . Combine ( Path . GetTempPath ( ) , $ "DataCommander.Orm.{ timestamp } .cs") ;
123+ File . WriteAllText ( path , csharpSourceCode , Encoding . UTF8 ) ;
124+
125+ _query = null ;
126+ _results = null ;
127+ }
113128 }
114129
115130 void IResultWriter . WriteTableBegin ( DataTable schemaTable )
@@ -156,21 +171,6 @@ void IResultWriter.WriteTableEnd()
156171 var message =
157172 $ "Reading { _rowCount } row(s) from command[{ _commandCount - 1 } ] into table[{ _tableCount - 1 } ] finished in { StopwatchTimeSpan . ToString ( duration , 3 ) } seconds.";
158173 _addInfoMessage ( new InfoMessage ( LocalTime . Default . Now , InfoMessageSeverity . Verbose , null , message ) ) ;
159-
160- if ( _query != null )
161- {
162- var parameters = _query . Parameters . Select ( ToParameter ) . ToReadOnlyCollection ( ) ;
163- var results = _query . Results . Zip ( _results , ToResult ) . ToReadOnlyCollection ( ) ;
164- var query = new Foundation . Data . SqlClient . Orm . Query ( _query . Namespace , _query . Name , _commandText , 0 , parameters , results ) ;
165-
166- var queryBuilder = new QueryBuilder ( query ) ;
167- var csharpSourceCode = queryBuilder . Build ( ) ;
168- Log . Trace ( $ "\r \n { csharpSourceCode } ") ;
169-
170- var timestamp = LocalTime . Default . Now . ToString ( "yyyy.MM.dd HHmmss.fff" ) ;
171- var path = Path . Combine ( Path . GetTempPath ( ) , $ "DataCommander.Orm.{ timestamp } .cs") ;
172- File . WriteAllText ( path , csharpSourceCode , Encoding . UTF8 ) ;
173- }
174174 }
175175
176176 void IResultWriter . WriteParameters ( IDataParameterCollection parameters )
@@ -184,10 +184,9 @@ void IResultWriter.End()
184184 _addInfoMessage ( new InfoMessage ( LocalTime . Default . Now , InfoMessageSeverity . Verbose , null , message ) ) ;
185185 }
186186
187- private Foundation . Data . SqlClient . Orm . Parameter ToParameter ( Parameter source ) =>
188- new Foundation . Data . SqlClient . Orm . Parameter ( source . Name , source . DataType , source . IsNullable ) ;
189-
190- private Foundation . Data . SqlClient . Orm . Result ToResult ( string name , Result result ) => new Foundation . Data . SqlClient . Orm . Result ( name , result . Fields ) ;
187+ private DbQueryParameter ToParameter ( Parameter source ) =>
188+ new DbQueryParameter ( source . Name , source . DataType , source . SqlDbType , source . CSharpDataType , source . IsNullable , source . CSharpValue ) ;
189+ private DbQueryResult ToResult ( string name , Result result ) => new DbQueryResult ( name , result . Fields ) ;
191190
192191 #endregion
193192
@@ -224,7 +223,7 @@ private Foundation.Data.SqlClient.Orm.Parameter ToParameter(Parameter source) =>
224223 // query = new Query(queryName, parameters.AsReadOnly());
225224 //}
226225
227- private static Field ToField ( FoundationDbColumn column ) => new Field ( column . ColumnName , column . DataType , column . AllowDbNull == true ) ;
226+ private static DbQueryResultField ToField ( FoundationDbColumn column ) => new DbQueryResultField ( column . ColumnName , column . DataType , column . AllowDbNull == true ) ;
228227
229228 #endregion
230229 }
0 commit comments