aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/qlite/statement_builder.vala
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2026-08-23 19:32:25 +0200
committerMarvin W <git@larma.de>2026-10-23 16:59:51 +0200
commit98ef191bfb3cc5694b9d1001e46a9b00abbd7195 (patch)
treeb6d30b203266afe44f0b5ae8aaf479960e361273 /libdino/src/qlite/statement_builder.vala
parentb0456e13ed35e6ebf684b3a7f4d1cb4b6ec352cc (diff)
Move qlite into libdino
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);
+ }
+ }
+}
+
+}