gamnit: make `SpriteSet` public so clients can use its services
[nit.git] / lib / sqlite3 / sqlite3.nit
index 0bdc29d..daa980b 100644 (file)
@@ -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`
@@ -239,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`
@@ -307,8 +318,9 @@ redef universal Int super Sqlite3Data end
 
 redef universal Float super Sqlite3Data end
 
-redef class String
-       super Sqlite3Data
+redef class String super Sqlite3Data end
+
+redef class Text
 
        # Return `self` between `'`s, escaping `\` and `'`
        #
@@ -317,6 +329,24 @@ redef class String
        do
                return "'{self.replace('\\', "\\\\").replace('\'', "''")}'"
        end
+
+       # Format the date represented by `self` into an escaped string for SQLite
+       #
+       # `self` must be composed of 1 to 3 integers separated by '-'.
+       # An incompatible format will result in an invalid date string.
+       #
+       #     assert "2016-5-1".to_sql_date_string == "'2016-05-01'"
+       #     assert "2016".to_sql_date_string == "'2016-01-01'"
+       fun to_sql_date_string: String
+       do
+               var parts = self.split("-")
+               for i in [parts.length .. 3[ do parts[i] = "1"
+
+               var year = parts[0].justify(4, 1.0, '0')
+               var month = parts[1].justify(2, 1.0, '0')
+               var day = parts[2].justify(2, 1.0, '0')
+               return "{year}-{month}-{day}".to_sql_string
+       end
 end
 
 # A Sqlite3 blob