using Sqlite; namespace Qlite { public abstract class StatementBuilder { protected Database db; internal StatementBuilder(Database db) { this.db = db; } internal abstract Statement prepare(); internal abstract class AbstractField { public T value; public Column? column; AbstractField(T value) { this.value = value; } internal abstract void bind(Statement stmt, int index); } internal class Field : AbstractField { public Field(Column column, T value) { base(value); this.column = column; } internal override void bind(Statement stmt, int index) { ((!)column).bind(stmt, index, value); } } internal class NullField : AbstractField { public NullField(Column column) { base(null); this.column = column; } internal override void bind(Statement stmt, int index) { stmt.bind_null(index); } } internal class StringField : AbstractField { public StringField(string value) { base(value); } internal override void bind(Statement stmt, int index) { stmt.bind_text(index, value); } } } }