Skip to content

Commit d52983c

Browse files
committed
Restore old querying implementation for Execute and ExecuteBatch
1 parent f2a7171 commit d52983c

1 file changed

Lines changed: 64 additions & 16 deletions

File tree

PowerSync/PowerSync.Common/MDSQLite/MDSQLiteConnection.cs

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,38 @@ private static List<string> PrepareQueryString(ref string query, int parameterCo
135135
return dynamicParams;
136136
}
137137

138+
private static List<string> PrepareCommandParameters(SqliteCommand command, ref string query, int parameterCount)
139+
{
140+
var parameterNames = PrepareQueryString(ref query, parameterCount);
141+
142+
command.CommandText = query;
143+
144+
foreach (var paramName in parameterNames)
145+
{
146+
var parameter = command.CreateParameter();
147+
parameter.ParameterName = paramName;
148+
command.Parameters.Add(parameter);
149+
}
150+
151+
return parameterNames;
152+
}
153+
154+
private static void PrepareCommand(SqliteCommand command, ref string query, object?[]? parameters)
155+
{
156+
int parameterCount = parameters?.Length ?? 0;
157+
var parameterNames = PrepareCommandParameters(command, ref query, parameterCount);
158+
159+
if (parameters != null)
160+
{
161+
for (int i = 0; i < parameters.Length; i++)
162+
{
163+
command.Parameters[i].Value = parameters[i] ?? DBNull.Value;
164+
}
165+
}
166+
167+
command.CommandText = query;
168+
}
169+
138170
private static List<DynamicParameters>? PrepareQuery(ref string query, object?[][]? parameters)
139171
{
140172
if (parameters == null || parameters.Length == 0)
@@ -206,19 +238,18 @@ public Task<dynamic> Get(string query, object?[]? parameters = null)
206238
return Task.Run(() => Db.QueryFirstAsync(query, dynamicParams, commandType: CommandType.Text));
207239
}
208240

209-
public Task<NonQueryResult> Execute(string query, object?[]? parameters = null)
241+
public Task<NonQueryResult> Execute(string query, object?[]? parameters = null) => Task.Run(() =>
210242
{
211-
DynamicParameters? dynamicParams = PrepareQuery(ref query, parameters);
212-
return Task.Run(async () =>
243+
using var command = Db.CreateCommand();
244+
PrepareCommand(command, ref query, parameters);
245+
246+
int rowsAffected = command.ExecuteNonQuery();
247+
return new NonQueryResult
213248
{
214-
int rowsAffected = await Db.ExecuteAsync(query, dynamicParams, commandType: CommandType.Text);
215-
return new NonQueryResult
216-
{
217-
InsertId = raw.sqlite3_last_insert_rowid(Db.Handle),
218-
RowsAffected = rowsAffected,
219-
};
220-
});
221-
}
249+
InsertId = raw.sqlite3_last_insert_rowid(Db.Handle),
250+
RowsAffected = rowsAffected,
251+
};
252+
});
222253

223254
public Task<NonQueryResult> ExecuteBatch(string query, object?[][]? parameters = null)
224255
{
@@ -227,19 +258,36 @@ public Task<NonQueryResult> ExecuteBatch(string query, object?[][]? parameters =
227258
return Task.FromResult(new NonQueryResult { RowsAffected = 0 });
228259
}
229260

230-
List<DynamicParameters>? dynamicParamsList = PrepareQuery(ref query, parameters);
231-
if (dynamicParamsList == null)
261+
int parameterCount = parameters[0].Length;
262+
if (parameterCount == 0)
232263
{
233264
return Task.FromResult(new NonQueryResult { RowsAffected = 0 });
234265
}
235266

236-
return Task.Run(async () =>
267+
return Task.Run(() =>
237268
{
238-
int rowsAffected = await Db.ExecuteAsync(query, dynamicParamsList, commandType: CommandType.Text);
269+
int totalRowsAffected = 0;
270+
271+
using var command = Db.CreateCommand();
272+
PrepareCommandParameters(command, ref query, parameterCount);
273+
274+
foreach (var paramSet in parameters)
275+
{
276+
if (paramSet != null)
277+
{
278+
for (int i = 0; i < paramSet.Length; i++)
279+
{
280+
command.Parameters[i].Value = paramSet[i] ?? DBNull.Value;
281+
}
282+
}
283+
284+
totalRowsAffected += command.ExecuteNonQuery();
285+
}
286+
239287
return new NonQueryResult
240288
{
241289
InsertId = raw.sqlite3_last_insert_rowid(Db.Handle),
242-
RowsAffected = rowsAffected,
290+
RowsAffected = totalRowsAffected,
243291
};
244292
});
245293
}

0 commit comments

Comments
 (0)