/* * Created by PyramIDE. * User: フランスのトトロ * Date: 31/12/2015 * Time: 16:18 * © Calexium */ read hayamiki_lib/types/hayamiki.anubis read tools/basis.anubis read tools/streams.anubis read system/string.anubis read fields.anubis read columns.anubis read html.anubis define List(String) /** */ _generate_type ( List(HK_Model_Column) columns, List(String) so_far )= if columns is { [] then reverse(so_far), [h . t ] then since h is hk_column(name, col_type, _, _), _generate_type(t, [ " "+fill(to_Anubis_type(col_type), 12) + " " + name . so_far]) }. public define Maybe(One) generate_type ( Stream stream, HK_Table table, Bool use_densaku )= since table is hk_table(name, short_name, model, display), since model is hk_model(columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //if we use densaku for generating the type, we insert the read of that type after densaku generation if use_densaku then write_string(stream, "\n\ntransmit types/generated/"+to_lower(type_name)+".anubis\n") //read of the type declaration else //generate the type of the HK_Table that contain all components if write_string(stream, "\n\npublic type "+type_name+":\n "+name+"\n (\n"+ //head of the type declaration join(",\n",_generate_type(columns, []))+ //all components of the type "\n ).\n") is //end of declaration { failure then println("can't write type "+type_name); failure, success(_) then success(unique) } . define List(String) /** */ _generate_get_default ( List(HK_Model_Column) columns, List(String) so_far )= if columns is { [] then reverse(so_far), [h . t ] then since h is hk_column(name, col_type, _, _), _generate_get_default(t, [ to_Anubis_default(col_type) . so_far]) }. public define Maybe(One) generate_get_default ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model(columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\ndefine "+type_name+"\n get_default_"+name+" =\n "+name+"("+ //head of the definition join(", ",_generate_get_default(columns, []))+ //all components of the type ").\n") is //end of the function { failure then println("can't write get_default "+type_name); failure, success(_) then success(unique) }. public define Maybe(One) generate_get_one ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model(columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\n"+ //SQL query "public define Maybe("+type_name+")\n"+ " get_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " String idx\n"+ " )=\n"+ " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+" WHERE id=\"+idx+\";\", [], \"get_"+name+"\") is\n"+ " {\n"+ " error(_) then failure,\n"+ " ok(_, cursor, _) then extract_"+name+"(cursor)\n"+ " }.\n\n"+ //SQL query "public define Maybe("+type_name+")\n"+ " get_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " Int idx\n"+ " )=\n"+ " get_"+name+"(db, to_decimal(idx)).\n\n"+ "public define Maybe("+type_name+")\n"+ " get_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " DB_id idx\n"+ " )=\n"+ " if idx is\n"+ " {\n"+ " none then failure,\n"+ " db_id(_idx) then get_"+name+"(db, to_decimal(_idx))\n"+ " }"+ ".\n\n" ) is //end of the function { failure then println("can't write generate_get_one "+type_name); failure, success(_) then success(unique) }. public define Maybe(One) generate_get_one_with_clause ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model(columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\n"+ //SQL query "public define Maybe("+type_name+")\n"+ " get_"+name+"_by_clause\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " String clause\n"+ " )=\n"+ " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+" WHERE \"+clause+\";\", [], \"get_"+name+"_by_clause\") is\n"+ " {\n"+ " error(_) then failure,\n"+ " ok(_, cursor, _) then extract_"+name+"(cursor)\n"+ " }.\n\n" ) is //end of the function { failure then println("can't write generate_get_one_by_clause "+type_name); failure, success(_) then success(unique) }. public define Maybe(One) generate_update ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model( columns, _), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\n"+ //SQL query "public define One\n"+ " update_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " "+type_name+" "+name+"\n"+ " )=\n"+ " if "+name+".id is\n"+ " {\n"+ //INSERT SQL query " none then\n"+ " forget(sql_query_timeout(db,\n"+ " \"INSERT INTO "+name+"\n"+ insert_values(columns, " ")+";\",\n"+ generate_Bind_list(columns, name, " ", true)+",\n"+ " \"update_"+name+" (INSERT)\")),\n"+ //UPDATE SQL query " db_id(idx) then\n"+ " if sql_query_timeout(db,\n"+ " \"UPDATE "+name+" SET\n"+ update_values(columns, " ")+"\n"+ " WHERE id = \"+idx+\";\",\n"+ generate_Bind_list(columns, name, " ", false)+",\n"+ " \"update_"+name+" (UPDATE)\") is { \n"+ " error(sql_error)\n"+ " then logError(debug_log, db_error(sql_error, \"update_"+name+"\")), ok(_, _, _) then unique }\n"+ " }.\n\n"+ "public define Maybe(One)\n"+ " update_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " DB_id db_id,\n"+ " List(SQLite3_update_field) fields\n"+ " )=\n"+ " if db_id is\n"+ " {\n"+ //INSERT SQL query " none then\n"+ " since make_insert_clause_and_binds(fields) is (binds, insert_columns, insert_values),\n"+ " if sql_query_timeout(db, \"INSERT INTO "+name+" \"+insert_columns+\" VALUES \"+insert_values+\";\", binds, \"update_"+name+" (INSERT)\") is\n"+ " {\n"+ " error(sql_error) then logError(debug_log, db_error(sql_error, \"update_"+name+"\"));failure,\n"+ " ok(_, _, _) then success(unique)\n"+ " },\n"+ //UPDATE SQL query " db_id(idx) then\n"+ " since make_update_clause_and_binds(fields) is (binds, set_string),\n"+ " if sql_query_timeout(db, \"UPDATE "+name+" SET \"+set_string +\" WHERE id = \"+idx+\";\", binds, \"update_"+name+" (UPDATE)\") is\n"+ " {\n"+ " error(sql_error) then logError(debug_log, db_error(sql_error, \"update_"+name+"\"));failure,\n"+ " ok(_, _, _) then success(unique)\n"+ " }\n"+ " }.\n\n"+ "public define Maybe(One)\n"+ " update_"+name+"_from_type\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " List(Web_arg) lwa\n"+ " )=\n"+ " if extract_"+type_name+"_from_web_arg(lwa, \"\") is\n"+ " {\n"+ " failure then logError(debug_log, \"update_"+name+" extract_"+type_name+"_from_web_arg is failure\"); failure,\n"+ " success("+name+") then success(update_"+name+"(db, "+name+"))\n"+ " }.\n\n"+ "public define Maybe(One)\n"+ " update_"+name+"_from_fields\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " List(Web_arg) lwa\n"+ " )=\n"+ " update_"+name+"(db, get_DB_id(lwa, \"id\"),extract_"+type_name+"_update_fields_from_web_arg(lwa, \"\"))\n"+ ".\n\n" ) is //end of the function { failure then println("can't write generate_update "+type_name); failure, success(_) then success(unique) }. public define Maybe(One) generate_show_string ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model( columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\n"+ //SQL query "public define String\n"+ " get_"+name+"_show_string\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " DB_id _idx\n"+ " )=\n"+ " if _idx is \n"+ " {\n"+ " none then default_select,\n"+ " db_id(idx) then \n"+ " if get_"+name+"(db, idx) is\n"+ " {\n"+ " failure then default_select,\n"+ " success(obj) then "+show_string+"\n"+ " }\n"+ " }." ) is //end of the function { failure then println("can't write generate_update "+type_name); failure, success(_) then success(unique) }. public define Maybe(One) generate_selector ( Stream stream, HK_Table table )= since table is hk_table(name, short_name, model, _), since model is hk_model( columns, show_string), with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. //generate the type of the table that contain all components if write_string(stream, "\n\n"+ "define List((List(CoreAttrs), WebArgValue, String))\n"+ " _get_selector_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " List("+type_name+") list,\n"+ " List((List(CoreAttrs), WebArgValue, String)) so_far\n"+ " )=\n"+ " if list is\n"+ " {\n"+ " [] then [selector_default_entry . reverse(so_far)],\n"+ " [ h . t ] then \n"+ " if h.id is \n"+ " {\n"+ " none then [selector_default_entry],\n"+ " db_id(_id) then _get_selector_"+name+"(db, t, [([], wav(to_String(_id)), get_"+name+"_show_string(db, h.id)) . so_far])\n"+ " }\n"+ " }.\n\n"+ "public define List((List(CoreAttrs), WebArgValue, String))\n"+ " get_selector_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " String clause\n"+ " )=\n"+ " _get_selector_"+name+"(db, get_all_"+name+"_by_clause_to_list_type(db, clause), [])." ) is //end of the function { failure then println("can't write generate_show_string "+type_name); failure, success(_) then success(unique) }.