aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/qlite/statement_builder.vala
diff options
context:
space:
mode:
authorfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
committerfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
commit74aecd8b0986d07b50b7ce310d64e645b8b54e38 (patch)
tree560e6434f183eb54cd779936f3a4c9575146a066 /libdino/src/qlite/statement_builder.vala
parent3d7e90d401da02d430a87db0ec7e1db3a6f1a68f (diff)
parent4436001bb361ad4f9e4e05819214ecf0ea77c063 (diff)
Merge 'upstream/master'
Diffstat (limited to 'libdino/src/qlite/statement_builder.vala')
-rw-r--r--libdino/src/qlite/statement_builder.vala58
1 files changed, 58 insertions, 0 deletions
diff --git a/libdino/src/qlite/statement_builder.vala b/libdino/src/qlite/statement_builder.vala
new file mode 100644
index 00000000..5c756ab3
--- /dev/null
+++ b/libdino/src/qlite/statement_builder.vala
@@ -0,0 +1,58 @@
+using Sqlite;
+
+namespace Dino.Qlite {
+
+public abstract class StatementBuilder {
+ protected Database db;
+
+ internal StatementBuilder(Database db) {
+ this.db = db;
+ }
+
+ internal abstract Statement prepare();
+
+ internal abstract class AbstractField<T> {
+ public T value;
+ public Column<T>? column;
+
+ AbstractField(T value) {
+ this.value = value;
+ }
+
+ internal abstract void bind(Statement stmt, int index);
+ }
+
+ internal class Field<T> : AbstractField<T> {
+ public Field(Column<T> column, T value) {
+ base(value);
+ this.column = column;
+ }
+
+ internal override void bind(Statement stmt, int index) {
+ ((!)column).bind(stmt, index, value);
+ }
+ }
+
+ internal class NullField<T> : AbstractField<T> {
+ public NullField(Column<T> column) {
+ base(null);
+ this.column = column;
+ }
+
+ internal override void bind(Statement stmt, int index) {
+ stmt.bind_null(index);
+ }
+ }
+
+ internal class StringField : AbstractField<string> {
+ public StringField(string value) {
+ base(value);
+ }
+
+ internal override void bind(Statement stmt, int index) {
+ stmt.bind_text(index, value);
+ }
+ }
+}
+
+}