11using FreeSql . Internal ;
2+ using FreeSql . Internal . CommonProvider ;
23using FreeSql . Internal . Model ;
34using System ;
45using System . Collections . Generic ;
@@ -35,35 +36,48 @@ protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnIn
3536 var ret = new List < TReturn > ( ) ;
3637 DbParameter [ ] dbParms = null ;
3738 StringBuilder sbret = null ;
38- ToSqlFetch ( sb =>
39- {
40- if ( dbParms == null )
41- {
42- dbParms = _params . Concat ( _paramsSource ) . ToArray ( ) ;
43- sbret = new StringBuilder ( ) ;
44- sbret . Append ( " RETURNING " ) ;
39+ var queryType = typeof ( TReturn ) == typeof ( T1 ) ? ( _table . TypeLazy ?? _table . Type ) : null ;
40+ int [ ] queryIndexs = null ;
41+ var queryFlag = "" ;
42+ ToSqlFetch ( sb =>
43+ {
44+ if ( dbParms == null )
45+ {
46+ dbParms = _params . Concat ( _paramsSource ) . ToArray ( ) ;
47+ sbret = new StringBuilder ( ) ;
48+ sbret . Append ( " RETURNING " ) ;
4549
46- var colidx = 0 ;
47- foreach ( var col in columns )
48- {
49- if ( colidx > 0 ) sbret . Append ( ", " ) ;
50- sbret . Append ( _commonUtils . RereadColumn ( col , _commonUtils . QuoteSqlName ( col . Attribute . Name ) ) ) . Append ( " as " ) . Append ( _commonUtils . QuoteSqlName ( col . CsName ) ) ;
51- ++ colidx ;
52- }
53- }
54- var sql = sb . Append ( sbret ) . ToString ( ) ;
55- var before = new Aop . CurdBeforeEventArgs ( _table . Type , _table , Aop . CurdType . Update , sql , dbParms ) ;
56- _orm . Aop . CurdBeforeHandler ? . Invoke ( this , before ) ;
50+ var colidx = 0 ;
51+ var sbflag = new StringBuilder ( ) . Append ( "adoQuery(crud)" ) ;
52+ var dic = new Dictionary < string , int > ( StringComparer . CurrentCultureIgnoreCase ) ;
53+ foreach ( var col in columns )
54+ {
55+ if ( colidx > 0 ) sb . Append ( ", " ) ;
56+ sbret . Append ( _commonUtils . RereadColumn ( col , _commonUtils . QuoteSqlName ( col . Attribute . Name ) ) ) ;
57+ if ( dic . ContainsKey ( col . CsName ) ) continue ;
58+ sbflag . Append ( col . Attribute . Name ) . Append ( ":" ) . Append ( colidx ) . Append ( "," ) ;
59+ dic . Add ( col . CsName , colidx ) ;
60+ ++ colidx ;
61+ }
62+ queryIndexs = AdoProvider . GetQueryTypeProperties ( queryType ) . Select ( a => dic . TryGetValue ( a . Key , out var tryint ) ? tryint : - 1 ) . ToArray ( ) ;
63+ queryFlag = sbflag . ToString ( ) ;
64+ }
65+ var sql = sb . Append ( sbret ) . ToString ( ) ;
66+ var before = new Aop . CurdBeforeEventArgs ( _table . Type , _table , Aop . CurdType . Update , sql , dbParms ) ;
67+ _orm . Aop . CurdBeforeHandler ? . Invoke ( this , before ) ;
5768
58- Exception exception = null ;
59- try
60- {
61- var queryType = typeof ( TReturn ) == typeof ( T1 ) ? ( _table . TypeLazy ?? _table . Type ) : null ;
62- var rettmp = _orm . Ado . Query < TReturn > ( queryType , _connection , _transaction , CommandType . Text , sql , _commandTimeout , dbParms ) ;
63- ValidateVersionAndThrow ( rettmp . Count , sql , dbParms ) ;
64- ret . AddRange ( rettmp ) ;
65- }
66- catch ( Exception ex )
69+ Exception exception = null ;
70+ try
71+ {
72+ var rettmp = new List < TReturn > ( ) ;
73+ _orm . Ado . ExecuteReader ( _connection , _transaction , fetch =>
74+ {
75+ rettmp . Add ( ( TReturn ) Utils . ExecuteReaderToClass ( queryFlag , queryType , queryIndexs , fetch . Object , 0 , _commonUtils ) ) ;
76+ } , CommandType . Text , sql , _commandTimeout , dbParms ) ;
77+ ValidateVersionAndThrow ( rettmp . Count , sql , dbParms ) ;
78+ ret . AddRange ( rettmp ) ;
79+ }
80+ catch ( Exception ex )
6781 {
6882 exception = ex ;
6983 throw ;
@@ -125,6 +139,9 @@ async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEn
125139 var ret = new List < TReturn > ( ) ;
126140 DbParameter [ ] dbParms = null ;
127141 StringBuilder sbret = null ;
142+ var queryType = typeof ( TReturn ) == typeof ( T1 ) ? ( _table . TypeLazy ?? _table . Type ) : null ;
143+ int [ ] queryIndexs = null ;
144+ var queryFlag = "" ;
128145 await ToSqlFetchAsync ( async sb =>
129146 {
130147 if ( dbParms == null )
@@ -134,23 +151,34 @@ await ToSqlFetchAsync(async sb =>
134151 sbret . Append ( " RETURNING " ) ;
135152
136153 var colidx = 0 ;
154+ var sbflag = new StringBuilder ( ) . Append ( "adoQuery(crud)" ) ;
155+ var dic = new Dictionary < string , int > ( StringComparer . CurrentCultureIgnoreCase ) ;
137156 foreach ( var col in columns )
138157 {
139- if ( colidx > 0 ) sbret . Append ( ", " ) ;
140- sbret . Append ( _commonUtils . RereadColumn ( col , _commonUtils . QuoteSqlName ( col . Attribute . Name ) ) ) . Append ( " as " ) . Append ( _commonUtils . QuoteSqlName ( col . CsName ) ) ;
158+ if ( colidx > 0 ) sb . Append ( ", " ) ;
159+ sbret . Append ( _commonUtils . RereadColumn ( col , _commonUtils . QuoteSqlName ( col . Attribute . Name ) ) ) ;
160+ if ( dic . ContainsKey ( col . CsName ) ) continue ;
161+ sbflag . Append ( col . Attribute . Name ) . Append ( ":" ) . Append ( colidx ) . Append ( "," ) ;
162+ dic . Add ( col . CsName , colidx ) ;
141163 ++ colidx ;
142164 }
165+ queryIndexs = AdoProvider . GetQueryTypeProperties ( queryType ) . Select ( a => dic . TryGetValue ( a . Key , out var tryint ) ? tryint : - 1 ) . ToArray ( ) ;
166+ queryFlag = sbflag . ToString ( ) ;
143167 }
144168 var sql = sb . Append ( sbret ) . ToString ( ) ;
145169 var before = new Aop . CurdBeforeEventArgs ( _table . Type , _table , Aop . CurdType . Update , sql , dbParms ) ;
146170 _orm . Aop . CurdBeforeHandler ? . Invoke ( this , before ) ;
147171
148172 Exception exception = null ;
149173 try
150- {
151- var queryType = typeof ( TReturn ) == typeof ( T1 ) ? ( _table . TypeLazy ?? _table . Type ) : null ;
152- var rettmp = await _orm . Ado . QueryAsync < TReturn > ( queryType , _connection , _transaction , CommandType . Text , sql , _commandTimeout , dbParms , cancellationToken ) ;
153- ValidateVersionAndThrow ( rettmp . Count , sql , dbParms ) ;
174+ {
175+ var rettmp = new List < TReturn > ( ) ;
176+ await _orm . Ado . ExecuteReaderAsync ( _connection , _transaction , fetch =>
177+ {
178+ rettmp . Add ( ( TReturn ) Utils . ExecuteReaderToClass ( queryFlag , queryType , queryIndexs , fetch . Object , 0 , _commonUtils ) ) ;
179+ return Task . FromResult ( false ) ;
180+ } , CommandType . Text , sql , _commandTimeout , dbParms , cancellationToken ) ;
181+ ValidateVersionAndThrow ( rettmp . Count , sql , dbParms ) ;
154182 ret . AddRange ( rettmp ) ;
155183 }
156184 catch ( Exception ex )
0 commit comments