# 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`
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`
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 `'`
#
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