private fun native_to_s: NativeString `{
#if SQLITE_VERSION_NUMBER >= 3007015
- char *err = (char *)sqlite3_errstr(self);
+ return (char *)sqlite3_errstr(self);
#else
- char *err = "sqlite3_errstr supported only by version >= 3.7.15";
+ return "sqlite3_errstr is not supported in version < 3.7.15";
#endif
- return err;
`}
end
return sqlite3_step(self);
`}
- fun column_name(i: Int) : String import NativeString.to_s `{
- const char * name = (sqlite3_column_name(self, i));
- if(name == NULL){
- name = "";
- }
- char * ret = (char *) name;
- return NativeString_to_s(ret);
+ fun column_name(i: Int): NativeString `{
+ return (char *)sqlite3_column_name(self, i);
`}
# Number of bytes in the blob or string at row `i`
`}
# Execute a SQL statement
- fun exec(sql: String): Sqlite3Code import String.to_cstring `{
- return sqlite3_exec(self, String_to_cstring(sql), 0, 0, 0);
+ fun exec(sql: NativeString): Sqlite3Code `{
+ return sqlite3_exec(self, sql, NULL, NULL, NULL);
`}
# Prepare a SQL statement
- fun prepare(sql: String): nullable NativeStatement import String.to_cstring, NativeStatement.as nullable `{
+ fun prepare(sql: NativeString): NativeStatement `{
sqlite3_stmt *stmt;
- int res = sqlite3_prepare_v2(self, String_to_cstring(sql), -1, &stmt, 0);
+ int res = sqlite3_prepare_v2(self, sql, -1, &stmt, 0);
if (res == SQLITE_OK)
- return NativeStatement_as_nullable(stmt);
+ return stmt;
else
- return null_NativeStatement();
+ return NULL;
`}
fun last_insert_rowid: Int `{
# Prepare and return a `Statement`, return `null` on error
fun prepare(sql: Text): nullable Statement
do
- var native_stmt = native_connection.prepare(sql.to_s)
- if native_stmt == null then return null
+ var native_stmt = native_connection.prepare(sql.to_cstring)
+ if native_stmt.address_is_null then return null
var stmt = new Statement(native_stmt)
open_statements.add stmt
# Execute the `sql` statement and return `true` on success
fun execute(sql: Text): Bool
do
- var err = native_connection.exec(sql.to_s)
+ var err = native_connection.exec(sql.to_cstring)
return err.is_ok
end
do
if not native_connection.is_valid then
var err = sys.sqlite_open_error
- if err == null then return null
+ if err.is_ok then return null
return err.to_s
end
var name: String is lazy do
assert statement_closed: statement.is_open
- return statement.native_statement.column_name(index)
+ var cname = statement.native_statement.column_name(index)
+ assert not cname.address_is_null
+ return cname.to_s
end
# Get the value of this entry according to its Sqlite type
var db = new NativeSqlite3.open(filename.to_cstring)
assert sqlite_open: db.error.is_ok
-db.exec(create_req)
+db.exec(create_req.to_cstring)
assert sqlite_create_table: db.error.is_ok
-db.exec(insert_req_1)
+db.exec(insert_req_1.to_cstring)
assert sqlite_insert_1: db.error.is_ok
-db.exec(insert_req_2)
+db.exec(insert_req_2.to_cstring)
assert sqlite_insert_2: db.error.is_ok
-var stmt = db.prepare(select_req)
+var stmt = db.prepare(select_req.to_cstring)
assert sqlite_select: db.error.is_ok
-if stmt == null then
+if stmt.address_is_null then
print "Prepared failed got: {db.error.to_s}"
abort
end
db = new NativeSqlite3.open(filename.to_cstring)
assert sqlite_reopen: db.error.is_ok
-stmt = db.prepare(select_req)
+stmt = db.prepare(select_req.to_cstring)
assert sqlite_reselect: db.error.is_ok
-assert stmt != null
+assert not stmt.address_is_null
stmt.step
assert sqlite_column_0_0_reopened: stmt.column_text(0).to_s == "Bob"