Commit af1c6a960ac9d2a32ea22a01939206ccc5a8b079

Authored by David RENE
1 parent 7de986f5

database/db_utils.anubis :

add make_clause_and_binds for constructing clause and bind list from SQLite3_update_field
add bind_Int_or_NULL
add bind_String_or_NULL
add bind_Datetime
add bind_Date
add bind_Bool

database/db_types.anubis:
add to_DBInt for boolean value
calexium_lib/database/db_types.anubis
... ... @@ -38,14 +38,18 @@ public define String
38 38 (
39 39 DB_date d
40 40 )=
41   - d.date.
  41 + date(d).
  42 +
  43 +
42 44  
43 45 public define String
44 46 to_String
45 47 (
46 48 DB_datetime d
47 49 )=
48   - d.datetime.
  50 + datetime(d).
  51 +
  52 +
49 53  
50 54 public define String
51 55 to_DBString
... ... @@ -54,6 +58,19 @@ public define String
54 58 )=
55 59 if value then "1" else "0".
56 60  
  61 +public define Int
  62 + to_DBInt
  63 + (
  64 + Bool value
  65 + )=
  66 + if value then 1 else 0.
  67 +
57 68 public type SQLite3_update_field:
58 69 field(String column, SQLite3Bind bind).
59 70  
  71 +
  72 + * Some Bind helper *
  73 +
  74 +
  75 +
  76 +
... ...
calexium_lib/database/db_utils.anubis
... ... @@ -13,8 +13,14 @@ read system/string.anubis
13 13 read data_base/db_tools.anubis
14 14 read data_base/sqlite.anubis
15 15  
  16 +read calexium_lib/database/db_types.anubis
16 17 read calexium_lib/net_services_protocols/logger_service.anubis
17 18  
  19 +public define Int one_year_seconds = 365 * 86400. // amount of seconds during 1 year
  20 +// public define Int one_month_seconds = 31 * 86400.
  21 +public define Int one_week_seconds = 7 * 86400. // amount of seconds during 1 week
  22 +public define Int one_day_seconds = 86400. // amount of seconds during 1 day
  23 +
18 24 define String
19 25 __utime_to_string
20 26 (
... ... @@ -159,7 +165,7 @@ public define List(String)
159 165 db_get_string_list(table_cursor, [s . so_far])
160 166 }.
161 167  
162   -// Old sqlite3 API
  168 +// sqlite3 API
163 169 public define List(String)
164 170 db_get_string_list
165 171 (
... ... @@ -175,7 +181,7 @@ public define List(String)
175 181 db_get_string_list(table_cursor, [s . so_far])
176 182 }.
177 183  
178   -// Old sqlite3 API
  184 +// sqlite3 API
179 185 public define List(Int)
180 186 db_get_integer_list
181 187 (
... ... @@ -208,7 +214,73 @@ public define List(Int)
208 214 }.
209 215  
210 216  
  217 + Help to construct clause and a list of bind according to list of SQLite3_update_field.
  218 + This is useful when we want to construct a SQL query with only needs fields.
  219 +
  220 +
  221 +public define (List(SQLite3Bind), String)
  222 + make_clause_and_binds
  223 + (
  224 + List(SQLite3_update_field) fields,
  225 + List(SQLite3Bind) so_far,
  226 + List(String) clause
  227 + )=
  228 + if fields is
  229 + {
  230 + [] then (so_far, join(", ",clause)),
  231 + [ h . t ] then
  232 + if h is field(column, bind) then
  233 + make_clause_and_binds(t, [bind . so_far], [column+" = :v_"+column . clause])
  234 + }.
  235 +
  236 +
  237 + extended version of bind for SQLite3.
  238 +
  239 +public define SQLite3Bind
  240 + bind_Int_or_NULL
  241 + (
  242 + String name,
  243 + Int value
  244 + )=
  245 + if value = 0 then
  246 + bind_NULL(name)
  247 + else
  248 + bind_Int(name, value).
211 249  
  250 +public define SQLite3Bind
  251 + bind_String_or_NULL
  252 + (
  253 + String name,
  254 + String value
  255 + )=
  256 + if value = "" then
  257 + bind_NULL(name)
  258 + else
  259 + bind_String(name, value).
  260 +
  261 +public define SQLite3Bind
  262 + bind_Datetime
  263 + (
  264 + String name,
  265 + DB_datetime dt
  266 + )=
  267 + bind_String(name, datetime(dt)).
  268 +
  269 +public define SQLite3Bind
  270 + bind_Date
  271 + (
  272 + String name,
  273 + DB_date d
  274 + )=
  275 + bind_String(name, date(d)).
  276 +
  277 +public define SQLite3Bind
  278 + bind_Bool
  279 + (
  280 + String name,
  281 + Bool value
  282 + )=
  283 + bind_Int(name, to_DBInt(value)).
212 284  
213 285  
214 286 // -- Migration HELPERS ---------------
... ...