diff --git a/calexium_lib b/calexium_lib index 8b4b368..07f1bbc 160000 --- a/calexium_lib +++ b/calexium_lib @@ -1 +1 @@ -Subproject commit 8b4b368f40fb62c5583b14081d817309aa56337a +Subproject commit 07f1bbce4bbd814d97625f59577e98fc4f8eceea diff --git a/hayamiki_generator.aproj b/hayamiki_generator.aproj index a5804bb..027b378 100644 --- a/hayamiki_generator.aproj +++ b/hayamiki_generator.aproj @@ -92,6 +92,7 @@ + diff --git a/hayamiki_lib b/hayamiki_lib index 601f971..57345f2 160000 --- a/hayamiki_lib +++ b/hayamiki_lib @@ -1 +1 @@ -Subproject commit 601f9714449737d52f05351db81e3c22fd0b27a7 +Subproject commit 57345f2acee9ffeb19673b957d0aeb7296dfb742 diff --git a/src/generation/columns.anubis b/src/generation/columns.anubis index 62fab6a..acf6887 100644 --- a/src/generation/columns.anubis +++ b/src/generation/columns.anubis @@ -49,6 +49,7 @@ define List(String) */ _to_List_String ( + String table_name, List(HK_Model_Column) columns, Bool with_pk, //if set, add the primary key named "id" List(String) so_far @@ -59,9 +60,9 @@ define List(String) [h . t ] then since h is hk_column(name, _, _, _), if name = "id" & with_pk = false then - _to_List_String(t, with_pk, so_far) + _to_List_String(table_name, t, with_pk, so_far) else - _to_List_String(t, with_pk, [ name . so_far]) + _to_List_String(table_name, t, with_pk, [ table_name+name . so_far]) }. public define List(String) @@ -72,9 +73,18 @@ public define List(String) List(HK_Model_Column) columns, Bool with_pk )= - _to_List_String(columns, with_pk, []). - + _to_List_String("", columns, with_pk, []). +public define List(String) +/* return the list of all columns name + */ + to_List_String + ( + String table_name, + List(HK_Model_Column) columns, + Bool with_pk + )= + _to_List_String(table_name+".", columns, with_pk, []). public define String generate_constructor @@ -134,7 +144,7 @@ public define Maybe(String) if col_type is { //anubis(_T) then "constant_byte_array(0,0)", - p_key then failure, + p_key then if name = "id" then failure else success(name), //binary then "constant_byte_array(0,0)", boolean_field then success(name), date_field(attrs) then success(name), @@ -316,7 +326,7 @@ public define String since col is hk_column(name, col_type, _, _), if col_type is { - p_key then "get_"+general_type_name+"_show_string(db, "+current_type_name+".id)", + p_key then if name ="id" then "get_"+general_type_name+"_show_string(db, "+current_type_name+".id)" else "to_String("+current_type_name+"."+name+")", boolean_field then "to_String("+current_type_name+"."+name+")", date_field(attrs) then "to_String("+current_type_name+"."+name+")", time_field(attrs) then "to_String("+current_type_name+"."+name+")", diff --git a/src/generation/create_table.anubis b/src/generation/create_table.anubis index 406e29d..090d47b 100644 --- a/src/generation/create_table.anubis +++ b/src/generation/create_table.anubis @@ -50,7 +50,7 @@ define String Int fill_size )= since column is hk_column(name, col_type, attributes, _), - fill(name, fill_size)+ to_SQL_CREATE(col_type, attributes) + fill(name, fill_size)+ to_SQL_CREATE(col_type, attributes, name) . define String diff --git a/src/generation/fields.anubis b/src/generation/fields.anubis index c4ca503..4f6df6a 100644 --- a/src/generation/fields.anubis +++ b/src/generation/fields.anubis @@ -71,11 +71,12 @@ public define String ( HK_Model_Field t, List(HK_Model_Attr) attributes, + String name //name of component into the type ) = if t is { //anubis(_T) then "ByteArray", - p_key then fill("INTEGER", 15) + " PRIMARY KEY", + p_key then fill("INTEGER", 15) + (if name = "id" then " PRIMARY KEY" else ""), boolean_field then fill("BOOL", 15) + format_attributes(attributes), date_field(dt_attrs) then with new_attributes = if dt_attrs is auto_now_add then [default("(date('now', 'LOCALTIME'))")] else attributes, @@ -137,7 +138,7 @@ public define String if t is { //anubis(_T) then "constant_byte_array(0,0)", - p_key then "", + p_key then if name = "id" then "" else "bind_DB_id_or_NULL(\":v_"+name+"\", "+type_name+"."+name+")", //binary then "constant_byte_array(0,0)", boolean_field then "bind_Bool(\":v_"+name+"\", "+type_name+"."+name+")", date_field(attrs) then "bind_Date(\":v_"+name+"\", "+type_name+"."+name+")", @@ -145,10 +146,10 @@ public define String datetime_field(attrs) then if attrs is { none then "bind_Datetime(\":v_"+name+"\", "+type_name+"."+name+")", - auto_now then "bind_Datetime(\":v_"+name+"\", now)", + auto_now then "bind_Datetime(\":v_"+name+"\", db_now)", auto_now_add then if insert then - "bind_Datetime(\":v_"+name+"\", now)" + "bind_Datetime(\":v_"+name+"\", db_now)" else "" }, diff --git a/src/generation/files.anubis b/src/generation/files.anubis index ee5cf6a..f26b007 100644 --- a/src/generation/files.anubis +++ b/src/generation/files.anubis @@ -68,18 +68,18 @@ define Maybe(One) if generate_extract_db_cursor_to_json(strm, table) is { failure then failure, success(_) then if generate_get_all(strm, table) is { failure then failure, success(_) then if generate_get_all_with_clause(strm, table) is { failure then failure, success(_) then + if generate_get_one_with_clause(strm, table) is { failure then failure, success(_) then if generate_get_one(strm, table) is { failure then failure, success(_) then - if generate_get_one_with_clause(strm, table) is { failure then failure, success(_) then if generate_get_one_json(strm, table) is { failure then failure, success(_) then - if generate_get_count_by_clause(strm, table) is { failure then failure, success(_) then + //if generate_get_count_by_clause(strm, table) is { failure then failure, success(_) then if generate_update(strm, table) is { failure then failure, success(_) then - if generate_delete(strm, table) is { failure then failure, success(_) then + //if generate_delete(strm, table) is { failure then failure, success(_) then if generate_show_string(strm, table) is { failure then failure, success(_) then if generate_selector(strm, table) is { failure then failure, success(_) then if generate_choices_selector(strm, table) is { failure then failure, success(_) then if generate_VT_all_view(strm, table) is { failure then failure, success(_) then if generate_VT_all_edit(strm, table) is { failure then failure, success(_) then - success(unique)}}}}}}}}}}}}}}}}}}}}}} + success(unique)}}}}}}}}}}}}}}}}}}}} }. define One @@ -125,7 +125,7 @@ define Maybe(One) List(String) view, List(String) edit, // List(String) writer, - List(String) delete, +// List(String) delete, List(String) controllers, String dest_dir )= @@ -144,6 +144,7 @@ define Maybe(One) */ read tools/basis.anubis read hayamiki_lib/view/view_table_manager_types.anubis\n +read hayamiki_lib/controller/hk_controller.anubis read hayamiki_lib/controller/hk_sql_utils.anubis\n"+ join("\n", transmit)+"\n\n"+ "public define List(VTM_view)\n"+ @@ -158,14 +159,14 @@ join("\n", transmit)+"\n\n"+ //" generated_tm_writer_list =\n"+ //" [\n "+join(",\n ",writer)+"\n"+ //" ].\n\n"+ -"public define List(TM_delete)\n"+ -" generated_tm_delete_list =\n"+ -" [\n "+join(",\n ",delete)+"\n"+ -" ].\n\n"+ +//"public define List(TM_delete)\n"+ +//" generated_tm_delete_list =\n"+ +//" [\n "+join(",\n ",delete)+"\n"+ +//" ].\n\n"+ "public define List(HK_Table_controller)\n"+ " generated_hk_table_controller_list =\n"+ -" [\n "+join(",\n ",controllers)+"\n"+ -" ].\n\n" +" [\n "+join(",\n ",controllers)+"\n"+ +" ]\n.\n\n" ) is //end of the function { failure then println("can't write vtm "); failure, @@ -183,7 +184,7 @@ define One List(String) so_far_view, List(String) so_far_edit, // List(String) so_far_writer, - List(String) so_far_delete, +// List(String) so_far_delete, List(String) so_far_controllers, String dest_dir )= @@ -192,9 +193,9 @@ define One [] then if apps is { - [] then forget(generate_vtm_file(so_far_transmit, so_far_view, so_far_edit, so_far_delete, so_far_controllers, dest_dir));println("Generation finished"), + [] then forget(generate_vtm_file(so_far_transmit, so_far_view, so_far_edit, so_far_controllers, dest_dir));println("Generation finished"), [app . apps_t] then - _make_vtm(apps_t, app.hk_tables, so_far_transmit, so_far_view, so_far_edit, so_far_delete, so_far_controllers, dest_dir) + _make_vtm(apps_t, app.hk_tables, so_far_transmit, so_far_view, so_far_edit, so_far_controllers, dest_dir) }, @@ -204,25 +205,26 @@ define One with view = "vtm_view(\""+name+"\", get_viewable_"+name+", get_all_"+name+"_view_name)", with edit = "vtm_edit(\""+name+"\", get_editable_"+name+")", // with writer = "tm_writer(\""+name+"\", update_"+name+"_from_type, update_"+name+"_from_fields)", - with delete = "tm_delete(\""+name+"\", delete_"+name+")", +// with delete = "tm_delete(\""+name+"\", delete_"+name+")", with controller = "hk_table_controller(\""+name+"\", - //Create - update_"+name+"_from_type, - update_"+name+"_from_fields, - //Read - (SQLite3DataBase db, String clause) |-> get_count_by_clause(db, \""+name+"\", clause), - get_one_"+name+"_to_json, - get_all_"+name+"_by_clause_to_json, - //Delete - delete_"+name+", + //Create + update_"+name+"_from_type, + update_"+name+"_from_fields, + //Read + (SQLite3DataBase db, String clause) |-> get_count_by_clause(db, \""+name+"\", clause), + get_one_"+name+"_to_json, + get_all_"+name+"_by_clause_to_json, + //Delete + (SQLite3DataBase db, List(Int) ids) |-> delete_from_ids(db, \""+name+"\", ids), - //view interface - //selector - get_selector_"+name+"\n"+ -")", + //view interface + //selector + get_selector_"+name+", + hk_trigger_set(var([]), var([])) //initialize the triggers list as empty + )", - _make_vtm(apps, t, [transmit . so_far_transmit], [view . so_far_view], [edit . so_far_edit], [delete . so_far_delete], [controller . so_far_controllers], dest_dir) + _make_vtm(apps, t, [transmit . so_far_transmit], [view . so_far_view], [edit . so_far_edit], [controller . so_far_controllers], dest_dir) }. define One @@ -232,7 +234,7 @@ define One String dest_dir ) = - _make_vtm(apps, [], [], [], [], [], [], dest_dir). + _make_vtm(apps, [], [], [], [], [], dest_dir). define Maybe(One) diff --git a/src/generation/fn_delete.anubis b/src/generation/fn_delete.anubis index 26cc94d..ca80148 100644 --- a/src/generation/fn_delete.anubis +++ b/src/generation/fn_delete.anubis @@ -25,26 +25,26 @@ public define Maybe(One) 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 - "read tools/int.anubis\n\n"+ - "public define Maybe(One)\n"+ - " delete_"+name+"\n"+ - " (\n"+ - " SQLite3DataBase db,\n"+ - " List(Int) ids\n"+ - " )=\n"+ - //DELETE SQL query - " if sql_query_timeout(db,\n"+ - " \"DELETE FROM "+name+"\n"+ - " WHERE id IN (\"+join(\", \", to_List_String(ids))+\");\",\n"+ - " [],\n"+ - " \"delete_"+name+"\") is\n"+ - " {\n"+ - " error(_) then failure,\n"+ - " ok(_, _, _) then success(unique)\n"+ - " }.\n\n" + if write_string(stream, "" +// "\n\n"+ +// //SQL query +// "read tools/int.anubis\n\n"+ +// "public define Maybe(One)\n"+ +// " delete_"+name+"\n"+ +// " (\n"+ +// " SQLite3DataBase db,\n"+ +// " List(Int) ids\n"+ +// " )=\n"+ +// //DELETE SQL query +// " if sql_query_timeout(db,\n"+ +// " \"DELETE FROM "+name+"\n"+ +// " WHERE id IN (\"+join(\", \", to_List_String(ids))+\");\",\n"+ +// " [],\n"+ +// " \"delete_"+name+"\") is\n"+ +// " {\n"+ +// " error(_) then failure,\n"+ +// " ok(_, _, _) then success(unique)\n"+ +// " }.\n\n" // + // "public define Maybe(One)\n"+ // " delete_"+name+"\n"+ diff --git a/src/generation/header.anubis b/src/generation/header.anubis index f79b113..ff99b11 100644 --- a/src/generation/header.anubis +++ b/src/generation/header.anubis @@ -50,30 +50,30 @@ public define Maybe(One) * Time: "+_Int_to_ISO_8601_time(now)+" * */ -read tools/basis.anubis +transmit tools/basis.anubis -read calexium_lib/web/CXM_making_a_web_site.anubis -read calexium_lib/web/CXM_common.anubis -read calexium_lib/web/CXM_web_dump.anubis -read calexium_lib/web/CXM_web_arg_utils.anubis -read calexium_lib/web/CXM_json.anubis -read calexium_lib/web/widgets/icons_set.anubis -read data_base/sqlite.anubis -read data_base/db_tools.anubis -read calexium_lib/database/db_utils.anubis -read calexium_lib/database/db_types.anubis -read hayamiki_lib/view/types/hk_form.anubis -read hayamiki_lib/view/types/hk_view.anubis -read hayamiki_lib/view/types/hk_filter.anubis -read hayamiki_lib/types/hayamiki.anubis -read hayamiki_lib/controller/hk_sql_utils.anubis -read system/logger.anubis -read system/datetime.anubis -read system/convert.anubis -read system/string.anubis +transmit calexium_lib/web/CXM_making_a_web_site.anubis +transmit calexium_lib/web/CXM_common.anubis +transmit calexium_lib/web/CXM_web_dump.anubis +transmit calexium_lib/web/CXM_web_arg_utils.anubis +transmit calexium_lib/web/CXM_json.anubis +transmit calexium_lib/web/widgets/icons_set.anubis +transmit data_base/sqlite.anubis +transmit data_base/db_tools.anubis +transmit calexium_lib/database/db_utils.anubis +transmit calexium_lib/database/db_types.anubis +transmit hayamiki_lib/view/types/hk_form.anubis +transmit hayamiki_lib/view/types/hk_view.anubis +transmit hayamiki_lib/view/types/hk_filter.anubis +transmit hayamiki_lib/types/hayamiki.anubis +transmit hayamiki_lib/controller/hk_sql_utils.anubis +transmit system/logger.anubis +transmit system/datetime.anubis +transmit system/convert.anubis +transmit system/string.anubis -read calexium_lib/net_services_protocols/logger_service.anubis -read app/app_loggers.anubis +transmit calexium_lib/net_services_protocols/logger_service.anubis +transmit app/app_loggers.anubis ") is failure then failure else foreign_table_header(stream, columns) . diff --git a/src/generation/html.anubis b/src/generation/html.anubis index a95ea14..aa94f99 100644 --- a/src/generation/html.anubis +++ b/src/generation/html.anubis @@ -89,7 +89,11 @@ public define String since column is hk_column(name, col_type, _, _), if col_type is { - p_key then to_HTML_cell_link(column, data_name, general_type_name), + p_key then + if name = "id" then + to_HTML_cell_link(column, data_name, general_type_name) + else + to_HTML_cell_text(column, data_name, general_type_name), boolean_field then to_HTML_cell_icon(column, data_name, general_type_name), date_field(attrs) then to_HTML_cell_text(column, data_name, general_type_name), time_field(attrs) then to_HTML_cell_text(column, data_name, general_type_name), diff --git a/src/generation/json.anubis b/src/generation/json.anubis index 3d5a32d..c5a6748 100644 --- a/src/generation/json.anubis +++ b/src/generation/json.anubis @@ -23,7 +23,7 @@ public define String since col is hk_column(name, col_type, _, _), if col_type is { - p_key then current_type_name+".id", + p_key then current_type_name+"."+name, boolean_field then "to_JSON_String(to_String("+current_type_name+"."+name+"))", date_field(attrs) then "to_JSON_String(to_String("+current_type_name+"."+name+"))", time_field(attrs) then "to_JSON_String(to_String("+current_type_name+"."+name+"))", @@ -55,7 +55,7 @@ public define String since col is hk_column(name, col_type, _, _), if col_type is { - p_key then "json_member(\""+name+"\", json_int("+current_type_name+".id))", + p_key then "json_member(\""+name+"\", json_int("+current_type_name+"."+name+"))", boolean_field then "json_member(\""+name+"\", json_bool("+current_type_name+"."+name+"))", date_field(attrs) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", time_field(attrs) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", diff --git a/src/generation/types.anubis b/src/generation/types.anubis index 0200580..9f0705a 100644 --- a/src/generation/types.anubis +++ b/src/generation/types.anubis @@ -109,9 +109,11 @@ public define Maybe(One) //generate the type of the table that contain all components if write_string(stream, - "\n\ndefine List(String)\n "+name+"_columns =\n ["+ //head of the definition + "\n\npublic define List(String)\n "+name+"_columns =\n ["+ //head of the definition join(",\n ",enclose("\"", to_List_String(columns, false)))+ //all columns name wihtout id - " ].\n\n") is //end of the list + " ].\n\n"+ + "public define String\n"+ + " "+name+"_select_fields = \""+join(", ",to_List_String(name, columns, true))+"\".\n\n") is //end of the list { failure then println("can't write generate_columns_list "+type_name); failure, success(_) then success(unique) @@ -132,27 +134,36 @@ public define Maybe(One) 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"+ + " get_mb_"+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 + " get_"+name+"_by_clause(db, \" id = \"+idx).\n\n"+ + "public define Maybe("+type_name+")\n"+ - " get_"+name+"\n"+ + " get_mb_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " Int idx\n"+ " )=\n"+ - " get_"+name+"(db, to_decimal(idx)).\n\n"+ + " get_"+name+"_by_clause(db, \" id = \"+to_decimal(idx)).\n\n"+ + "public define Maybe("+type_name+")\n"+ - " get_"+name+"\n"+ + " get_mb_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ " DB_id idx\n"+ @@ -160,9 +171,27 @@ public define Maybe(One) " if idx is\n"+ " {\n"+ " none then failure,\n"+ - " db_id(_idx) then get_"+name+"(db, to_decimal(_idx))\n"+ + " db_id(_idx) then get_mb_"+name+"(db, _idx)\n"+ " }"+ - ".\n\n" + + ".\n\n"+ + "public define "+type_name+"\n"+ + " get_"+name+"\n"+ + " (\n"+ + " SQLite3DataBase db,\n"+ + " DB_id idx\n"+ + " )=\n"+ + " if idx is\n"+ + " {\n"+ + " none then get_default_"+name+",\n"+ + " db_id(_idx) then\n"+ + " if get_"+name+"_by_clause(db, \" id = \"+to_decimal(_idx)) is\n"+ + " {\n"+ + " failure then get_default_"+name+",\n"+ + " success(r) then r\n"+ + " }\n"+ + " }"+ + ".\n\n" ) is //end of the function { failure then println("can't write generate_get_one "+type_name); failure, @@ -268,7 +297,7 @@ public define Maybe(One) if write_string(stream, "\n\n"+ //SQL query - "public define One\n"+ + "public define Maybe(Int)\n"+ " update_"+name+"\n"+ " (\n"+ " SQLite3DataBase db,\n"+ @@ -278,11 +307,24 @@ public define Maybe(One) " {\n"+ //INSERT SQL query " none then\n"+ - " forget(sql_query_timeout(db,\n"+ + " if 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_"+name+" (INSERT)\") is\n"+ + " {\n"+ + " error(sql_error) then\n"+ + " //logError(debug_log, db_error(sql_error, table_name));\n"+ + " failure,\n"+ + " ok(_, cursor, _) then\n"+ + " if sql_query_scalar(db, \"SELECT last_insert_rowid()\") is\n"+ + " {\n"+ + " error(_) then failure,\n"+ + " ok(datum) then\n"+ + " with r = if datum is integer(n) then n else 0,\n"+ + " success(r)\n"+ + " }\n"+ + " },\n"+ //UPDATE SQL query " db_id(idx) then\n"+ " if sql_query_timeout(db,\n"+ @@ -291,38 +333,39 @@ public define Maybe(One) " 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"+ + " error(sql_error) then\n"+ + " logError(debug_log, db_error(sql_error, \"update_"+name+"\")); failure,\n"+ + " ok(_, _, _) then success(idx) }\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+"\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"+ + "public define Maybe(Int)\n"+ " update_"+name+"_from_type\n"+ " (\n"+ " SQLite3DataBase db,\n"+ @@ -331,16 +374,16 @@ public define Maybe(One) " 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"+ + " success("+name+") then update_"+name+"(db, "+name+")\n"+ " }.\n\n"+ - "public define Maybe(One)\n"+ + "public define Maybe(Int)\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"+ + " insert_or_update(db, \""+name+"\", get_DB_id(lwa, \"id\"), extract_"+type_name+"_update_fields_from_web_arg(lwa, \"\"))\n"+ ".\n\n" ) is //end of the function @@ -373,7 +416,7 @@ public define Maybe(One) " {\n"+ " none then default_select,\n"+ " db_id(idx) then \n"+ - " if get_"+name+"(db, idx) is\n"+ + " if get_mb_"+name+"(db, idx) is\n"+ " {\n"+ " failure then default_select,\n"+ " success(obj) then "+show_string+"\n"+ diff --git a/src/generation/vt_edit.anubis b/src/generation/vt_edit.anubis index 76e7da5..280f994 100644 --- a/src/generation/vt_edit.anubis +++ b/src/generation/vt_edit.anubis @@ -153,12 +153,7 @@ public define Maybe(One) " with "+table_name+" = if action is\n"+ " {\n"+ " new_entry then get_default_"+table_name+"\n"+ - " edit_entry(idx) then\n"+ - " if get_"+table_name+"(db, idx) is\n"+ - " {\n"+ - " failure then get_default_"+table_name+",\n"+ - " success(data) then data\n"+ - " }\n"+ + " edit_entry(idx) then get_"+table_name+"(db, idx)\n"+ " },\n"+ _generate_get_editable_if_else(table_name, edit_view, "")+ ".\n" diff --git a/src/generation/web_args.anubis b/src/generation/web_args.anubis index 50defe2..54f25eb 100644 --- a/src/generation/web_args.anubis +++ b/src/generation/web_args.anubis @@ -8,6 +8,7 @@ read hayamiki_lib/types/hayamiki.anubis read tools/streams.anubis +read fields.anubis read columns.anubis public define String @@ -35,7 +36,7 @@ public define String phone_field then "get_String(lwa, __prefix__+\""+name+"\")", email_field then "get_String(lwa, __prefix__+\""+name+"\")" }. - + define (List(String), Int) /* */ @@ -62,6 +63,52 @@ define (List(String), Int) _generate_extract_web_arg_to_type(t, [ line . so_far], closure+1) } . + +public define String + from_web_arg_to_type_with_default + ( + HK_Model_Field col_type, + String name + ) = + if col_type is + { + //anubis(_T) then "constant_byte_array(0,0)", + p_key then "get_DB_id(lwa, __prefix__+\""+name+"\"),", + //binary then "constant_byte_array(0,0)", + boolean_field then "get_Bool(lwa, __prefix__+\""+name+"\"),", + date_field(attrs) then if attrs = none then "get_DB_date(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+")," else "get_dummy_DB_date,", + time_field(attrs) then if attrs = none then "get_DB_time(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+")," else "get_dummy_DB_time,", + datetime_field(attrs) then if attrs = none then "get_DB_datetime(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+")," else "get_dummy_DB_datetime,", + foreign_key(_,_,_) then "get_DB_id(lwa, __prefix__+\""+name+"\"),", + integer_field(_) then "get_Int(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + float_field then "get_Float(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + char_field(_,_) then "get_String(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + password_field(min_size) then "if get_Password(lwa, __prefix__+\""+name+"_1\", __prefix__+\""+name+"_2\") is { failure then "+to_Anubis_default(col_type)+", success(pass) then pass},", + text_field(_) then "get_String(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + color_field then "get_String(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + phone_field then "get_String(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+"),", + email_field then "get_String(lwa, __prefix__+\""+name+"\", "+to_Anubis_default(col_type)+")," + }. + +define List(String) +/* + */ + _generate_extract_web_arg_to_type_with_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, _, _), + with result = from_web_arg_to_type_with_default(col_type, name), + //If the field is not editable no need to get it from the web + _generate_extract_web_arg_to_type_with_default(t, [ " "+result . so_far]) + + } +. public define Maybe(One) /* generate the function which extract the entire database table row type from web @@ -87,7 +134,18 @@ public define Maybe(One) to_String(list_of_web_arg)+ //all editable components of the type " success(\n"+generate_constructor(name, columns, " ")+")\n"+ //generate type construction with values got from web arg " "+fill(nb_closure, '}')+ //add close } according to number of web arg - ".\n") is //end of the function + ".\n\n"+ + "\n\npublic define "+type_name+"\n"+ + " extract_"+type_name+"_from_web_arg_with_default\n"+ + " (\n"+ + " List(Web_arg) lwa,\n"+ + " String __prefix__\n"+ + " )=\n"+ //head of the definition + " "+name+"(\n"+ + to_String(_generate_extract_web_arg_to_type_with_default(columns, []))+ + ")\n"+ //generate type construction with values got from web arg + ".\n\n" + ) is //end of the function { failure then println("can't write extract_"+type_name+"_from_web_arg "+type_name); failure, success(_) then success(unique) @@ -105,28 +163,32 @@ public define String if t is { //anubis(_T) then "constant_byte_array(0,0)", - p_key then "[]", + p_key then + if name ="id" then + "[]" + else + "if get_mb_DB_id(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_DB_id_or_NULL(\":v_"+name+"\", "+name+"))] }", boolean_field then "if get_mb_Bool(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Bool(\":v_"+name+"\", "+name+"))] }", date_field(attrs) then if attrs is { none then "if get_DB_date(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Date(\":v_"+name+"\", "+name+"))] }", - auto_now then "[field(\""+name+"\", bind_Date(\":v_"+name+"\", now))]", + auto_now then "[field(\""+name+"\", bind_Date(\":v_"+name+"\", db_now))]", auto_now_add then "[]" }, time_field(attrs) then if attrs is { none then "if get_DB_time(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Time(\":v_"+name+"\", "+name+"))] }", - auto_now then "[field(\""+name+"\", bind_Time(\":v_"+name+"\", now))]", + auto_now then "[field(\""+name+"\", bind_Time(\":v_"+name+"\", db_now))]", auto_now_add then "[]" }, datetime_field(attrs) then if attrs is { none then "if get_DB_datetime(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Datetime(\":v_"+name+"\", "+name+"))] }", - auto_now then "[field(\""+name+"\", bind_Datetime(\":v_"+name+"\", now))]", + auto_now then "[field(\""+name+"\", bind_Datetime(\":v_"+name+"\", db_now))]", auto_now_add then "[]" }, foreign_key(_,_,_) then //"with "+name+" = get_DB_id(lwa, __prefix__+\""+name+"\"),", -- libgit2 0.21.4