shard-crystal-sqlite3/src/sqlite3/statement2.cr

58 lines
1.4 KiB
Crystal
Raw Normal View History

class SQLite3::Statement2 < DB::Statement
def initialize(@driver, sql)
check LibSQLite3.prepare_v2(@driver, sql, sql.bytesize + 1, out @stmt, nil)
# @closed = false
end
2016-01-29 20:13:22 +00:00
protected def before_execute
LibSQLite3.reset(self)
2016-01-29 20:13:22 +00:00
end
protected def add_parameter(index : Int32, value)
bind_arg(index, value)
end
protected def add_parameter(name : String, value)
converted_name = ":#{name}"
index = LibSQLite3.bind_parameter_index(self, converted_name)
raise "Unknown parameter: #{name}" if index == 0
bind_arg(index, value)
end
protected def execute
ResultSet2.new(self)
end
2016-01-29 20:13:22 +00:00
private def bind_arg(index, value : Nil)
check LibSQLite3.bind_null(self, index)
end
private def bind_arg(index, value : Int32)
check LibSQLite3.bind_int(self, index, value)
end
private def bind_arg(index, value : Int64)
check LibSQLite3.bind_int64(self, index, value)
end
private def bind_arg(index, value : Float32)
check LibSQLite3.bind_double(self, index, value.to_f64)
end
private def bind_arg(index, value : Float64)
check LibSQLite3.bind_double(self, index, value)
end
private def bind_arg(index, value : String)
check LibSQLite3.bind_text(self, index, value, value.bytesize, nil)
end
private def check(code)
raise Exception.new(@driver) unless code == 0
end
def to_unsafe
@stmt
end
end