From e4593a0fdae4062838b89688f246f710da64a1a3 Mon Sep 17 00:00:00 2001 From: JonKazama-Hellion Date: Sat, 2 May 2026 21:23:17 +0200 Subject: [PATCH] refactor(db): add BindIntList helper for parameterised IN-clauses Centralised builder for dynamic IN-clauses that binds each value as a named parameter and returns the comma-joined placeholder string. Used by the upcoming MessageStore migrations away from string-interpolated SQL. --- ChatTwo/MessageStore.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ChatTwo/MessageStore.cs b/ChatTwo/MessageStore.cs index 5f6b565..c527449 100644 --- a/ChatTwo/MessageStore.cs +++ b/ChatTwo/MessageStore.cs @@ -806,6 +806,24 @@ internal class MessageStore : IDisposable return new MessageEnumerator(cmd.ExecuteReader()); } + + // Build "$prefix0,$prefix1,..." placeholder list and bind values to + // the command. SQLite has no native array parameter, so we generate + // the list at runtime and bind each entry under its own name. Used + // for IN-clauses and similar dynamic-arity SQL fragments. + private static string BindIntList(SqliteCommand cmd, string prefix, IEnumerable values) + { + var names = new List(); + var index = 0; + foreach (var value in values) + { + var name = $"${prefix}{index}"; + cmd.Parameters.AddWithValue(name, value); + names.Add(name); + index++; + } + return string.Join(",", names); + } } internal class MessageEnumerator(DbDataReader reader) : IEnumerable, IDisposable, IAsyncDisposable