@@ -56,11 +56,11 @@ public void FlushUpdates()
5656 }
5757
5858 var groupedUpdates = updateBuffer
59- . GroupBy ( update => update . Table )
60- . ToDictionary (
61- group => group . Key ,
62- group => group . Select ( update => new TableUpdateOperation ( update . OpType , update . RowId ) ) . ToArray ( )
63- ) ;
59+ . GroupBy ( update => update . Table )
60+ . ToDictionary (
61+ group => group . Key ,
62+ group => group . Select ( update => new TableUpdateOperation ( update . OpType , update . RowId ) ) . ToArray ( )
63+ ) ;
6464
6565 var batchedUpdate = new BatchedUpdateNotification
6666 {
@@ -81,19 +81,15 @@ private static List<string> PrepareQueryString(ref string query, int parameterCo
8181 return parameterList ;
8282 }
8383
84- int placeholderCount = query . Count ( c => c == '?' ) ;
85- if ( placeholderCount != parameterCount )
86- {
87- throw new ArgumentException ( $ "Number of parameters ({ parameterCount } ) does not match the number of `?` placeholders ({ placeholderCount } ) in the query.") ;
88- }
89-
9084 // Replace `?` sequentially with named parameters
91- var sb = new StringBuilder ( ) ;
85+ var sb = new StringBuilder ( query . Length + parameterCount * 7 ) ;
9286 int lastPos = 0 ;
9387 int currentPos ;
9488 for ( int i = 0 ; i < parameterCount ; i ++ )
9589 {
9690 currentPos = query . IndexOf ( '?' , lastPos ) ;
91+ if ( currentPos == - 1 )
92+ throw new ArgumentException ( $ "Not enough `?` placeholders for { parameterCount } parameters.") ;
9793
9894 string paramName = $ "@param{ i } ";
9995 parameterList . Add ( paramName ) ;
@@ -137,43 +133,14 @@ private static List<string> PrepareQueryString(ref string query, int parameterCo
137133
138134 private static void PrepareCommandParameters ( SqliteCommand command , ref string query , int parameterCount )
139135 {
140- if ( parameterCount == 0 )
141- {
142- command . CommandText = query ;
143- return ;
144- }
145-
146- int placeholderCount = query . Count ( c => c == '?' ) ;
147- if ( placeholderCount != parameterCount )
148- {
149- throw new ArgumentException ( $ "Number of parameters ({ parameterCount } ) does not match the number of `?` placeholders ({ placeholderCount } ) in the query.") ;
150- }
151-
152- var sb = new StringBuilder ( ) ;
153- int lastPos = 0 ;
154- int currentPos ;
155- for ( int i = 0 ; i < parameterCount ; i ++ )
136+ var parameterNames = PrepareQueryString ( ref query , parameterCount ) ;
137+ command . CommandText = query ;
138+ foreach ( var paramName in parameterNames )
156139 {
157- currentPos = query . IndexOf ( '?' , lastPos ) ;
158-
159- string paramName = $ "@param{ i } ";
160-
161- sb . Append ( query , lastPos , currentPos - lastPos ) ;
162- sb . Append ( paramName ) ;
163-
164140 var parameter = command . CreateParameter ( ) ;
165141 parameter . ParameterName = paramName ;
166142 command . Parameters . Add ( parameter ) ;
167-
168- lastPos = currentPos + 1 ;
169- }
170-
171- if ( lastPos < query . Length )
172- {
173- sb . Append ( query , lastPos , query . Length - lastPos ) ;
174143 }
175-
176- command . CommandText = sb . ToString ( ) ;
177144 }
178145
179146 private static void PrepareCommand ( SqliteCommand command , ref string query , object ? [ ] ? parameters )
@@ -190,41 +157,6 @@ private static void PrepareCommand(SqliteCommand command, ref string query, obje
190157 }
191158 }
192159
193- private static List < DynamicParameters > ? PrepareQuery ( ref string query , object ? [ ] [ ] ? parameters )
194- {
195- if ( parameters == null || parameters . Length == 0 )
196- {
197- return null ;
198- }
199-
200- var parameterCount = parameters [ 0 ] . Length ;
201- if ( parameterCount == 0 )
202- {
203- return null ;
204- }
205-
206- var parameterNames = PrepareQueryString ( ref query , parameterCount ) ;
207-
208- var preparedParamsList = new List < DynamicParameters > ( ) ;
209-
210- foreach ( var paramSet in parameters )
211- {
212- if ( paramSet . Length != parameterCount )
213- {
214- throw new ArgumentException ( "Parameter sets have different number of arguments." ) ;
215- }
216-
217- var preparedParams = new DynamicParameters ( ) ;
218- for ( int i = 0 ; i < parameterCount ; i ++ )
219- {
220- preparedParams . Add ( parameterNames [ i ] , paramSet [ i ] ) ;
221- }
222- preparedParamsList . Add ( preparedParams ) ;
223- }
224-
225- return preparedParamsList ;
226- }
227-
228160 public Task < T [ ] > GetAll < T > ( string query , object ? [ ] ? parameters = null )
229161 {
230162 var preparedParams = PrepareQuery ( ref query , parameters ) ;
0 commit comments