new done `{ return SQLITE_DONE; `} # 101 /* sqlite3_step() has finished executing */
fun is_done: Bool `{ return self == SQLITE_DONE; `}
- redef fun to_s import NativeString.to_s `{
+ redef fun to_s
+ do
+ var err = native_to_s
+ if err.address_is_null then return "Unknown error"
+ return err.to_s
+ end
+
+ 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
- if (err == NULL) err = "";
- return NativeString_to_s(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`
extern class NativeSqlite3 `{sqlite3 *`}
# Open a connection to a database in UTF-8
- new open(filename: String) import String.to_cstring, set_sys_sqlite_open_error `{
+ new open(filename: NativeString) import set_sys_sqlite_open_error `{
sqlite3 *self = NULL;
- int err = sqlite3_open(String_to_cstring(filename), &self);
+ int err = sqlite3_open(filename, &self);
NativeSqlite3_set_sys_sqlite_open_error(self, (void*)(long)err);
// The previous cast is a hack, using non pointers in extern classes is not
// yet in the spec of the FFI.
`}
# 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 `{