android & benitlux: use NitObject in clients
[nit.git] / lib / sqlite3 / sqlite3.nit
index 31c585f..daa980b 100644 (file)
@@ -57,8 +57,8 @@ class Sqlite3DB
        # 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
@@ -68,7 +68,7 @@ class Sqlite3DB
        # 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
 
@@ -99,7 +99,7 @@ class Sqlite3DB
        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
 
@@ -155,6 +155,17 @@ class StatementRow
        # Statement linked to `self`
        var statement: Statement
 
+       # Maps the column name to its value
+       fun map: Map[String, nullable Sqlite3Data]
+       do
+               var ret = new ArrayMap[String, nullable Sqlite3Data]
+               for i in [0 .. length[ do
+                       var st = self[i]
+                       ret[st.name] = st.value
+               end
+               return ret
+       end
+
        # Number of entries in this row
        #
        # require: `self.statement.is_open`
@@ -182,7 +193,9 @@ class StatementEntry
        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
@@ -237,9 +250,9 @@ class StatementEntry
        do
                assert statement_closed: statement.is_open
 
-               var native_string = statement.native_statement.column_text(index)
-               if native_string.address_is_null then return ""
-               return native_string.to_s_with_copy
+               var c_string = statement.native_statement.column_text(index)
+               if c_string.address_is_null then return ""
+               return c_string.to_s
        end
 
        # Get this entry as `Blob`