/* * Created by PyramIDE. * User: フランスのトトロ aka (David RENÉ) * Date: 02/04/2017 * Time: 19:23 * © Calexium */ read data_base/sqlite.anubis read calexium_lib/database/db_utils.anubis read hayamiki_lib/types/hayamiki.anubis public define String referer_to_sql_clause ( HK_Referer referer, String table_name, List(String) table_columns )= if referer is { no_referer then " (1 = 1) ", hk_referer(referer_table, referer_row_id, fk_table, fk_column) then if referer_table = table_name then "id = " +referer_row_id else if fk_column:table_columns then fk_column + " = " + referer_row_id else " (1 = 1) ", } . public define Maybe(One) delete_from_ids ( SQLite3DataBase db, String table_name, List(Int) ids )= if sql_query_timeout(db, "DELETE FROM "+table_name+ " WHERE id IN ("+join(", ", to_List_String(ids))+");", [], "delete_from_ids") is { error(_) then failure, ok(_, _, _) then success(unique) }. public define Int get_count_by_clause ( SQLite3DataBase db, String table_name, String clause )= with final_clause = if clause = "" then "" else "WHERE "+clause, if sql_query_timeout(db, "SELECT COUNT(\"id\") FROM "+table_name+" "+final_clause+";", [], "get_count_by_clause") is { error(_) then 0, ok(_, cursor, _) then db_get_integer(cursor) } . public define Int get_count ( SQLite3DataBase db, String table_name )= get_count_by_clause(db, table_name, "") . public define List(Int) get_ids_by_clause ( SQLite3DataBase db, String table_name, String clause )= with final_clause = if clause = "" then "" else "WHERE "+clause, if sql_query_timeout(db, "SELECT \"id\" FROM "+table_name+" "+final_clause+";", [], "get_ids_by_clause") is { error(_) then [], ok(_, cursor, _) then db_get_integer_list(cursor) } . public define Maybe(Int) insert_or_update ( SQLite3DataBase db, String table_name, DB_id db_id, List(SQLite3_update_field) fields )= if db_id is { none then since make_insert_clause_and_binds(fields) is (binds, insert_columns, insert_values), if sql_query_timeout(db, "INSERT INTO "+table_name+" "+insert_columns+" VALUES "+insert_values+";", binds, table_name+" (INSERT)") is { error(sql_error) then //logError(debug_log, db_error(sql_error, table_name)); failure, ok(_, cursor, _) then if sql_query_scalar(db, "SELECT last_insert_rowid()") is { error(_) then failure, ok(datum) then with result1 = if datum is integer(n) then n else 0, println(table_name+" inserted id ["+result1+"]"); success(result1) } // SQLite3DataBase db, // String sql_command // ) // success(unique) }, db_id(idx) then since make_update_clause_and_binds(fields) is (binds, set_string), if sql_query_timeout(db, "UPDATE "+table_name+" SET "+set_string +" WHERE id = "+idx+";", binds, table_name+" (UPDATE)") is { error(sql_error) then //logError(debug_log, db_error(sql_error, table_name)); failure, ok(_, _, _) then success(idx) } } .