aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/qlite/statement_builder.vala
diff options
context:
space:
mode:
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);
+ }
+ }
+}
+
+}