Commit 936e54edd28d6b2a552fb8e663511b461afa4eb0
1 parent
059b51a6
revamp generator to handle, JSON, jQgrid and many more improvements
Showing
14 changed files
with
743 additions
and
399 deletions
Show diff stats
hayamiki_generator.aproj
| ... | ... | @@ -525,6 +525,7 @@ |
| 525 | 525 | <Compile Include="src\generation\create_table.anubis" /> |
| 526 | 526 | <Compile Include="src\generation\cxm_lib_menu.anubis" /> |
| 527 | 527 | <Compile Include="src\generation\densaku.anubis" /> |
| 528 | + <Compile Include="src\generation\extractor.anubis" /> | |
| 528 | 529 | <Compile Include="src\generation\fields.anubis" /> |
| 529 | 530 | <Compile Include="src\generation\files.anubis" /> |
| 530 | 531 | <Compile Include="src\generation\fn_delete.anubis" /> |
| ... | ... | @@ -532,9 +533,13 @@ |
| 532 | 533 | <Compile Include="src\generation\hk_menu.anubis" /> |
| 533 | 534 | <Compile Include="src\generation\html.anubis" /> |
| 534 | 535 | <Compile Include="src\generation\icons.anubis" /> |
| 536 | + <Compile Include="src\generation\json.anubis" /> | |
| 535 | 537 | <Compile Include="src\generation\model.anubis" /> |
| 538 | + <Compile Include="src\generation\SQL_get_all.anubis" /> | |
| 539 | + <Compile Include="src\generation\SQL_get_count.anubis" /> | |
| 536 | 540 | <Compile Include="src\generation\types.anubis" /> |
| 537 | 541 | <Compile Include="src\generation\vt_edit.anubis" /> |
| 542 | + <Compile Include="src\generation\vt_view.anubis" /> | |
| 538 | 543 | <Compile Include="src\generation\web_args.anubis" /> |
| 539 | 544 | <Compile Include="src\main.anubis" /> |
| 540 | 545 | <Compile Include="src\model.3.0.0.anubis" /> | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 25/03/2017 | |
| 5 | + * Time: 04:26 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read hayamiki_lib/types/hayamiki.anubis | |
| 10 | +read tools/streams.anubis | |
| 11 | +read columns.anubis | |
| 12 | + | |
| 13 | +public define Maybe(One) | |
| 14 | + generate_get_all | |
| 15 | + ( | |
| 16 | + Stream stream, | |
| 17 | + HK_Table table | |
| 18 | + )= | |
| 19 | + since table is hk_table(name, short_name, model, _), | |
| 20 | + since model is hk_model(columns, _), | |
| 21 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 22 | + | |
| 23 | + //generate the type of the table that contain all components | |
| 24 | + if write_string(stream, | |
| 25 | + "\n\n"+ | |
| 26 | + "public define List("+type_name+")\n"+ | |
| 27 | + " _get_all_"+name+"\n"+ | |
| 28 | + " (\n"+ | |
| 29 | + " One -> SQLite3Row table_cursor,\n"+ | |
| 30 | + " List("+type_name+") so_far\n"+ | |
| 31 | + " ) =\n"+ | |
| 32 | + " if extract_"+name+"(table_cursor) is\n"+ | |
| 33 | + " {\n"+ | |
| 34 | + " failure then reverse(so_far),\n"+ | |
| 35 | + " success(data) then _get_all_"+name+"(table_cursor, [data . so_far])\n"+ | |
| 36 | + " }.\n"+ | |
| 37 | + "\n\n" | |
| 38 | + //SQL query | |
| 39 | +// "public define List("+type_name+")\n"+ | |
| 40 | +// " get_all_"+name+"\n"+ | |
| 41 | +// " (\n"+ | |
| 42 | +// " SQLite3DataBase db,\n"+ | |
| 43 | +// " )=\n"+ | |
| 44 | +// " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+";\", [], \"get_all_"+name+"\") is\n"+ | |
| 45 | +// " {\n"+ | |
| 46 | +// " error(_) then [],\n"+ | |
| 47 | +// " ok(_, cursor, _) then _get_all_"+name+"(cursor, [])\n"+ | |
| 48 | +// " }.\n"+ | |
| 49 | +// "\n\n" | |
| 50 | + ) is //end of the function | |
| 51 | + { | |
| 52 | + failure then println("can't write generate_get_all "+type_name); failure, | |
| 53 | + success(_) then success(unique) | |
| 54 | + }. | |
| 55 | + | |
| 56 | + | |
| 57 | +public define Maybe(One) | |
| 58 | + generate_get_all_with_clause | |
| 59 | + ( | |
| 60 | + Stream stream, | |
| 61 | + HK_Table table | |
| 62 | + )= | |
| 63 | + since table is hk_table(name, short_name, model, _), | |
| 64 | + since model is hk_model(columns, _), | |
| 65 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 66 | + | |
| 67 | + //generate the type of the table that contain all components | |
| 68 | + if write_string(stream, | |
| 69 | + //SQL query | |
| 70 | + "public define Maybe(One -> SQLite3Row)\n"+ | |
| 71 | + " get_all_"+name+"_by_clause\n"+ | |
| 72 | + " (\n"+ | |
| 73 | + " SQLite3DataBase db,\n"+ | |
| 74 | + " String clause\n"+ | |
| 75 | + " )=\n"+ | |
| 76 | + " with final_clause = if clause = \"\" then\n"+ | |
| 77 | + " \"\"\n"+ | |
| 78 | + " else\n"+ | |
| 79 | + " \"WHERE \"+clause,\n"+ | |
| 80 | + "\n"+ | |
| 81 | + " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+" \"+final_clause+\";\", [], \"get_all_"+name+"_by_clause\") is\n"+ | |
| 82 | + " {\n"+ | |
| 83 | + " error(_) then failure,\n"+ | |
| 84 | + " ok(_, cursor, _) then success(cursor)\n"+ | |
| 85 | + " }\n"+ | |
| 86 | + ".\n"+ | |
| 87 | + "\n"+ | |
| 88 | + "public define List("+type_name+")\n"+ | |
| 89 | + " get_all_"+name+"_by_clause_to_list_type\n"+ | |
| 90 | + " (\n"+ | |
| 91 | + " SQLite3DataBase db,\n"+ | |
| 92 | + " String clause\n"+ | |
| 93 | + " )=\n"+ | |
| 94 | + " if get_all_"+name+"_by_clause(db, clause) is\n"+ | |
| 95 | + " {\n"+ | |
| 96 | + " failure then [],\n"+ | |
| 97 | + " success(cursor) then _get_all_"+name+"(cursor, [])\n"+ | |
| 98 | + " }\n"+ | |
| 99 | + ".\n"+ | |
| 100 | + "public define List(JsonValue)\n"+ | |
| 101 | + " _get_all_"+name+"_to_json\n"+ | |
| 102 | + " (\n"+ | |
| 103 | + " SQLite3DataBase db,\n"+ | |
| 104 | + " One -> SQLite3Row table_cursor,\n"+ | |
| 105 | + " List(JsonValue) so_far\n"+ | |
| 106 | + " ) =\n"+ | |
| 107 | + " if extract_"+name+"_cursor_to_json(db, table_cursor) is\n"+ | |
| 108 | + " {\n"+ | |
| 109 | + " failure then reverse(so_far),\n"+ | |
| 110 | + " success(data) then _get_all_"+name+"_to_json(db, table_cursor, [data . so_far])\n"+ | |
| 111 | + " }\n"+ | |
| 112 | + ".\n"+ | |
| 113 | +"public define JsonMember\n"+ | |
| 114 | +" get_all_"+name+"_by_clause_to_json\n"+ | |
| 115 | +" (\n"+ | |
| 116 | +" SQLite3DataBase db,\n"+ | |
| 117 | +" String clause\n"+ | |
| 118 | +" )=\n"+ | |
| 119 | +" if get_all_"+name+"_by_clause(db, clause) is\n"+ | |
| 120 | +" {\n"+ | |
| 121 | +" failure then json_member(\"rows\", json_array([])),\n"+ | |
| 122 | +" success(cursor) then json_member(\"rows\", json_array(_get_all_"+name+"_to_json(db, cursor, [])))\n"+ | |
| 123 | +" }\n"+ | |
| 124 | +".\n" | |
| 125 | + ) is //end of the function | |
| 126 | + { | |
| 127 | + failure then println("can't write generate_get_all "+type_name); failure, | |
| 128 | + success(_) then success(unique) | |
| 129 | + } | |
| 130 | +. | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 25/03/2017 | |
| 5 | + * Time: 01:57 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read hayamiki_lib/types/hayamiki.anubis | |
| 10 | +read tools/basis.anubis | |
| 11 | +read tools/streams.anubis | |
| 12 | +read system/string.anubis | |
| 13 | + | |
| 14 | + | |
| 15 | +public define Maybe(One) | |
| 16 | + generate_get_count_by_clause | |
| 17 | + ( | |
| 18 | + Stream stream, | |
| 19 | + HK_Table table | |
| 20 | + )= | |
| 21 | + since table is hk_table(name, short_name, model, _), | |
| 22 | + since model is hk_model(columns, _), | |
| 23 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 24 | + | |
| 25 | + //generate the type of the table that contain all components | |
| 26 | + if write_string(stream, | |
| 27 | + //SQL query | |
| 28 | + "public define Int\n"+ | |
| 29 | + " get_count_"+name+"_by_clause\n"+ | |
| 30 | + " (\n"+ | |
| 31 | + " SQLite3DataBase db,\n"+ | |
| 32 | + " String clause\n"+ | |
| 33 | + " )=\n"+ | |
| 34 | + " with final_clause = if clause = \"\" then\n"+ | |
| 35 | + " \"\"\n"+ | |
| 36 | + " else\n"+ | |
| 37 | + " \"WHERE \"+clause,\n"+ | |
| 38 | + "\n"+ | |
| 39 | + " if sql_query_timeout(db, \"SELECT COUNT(\\\"id\\\") FROM "+name+" \"+final_clause+\";\", [], \"get_count_"+name+"_by_clause\") is\n"+ | |
| 40 | + " {\n"+ | |
| 41 | + " error(_) then 0,\n"+ | |
| 42 | + " ok(_, cursor, _) then db_get_integer(cursor)\n"+ | |
| 43 | + " }\n"+ | |
| 44 | + ".\n\n" | |
| 45 | + | |
| 46 | + ) is //end of the function | |
| 47 | + { | |
| 48 | + failure then println("can't write generate_get_all "+type_name); failure, | |
| 49 | + success(_) then success(unique) | |
| 50 | + } | |
| 51 | +. | ... | ... |
src/generation/choices_selector.anubis
| ... | ... | @@ -29,6 +29,7 @@ define Maybe(One) |
| 29 | 29 | " get_choices_selector_"+table_name+"_"+column_name+"\n"+ |
| 30 | 30 | " (\n"+ |
| 31 | 31 | " SQLite3DataBase db,\n"+ |
| 32 | + " String clause\n"+ | |
| 32 | 33 | " )=\n"+ |
| 33 | 34 | " [\n"+ |
| 34 | 35 | concat(map((HK_Text_Choice hk_txt_choice) |-> |
| ... | ... | @@ -57,6 +58,7 @@ define Maybe(One) |
| 57 | 58 | " get_choices_selector_"+table_name+"_"+column_name+"\n"+ |
| 58 | 59 | " (\n"+ |
| 59 | 60 | " SQLite3DataBase db,\n"+ |
| 61 | + " String clause\n"+ | |
| 60 | 62 | " )=\n"+ |
| 61 | 63 | " [\n"+ |
| 62 | 64 | concat(map((HK_Int_Choice hk_int_choice) |-> | ... | ... |
src/generation/columns.anubis
| ... | ... | @@ -74,34 +74,6 @@ public define List(String) |
| 74 | 74 | _to_List_String(columns, with_pk, []). |
| 75 | 75 | |
| 76 | 76 | |
| 77 | -define List(String) | |
| 78 | -/** | |
| 79 | - */ | |
| 80 | - components | |
| 81 | - ( | |
| 82 | - List(HK_Model_Column) columns, | |
| 83 | - String cursor_name, | |
| 84 | - List(String) so_far, | |
| 85 | - Int idx | |
| 86 | - )= | |
| 87 | - if columns is | |
| 88 | - { | |
| 89 | - [] then reverse(so_far), | |
| 90 | - [h . t ] then | |
| 91 | - since h is hk_column(name, col_type, _, _), | |
| 92 | - with line = fill(from_DB_cursor(col_type, cursor_name, idx), 35)+ "/* "+name+" */", | |
| 93 | - components(t, cursor_name, [line . so_far], idx + 1 ) | |
| 94 | - }. | |
| 95 | - | |
| 96 | -public define String | |
| 97 | - generate_constructor_from_cursor | |
| 98 | - ( | |
| 99 | - String constructor_name, | |
| 100 | - String cursor_name, | |
| 101 | - List(HK_Model_Column) columns, | |
| 102 | - String indent | |
| 103 | - )= | |
| 104 | - indent+constructor_name+"(\n"+indent+" "+join(",\n"+indent+" ", components(columns, cursor_name, [], 0))+"\n"+indent+")". | |
| 105 | 77 | |
| 106 | 78 | public define String |
| 107 | 79 | generate_constructor |
| ... | ... | @@ -316,13 +288,7 @@ public define String |
| 316 | 288 | } |
| 317 | 289 | }. |
| 318 | 290 | |
| 319 | -public define String | |
| 320 | - make_list_view_header | |
| 321 | - ( | |
| 322 | - List(String) list_view, | |
| 323 | - String indent | |
| 324 | - )= | |
| 325 | - indent+join(",\n"+indent, map((String text) |-> "text(\""+to_upper(text)+"\")", list_view)). | |
| 291 | + | |
| 326 | 292 | |
| 327 | 293 | |
| 328 | 294 | |
| ... | ... | @@ -338,10 +304,8 @@ public define String |
| 338 | 304 | ) = |
| 339 | 305 | since col is hk_column(name, col_type, _, _), |
| 340 | 306 | if col_type is |
| 341 | - { | |
| 342 | - //anubis(_T) then "constant_byte_array(0,0)", | |
| 307 | + { | |
| 343 | 308 | p_key then "get_"+general_type_name+"_show_string(db, "+current_type_name+".id)", |
| 344 | - //binary then "constant_byte_array(0,0)", | |
| 345 | 309 | boolean_field then "to_String("+current_type_name+"."+name+")", |
| 346 | 310 | date_field(attrs) then "to_String("+current_type_name+"."+name+")", |
| 347 | 311 | time_field(attrs) then "to_String("+current_type_name+"."+name+")", |
| ... | ... | @@ -353,3 +317,5 @@ public define String |
| 353 | 317 | password_field(_) then current_type_name+"."+name, |
| 354 | 318 | text_field(_) then current_type_name+"."+name |
| 355 | 319 | }. |
| 320 | + | |
| 321 | + | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 25/03/2017 | |
| 5 | + * Time: 03:18 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read hayamiki_lib/types/hayamiki.anubis | |
| 10 | +read json.anubis | |
| 11 | +read tools/streams.anubis | |
| 12 | + | |
| 13 | +public define String | |
| 14 | + from_DB_cursor | |
| 15 | + ( | |
| 16 | + HK_Model_Field t, | |
| 17 | + String cursor, //db cursor name | |
| 18 | + Int index //current index of the column in the cursor | |
| 19 | + ) = | |
| 20 | + with cursor_index = "("+cursor+")("+index+")", | |
| 21 | + if t is | |
| 22 | + { | |
| 23 | + p_key then "db_id((Int)db_integer"+cursor_index+")", | |
| 24 | + boolean_field then "db_bool"+cursor_index, | |
| 25 | + date_field(_) then "db_date(text"+cursor_index+")", | |
| 26 | + time_field(_) then "db_time(text"+cursor_index+")", | |
| 27 | + datetime_field(_) then "db_datetime(text"+cursor_index+")", | |
| 28 | + foreign_key(_,_) then "db_id((Int)db_integer"+cursor_index+")", | |
| 29 | + integer_field(_) then "(Int)db_integer"+cursor_index, | |
| 30 | + float_field then "db_float"+cursor_index, | |
| 31 | + char_field(_,_) then "text"+cursor_index, | |
| 32 | + password_field(_) then "text"+cursor_index, | |
| 33 | + text_field(_) then "text"+cursor_index | |
| 34 | + }. | |
| 35 | + | |
| 36 | +define List(String) | |
| 37 | +/** | |
| 38 | + */ | |
| 39 | + components | |
| 40 | + ( | |
| 41 | + List(HK_Model_Column) columns, | |
| 42 | + String cursor_name, | |
| 43 | + List(String) so_far, | |
| 44 | + Int idx | |
| 45 | + )= | |
| 46 | + if columns is | |
| 47 | + { | |
| 48 | + [] then reverse(so_far), | |
| 49 | + [h . t ] then | |
| 50 | + since h is hk_column(name, col_type, _, _), | |
| 51 | + with line = fill(from_DB_cursor(col_type, cursor_name, idx), 35)+ "/* "+name+" */", | |
| 52 | + components(t, cursor_name, [line . so_far], idx + 1 ) | |
| 53 | + }. | |
| 54 | + | |
| 55 | +public define String | |
| 56 | + generate_constructor_from_cursor | |
| 57 | + ( | |
| 58 | + String constructor_name, | |
| 59 | + String cursor_name, | |
| 60 | + List(HK_Model_Column) columns, | |
| 61 | + String indent | |
| 62 | + )= | |
| 63 | + indent+constructor_name+"(\n"+indent+" "+join(",\n"+indent+" ", components(columns, cursor_name, [], 0))+"\n"+indent+")". | |
| 64 | + | |
| 65 | + | |
| 66 | +public define Maybe(One) | |
| 67 | + generate_extract_db_cursor_to_mb_type | |
| 68 | + ( | |
| 69 | + Stream stream, | |
| 70 | + HK_Table table | |
| 71 | + )= | |
| 72 | + since table is hk_table(name, short_name, model, display), | |
| 73 | + since model is hk_model(columns, _), | |
| 74 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 75 | + | |
| 76 | + //generate the type of the table that contain all components | |
| 77 | + if write_string(stream, | |
| 78 | + "\n\n"+ | |
| 79 | + "public define Maybe("+type_name+")\n"+ | |
| 80 | + " extract_"+name+"\n"+ | |
| 81 | + " (\n"+ | |
| 82 | + " One -> SQLite3Row table_cursor\n"+ | |
| 83 | + " ) =\n"+ | |
| 84 | + " if table_cursor(unique) is\n"+ | |
| 85 | + " {\n"+ | |
| 86 | + " error(sql_error) then println(db_error(sql_error, \"extract_"+name+"\")); failure,\n"+ | |
| 87 | + " no_more_row then failure,\n"+ | |
| 88 | + " row(cursor) then\n"+ | |
| 89 | + " success(\n"+generate_constructor_from_cursor(name, "cursor", columns, " ")+")\n"+ //generate type construction with values got from web arg | |
| 90 | + " }.\n") is //end of the function | |
| 91 | + { | |
| 92 | + failure then println("can't write generate_extract_db_cursor "+type_name); failure, | |
| 93 | + success(_) then success(unique) | |
| 94 | + }. | |
| 95 | + /************* JSON *************/ | |
| 96 | + | |
| 97 | +define List(String) | |
| 98 | +/** | |
| 99 | + */ | |
| 100 | + to_json_member | |
| 101 | + ( | |
| 102 | + List(HK_Model_Column) columns, | |
| 103 | + String cursor_name, | |
| 104 | + List(String) so_far, | |
| 105 | + Int idx | |
| 106 | + )= | |
| 107 | + if columns is | |
| 108 | + { | |
| 109 | + [] then reverse(so_far), | |
| 110 | + [h . t ] then | |
| 111 | + since h is hk_column(name, col_type, _, _), | |
| 112 | + with line = fill(from_DB_cursor_to_JSON(h, cursor_name, idx), 135)+ "/* "+name+" */", | |
| 113 | + to_json_member(t, cursor_name, [line . so_far], idx + 1 ) | |
| 114 | + } | |
| 115 | +. | |
| 116 | + | |
| 117 | +public define String | |
| 118 | + generate_json_object_from_cursor | |
| 119 | + ( | |
| 120 | + String constructor_name, | |
| 121 | + String cursor_name, | |
| 122 | + List(HK_Model_Column) columns, | |
| 123 | + String indent | |
| 124 | + )= | |
| 125 | + indent+"json_object([\n"+indent+" "+join(",\n"+indent+" ", to_json_member(columns, cursor_name, [], 0))+"\n"+indent+"])". | |
| 126 | + | |
| 127 | + | |
| 128 | +public define Maybe(One) | |
| 129 | + generate_extract_db_cursor_to_json | |
| 130 | + ( | |
| 131 | + Stream stream, | |
| 132 | + HK_Table table | |
| 133 | + )= | |
| 134 | + since table is hk_table(name, short_name, model, display), | |
| 135 | + since model is hk_model(columns, _), | |
| 136 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 137 | + | |
| 138 | + //generate the type of the table that contain all components | |
| 139 | + if write_string(stream, | |
| 140 | + "\n\n"+ | |
| 141 | + "public define Maybe(JsonValue)\n"+ | |
| 142 | + " extract_"+name+"_cursor_to_json\n"+ | |
| 143 | + " (\n"+ | |
| 144 | + " SQLite3DataBase db,\n"+ | |
| 145 | + " One -> SQLite3Row table_cursor\n"+ | |
| 146 | + " ) =\n"+ | |
| 147 | + " if table_cursor(unique) is\n"+ | |
| 148 | + " {\n"+ | |
| 149 | + " error(sql_error) then println(db_error(sql_error, \"extract_"+name+"\")); failure,\n"+ | |
| 150 | + " no_more_row then failure,\n"+ | |
| 151 | + " row(cursor) then\n"+ | |
| 152 | + " success("+generate_json_object_from_cursor(name, "cursor", columns, " ")+")\n"+ //generate type construction with values got from web arg | |
| 153 | + " }\n.\n" | |
| 154 | + ) is //end of the function | |
| 155 | + { | |
| 156 | + failure then println("can't write generate_extract_db_cursor "+type_name); failure, | |
| 157 | + success(_) then success(unique) | |
| 158 | + }. | ... | ... |
src/generation/fields.anubis
| ... | ... | @@ -106,28 +106,7 @@ public define String |
| 106 | 106 | |
| 107 | 107 | |
| 108 | 108 | |
| 109 | -public define String | |
| 110 | - from_DB_cursor | |
| 111 | - ( | |
| 112 | - HK_Model_Field t, | |
| 113 | - String cursor, //db cursor name | |
| 114 | - Int index //current index of the column in the cursor | |
| 115 | - ) = | |
| 116 | - with cursor_index = "("+cursor+")("+index+")", | |
| 117 | - if t is | |
| 118 | - { | |
| 119 | - p_key then "db_id((Int)db_integer"+cursor_index+")", | |
| 120 | - boolean_field then "db_bool"+cursor_index, | |
| 121 | - date_field(_) then "db_date(text"+cursor_index+")", | |
| 122 | - time_field(_) then "db_time(text"+cursor_index+")", | |
| 123 | - datetime_field(_) then "db_datetime(text"+cursor_index+")", | |
| 124 | - foreign_key(_,_) then "db_id((Int)db_integer"+cursor_index+")", | |
| 125 | - integer_field(_) then "(Int)db_integer"+cursor_index, | |
| 126 | - float_field then "db_float"+cursor_index, | |
| 127 | - char_field(_,_) then "text"+cursor_index, | |
| 128 | - password_field(_) then "text"+cursor_index, | |
| 129 | - text_field(_) then "text"+cursor_index | |
| 130 | - }. | |
| 109 | + | |
| 131 | 110 | |
| 132 | 111 | public define String |
| 133 | 112 | to_Bind | ... | ... |
src/generation/files.anubis
| ... | ... | @@ -19,13 +19,17 @@ read tools/ISO-8601.anubis |
| 19 | 19 | read generation/header.anubis |
| 20 | 20 | read generation/types.anubis |
| 21 | 21 | read generation/densaku.anubis |
| 22 | +read generation/extractor.anubis | |
| 22 | 23 | read generation/create_table.anubis |
| 23 | 24 | read generation/hk_menu.anubis |
| 24 | 25 | read generation/cxm_lib_menu.anubis |
| 25 | 26 | read generation/fn_delete.anubis |
| 26 | 27 | read generation/choices_selector.anubis |
| 27 | 28 | read generation/vt_edit.anubis |
| 29 | +read generation/vt_view.anubis | |
| 28 | 30 | read generation/web_args.anubis |
| 31 | +read generation/SQL_get_count.anubis | |
| 32 | +read generation/SQL_get_all.anubis | |
| 29 | 33 | read check.anubis |
| 30 | 34 | |
| 31 | 35 | define Maybe(One) |
| ... | ... | @@ -59,11 +63,13 @@ define Maybe(One) |
| 59 | 63 | if generate_get_default(strm, table) is { failure then failure, success(_) then |
| 60 | 64 | if generate_extract_web_arg_to_type(strm, table) is { failure then failure, success(_) then |
| 61 | 65 | if generate_extract_web_arg_to_update_field(strm, table) is { failure then failure, success(_) then |
| 62 | - if generate_extract_db_cursor(strm, table) is { failure then failure, success(_) then | |
| 66 | + if generate_extract_db_cursor_to_mb_type(strm, table) is { failure then failure, success(_) then | |
| 67 | + if generate_extract_db_cursor_to_json(strm, table) is { failure then failure, success(_) then | |
| 63 | 68 | if generate_get_all(strm, table) is { failure then failure, success(_) then |
| 64 | 69 | if generate_get_all_with_clause(strm, table) is { failure then failure, success(_) then |
| 65 | 70 | if generate_get_one(strm, table) is { failure then failure, success(_) then |
| 66 | 71 | if generate_get_one_with_clause(strm, table) is { failure then failure, success(_) then |
| 72 | + if generate_get_count_by_clause(strm, table) is { failure then failure, success(_) then | |
| 67 | 73 | if generate_update(strm, table) is { failure then failure, success(_) then |
| 68 | 74 | if generate_delete(strm, table) is { failure then failure, success(_) then |
| 69 | 75 | if generate_show_string(strm, table) is { failure then failure, success(_) then |
| ... | ... | @@ -71,7 +77,7 @@ define Maybe(One) |
| 71 | 77 | if generate_choices_selector(strm, table) is { failure then failure, success(_) then |
| 72 | 78 | if generate_VT_all_view(strm, table) is { failure then failure, success(_) then |
| 73 | 79 | if generate_VT_all_edit(strm, table) is { failure then failure, success(_) then |
| 74 | - success(unique)}}}}}}}}}}}}}}}}}} | |
| 80 | + success(unique)}}}}}}}}}}}}}}}}}}}} | |
| 75 | 81 | }. |
| 76 | 82 | |
| 77 | 83 | define One | ... | ... |
src/generation/header.anubis
| ... | ... | @@ -56,6 +56,7 @@ read calexium_lib/web/CXM_making_a_web_site.anubis |
| 56 | 56 | read calexium_lib/web/CXM_common.anubis |
| 57 | 57 | read calexium_lib/web/CXM_web_dump.anubis |
| 58 | 58 | read calexium_lib/web/CXM_web_arg_utils.anubis |
| 59 | +read calexium_lib/web/CXM_json.anubis | |
| 59 | 60 | read calexium_lib/web/widgets/icons_set.anubis |
| 60 | 61 | read data_base/sqlite.anubis |
| 61 | 62 | read data_base/db_tools.anubis | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 25/03/2017 | |
| 5 | + * Time: 00:54 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read hayamiki_lib/types/hayamiki.anubis | |
| 10 | +read tools/basis.anubis | |
| 11 | +read columns.anubis | |
| 12 | + | |
| 13 | +public define String | |
| 14 | +/** to_String return the content of the given model column 'col' in String format. | |
| 15 | + * | |
| 16 | + */ | |
| 17 | + to_JSON_String | |
| 18 | + ( | |
| 19 | + HK_Model_Column col, //Model of the column | |
| 20 | + String current_type_name, //Instance name of the type i.e. toto (this is instance of Toto_Type below) | |
| 21 | + String general_type_name //Type declaration name i.e. Toto_Type | |
| 22 | + ) = | |
| 23 | + since col is hk_column(name, col_type, _, _), | |
| 24 | + if col_type is | |
| 25 | + { | |
| 26 | + p_key then current_type_name+".id", | |
| 27 | + boolean_field then "to_JSON_String(to_String("+current_type_name+"."+name+"))", | |
| 28 | + date_field(attrs) then "to_JSON_String(to_String("+current_type_name+"."+name+"))", | |
| 29 | + time_field(attrs) then "to_JSON_String(to_String("+current_type_name+"."+name+"))", | |
| 30 | + datetime_field(attrs) then "to_JSON_String(to_String("+current_type_name+"."+name+"))", | |
| 31 | + foreign_key(app,foreign_table) then "to_JSON_String(get_"+foreign_table+"_show_string(db, "+current_type_name+"."+name+"))", | |
| 32 | + integer_field(_) then current_type_name+"."+name, | |
| 33 | + float_field then "float_to_string("+current_type_name+"."+name+",5)", | |
| 34 | + char_field(_,_) then "to_JSON_String("+current_type_name+"."+name+")", | |
| 35 | + password_field(_) then "to_JSON_String("+current_type_name+"."+name+")", | |
| 36 | + text_field(_) then "to_JSON_String("+current_type_name+"."+name+")" | |
| 37 | + } | |
| 38 | +. | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | +public define String | |
| 43 | +/** to_String return the content of the given model column 'col' in String format. | |
| 44 | + * | |
| 45 | + */ | |
| 46 | + to_JSON | |
| 47 | + ( | |
| 48 | + HK_Model_Column col, //Model of the column | |
| 49 | + String current_type_name, //Instance name of the type i.e. toto (this is instance of Toto_Type below) | |
| 50 | + String general_type_name //Type declaration name i.e. Toto_Type | |
| 51 | + ) = | |
| 52 | + since col is hk_column(name, col_type, _, _), | |
| 53 | + if col_type is | |
| 54 | + { | |
| 55 | + p_key then "json_member(\""+name+"\", json_int("+current_type_name+".id))", | |
| 56 | + boolean_field then "json_member(\""+name+"\", json_bool("+current_type_name+"."+name+"))", | |
| 57 | + date_field(attrs) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", | |
| 58 | + time_field(attrs) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", | |
| 59 | + datetime_field(attrs) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", | |
| 60 | + foreign_key(app,foreign_table) then "json_member(\""+name+"\", json_string(get_"+foreign_table+"_show_string(db, "+current_type_name+"."+name+")))", | |
| 61 | + integer_field(_) then "json_member(\""+name+"\", json_int("+current_type_name+"."+name+"))", | |
| 62 | + float_field then "json_member(\""+name+"\", json_float("+current_type_name+"."+name+",5))", | |
| 63 | + char_field(_,_) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", | |
| 64 | + password_field(_) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))", | |
| 65 | + text_field(_) then "json_member(\""+name+"\", json_string("+current_type_name+"."+name+"))" | |
| 66 | + } | |
| 67 | +. | |
| 68 | + | |
| 69 | +public define String | |
| 70 | + from_DB_cursor_to_JSON | |
| 71 | + ( | |
| 72 | + HK_Model_Column col, //Model of the column | |
| 73 | + String cursor, //db cursor name | |
| 74 | + Int index //current index of the column in the cursor | |
| 75 | + ) = | |
| 76 | + with cursor_index = "("+cursor+")("+index+")", | |
| 77 | + since col is hk_column(name, col_type, _, _), | |
| 78 | + if col_type is | |
| 79 | + { | |
| 80 | + p_key then "json_member(\""+name+"\", json_int((Int)db_integer"+cursor_index+"))", | |
| 81 | + boolean_field then "json_member(\""+name+"\", json_bool(db_bool"+cursor_index+"))", | |
| 82 | + date_field(_) then "json_member(\""+name+"\", json_string(text"+cursor_index+"))", | |
| 83 | + time_field(_) then "json_member(\""+name+"\", json_string(text"+cursor_index+"))", | |
| 84 | + datetime_field(_) then "json_member(\""+name+"\", json_string(text"+cursor_index+"))", | |
| 85 | + foreign_key(app,foreign_table) then "json_member(\""+name+"\", json_string(get_"+foreign_table+"_show_string(db, db_id((Int)db_integer"+cursor_index+"))))", | |
| 86 | + integer_field(_) then "json_member(\""+name+"\", json_int((Int)db_integer"+cursor_index+"))", | |
| 87 | + float_field then "json_member(\""+name+"\", json_float(db_float"+cursor_index+",5))", | |
| 88 | + char_field(_,_) then "json_member(\""+name+"\", json_string(text"+cursor_index+"))", | |
| 89 | + password_field(_) then "json_member(\""+name+"\", json_string(\"******\"))", | |
| 90 | + text_field(_) then "json_member(\""+name+"\", json_string(text"+cursor_index+"))" | |
| 91 | + } | |
| 92 | +. | ... | ... |
src/generation/types.anubis
| ... | ... | @@ -99,115 +99,10 @@ public define Maybe(One) |
| 99 | 99 | |
| 100 | 100 | |
| 101 | 101 | |
| 102 | -public define Maybe(One) | |
| 103 | - generate_extract_db_cursor | |
| 104 | - ( | |
| 105 | - Stream stream, | |
| 106 | - HK_Table table | |
| 107 | - )= | |
| 108 | - since table is hk_table(name, short_name, model, display), | |
| 109 | - since model is hk_model(columns, _), | |
| 110 | - with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 111 | - | |
| 112 | - //generate the type of the table that contain all components | |
| 113 | - if write_string(stream, | |
| 114 | - "\n\n"+ | |
| 115 | - "public define Maybe("+type_name+")\n"+ | |
| 116 | - " extract_"+name+"\n"+ | |
| 117 | - " (\n"+ | |
| 118 | - " One -> SQLite3Row table_cursor\n"+ | |
| 119 | - " ) =\n"+ | |
| 120 | - " if table_cursor(unique) is\n"+ | |
| 121 | - " {\n"+ | |
| 122 | - " error(sql_error) then println(db_error(sql_error, \"extract_"+name+"\")); failure,\n"+ | |
| 123 | - " no_more_row then failure,\n"+ | |
| 124 | - " row(cursor) then\n"+ | |
| 125 | - " success(\n"+generate_constructor_from_cursor(name, "cursor", columns, " ")+")\n"+ //generate type construction with values got from web arg | |
| 126 | - " }.\n") is //end of the function | |
| 127 | - { | |
| 128 | - failure then println("can't write generate_extract_db_cursor "+type_name); failure, | |
| 129 | - success(_) then success(unique) | |
| 130 | - }. | |
| 131 | 102 | |
| 132 | 103 | |
| 133 | -public define Maybe(One) | |
| 134 | - generate_get_all | |
| 135 | - ( | |
| 136 | - Stream stream, | |
| 137 | - HK_Table table | |
| 138 | - )= | |
| 139 | - since table is hk_table(name, short_name, model, _), | |
| 140 | - since model is hk_model(columns, _), | |
| 141 | - with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 142 | - | |
| 143 | - //generate the type of the table that contain all components | |
| 144 | - if write_string(stream, | |
| 145 | - "\n\n"+ | |
| 146 | - "public define List("+type_name+")\n"+ | |
| 147 | - " _get_all_"+name+"\n"+ | |
| 148 | - " (\n"+ | |
| 149 | - " One -> SQLite3Row table_cursor,\n"+ | |
| 150 | - " List("+type_name+") so_far\n"+ | |
| 151 | - " ) =\n"+ | |
| 152 | - " if extract_"+name+"(table_cursor) is\n"+ | |
| 153 | - " {\n"+ | |
| 154 | - " failure then reverse(so_far),\n"+ | |
| 155 | - " success(data) then _get_all_"+name+"(table_cursor, [data . so_far])\n"+ | |
| 156 | - " }.\n"+ | |
| 157 | - "\n\n" | |
| 158 | - //SQL query | |
| 159 | -// "public define List("+type_name+")\n"+ | |
| 160 | -// " get_all_"+name+"\n"+ | |
| 161 | -// " (\n"+ | |
| 162 | -// " SQLite3DataBase db,\n"+ | |
| 163 | -// " )=\n"+ | |
| 164 | -// " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+";\", [], \"get_all_"+name+"\") is\n"+ | |
| 165 | -// " {\n"+ | |
| 166 | -// " error(_) then [],\n"+ | |
| 167 | -// " ok(_, cursor, _) then _get_all_"+name+"(cursor, [])\n"+ | |
| 168 | -// " }.\n"+ | |
| 169 | -// "\n\n" | |
| 170 | - ) is //end of the function | |
| 171 | - { | |
| 172 | - failure then println("can't write generate_get_all "+type_name); failure, | |
| 173 | - success(_) then success(unique) | |
| 174 | - }. | |
| 175 | 104 | |
| 176 | -public define Maybe(One) | |
| 177 | - generate_get_all_with_clause | |
| 178 | - ( | |
| 179 | - Stream stream, | |
| 180 | - HK_Table table | |
| 181 | - )= | |
| 182 | - since table is hk_table(name, short_name, model, _), | |
| 183 | - since model is hk_model(columns, _), | |
| 184 | - with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 185 | - | |
| 186 | - //generate the type of the table that contain all components | |
| 187 | - if write_string(stream, | |
| 188 | - //SQL query | |
| 189 | - "public define List("+type_name+")\n"+ | |
| 190 | - " get_all_"+name+"_by_clause\n"+ | |
| 191 | - " (\n"+ | |
| 192 | - " SQLite3DataBase db,\n"+ | |
| 193 | - " String clause\n"+ | |
| 194 | - " )=\n"+ | |
| 195 | - " with final_clause = if clause = \"\" then\n"+ | |
| 196 | - " \"\"\n"+ | |
| 197 | - " else\n"+ | |
| 198 | - " \"WHERE \"+clause,\n"+ | |
| 199 | - "\n"+ | |
| 200 | - " if sql_query_timeout(db, \"SELECT "+join(", ", enclose("\\\"",to_List_String(columns, true)))+" FROM "+name+" \"+final_clause+\";\", [], \"get_all_"+name+"_by_clause\") is\n"+ | |
| 201 | - " {\n"+ | |
| 202 | - " error(_) then [],\n"+ | |
| 203 | - " ok(_, cursor, _) then _get_all_"+name+"(cursor, [])\n"+ | |
| 204 | - " }.\n" | |
| 205 | - | |
| 206 | - ) is //end of the function | |
| 207 | - { | |
| 208 | - failure then println("can't write generate_get_all "+type_name); failure, | |
| 209 | - success(_) then success(unique) | |
| 210 | - }. | |
| 105 | + | |
| 211 | 106 | |
| 212 | 107 | public define Maybe(One) |
| 213 | 108 | generate_get_one |
| ... | ... | @@ -284,7 +179,7 @@ public define Maybe(One) |
| 284 | 179 | " {\n"+ |
| 285 | 180 | " error(_) then failure,\n"+ |
| 286 | 181 | " ok(_, cursor, _) then extract_"+name+"(cursor)\n"+ |
| 287 | - " }.\n" | |
| 182 | + " }.\n\n" | |
| 288 | 183 | ) is //end of the function |
| 289 | 184 | { |
| 290 | 185 | failure then println("can't write generate_get_one_by_clause "+type_name); failure, |
| ... | ... | @@ -458,236 +353,10 @@ public define Maybe(One) |
| 458 | 353 | " SQLite3DataBase db,\n"+ |
| 459 | 354 | " String clause\n"+ |
| 460 | 355 | " )=\n"+ |
| 461 | - " _get_selector_"+name+"(db, get_all_"+name+"_by_clause(db, clause), [])." | |
| 356 | + " _get_selector_"+name+"(db, get_all_"+name+"_by_clause_to_list_type(db, clause), [])." | |
| 462 | 357 | ) is //end of the function |
| 463 | 358 | { |
| 464 | 359 | failure then println("can't write generate_show_string "+type_name); failure, |
| 465 | 360 | success(_) then success(unique) |
| 466 | 361 | }. |
| 467 | - | |
| 468 | -public define Maybe(One) | |
| 469 | -/* Generate | |
| 470 | - | |
| 471 | -*/ | |
| 472 | - generate_VT_view | |
| 473 | - ( | |
| 474 | - Stream stream, //stream file where to write | |
| 475 | - HK_Table table, // | |
| 476 | - HK_List_View list_view //list view to generate | |
| 477 | - )= | |
| 478 | - since table is hk_table(table_name, short_name, model, display), | |
| 479 | - since model is hk_model( columns, _), | |
| 480 | - //since display is db_display(list_view, list_edit), | |
| 481 | - | |
| 482 | - with type_name = to_upper(table_name, 1), //make the first character to upper case and be an Anubis Type. | |
| 483 | - with view_name = if list_view is | |
| 484 | - { | |
| 485 | - list_view_all then "default", | |
| 486 | - list_view(view_name, _, _) then view_name | |
| 487 | - }, | |
| 488 | - with current_list_view = if list_view is | |
| 489 | - { | |
| 490 | - list_view_all then to_List_String(columns, false), | |
| 491 | - list_view(_, cols, _) then cols | |
| 492 | - }, | |
| 493 | - //generate the type of the table that contain all components | |
| 494 | - if write_string(stream, | |
| 495 | - "\n\n"+ | |
| 496 | - //SQL query | |
| 497 | - "define VT_view\n"+ | |
| 498 | - " _get_viewable_"+table_name+"_"+view_name+"\n"+ | |
| 499 | - " (\n"+ | |
| 500 | - " SQLite3DataBase db,\n"+ | |
| 501 | - " List("+type_name+") list,\n"+ | |
| 502 | - " List(VT_view_row) so_far\n"+ | |
| 503 | - " )=\n"+ | |
| 504 | - " if list is\n"+ | |
| 505 | - " {\n"+ | |
| 506 | - " [] then //last entry, add the header and the reverse the list \n"+ | |
| 507 | - " with header = vt_view_row_header([\n"+ | |
| 508 | - // view row header | |
| 509 | - make_list_view_header(current_list_view, " ")+"\n"+ | |
| 510 | - " ]),\n"+ | |
| 511 | - " vt_view(\""+table_name+"\", \""+view_name+"\", header, reverse(so_far)),\n"+ | |
| 512 | - " [ h . t ] then\n"+ | |
| 513 | - " with entry = vt_view_row(to_Int(h.id), [\n"+ | |
| 514 | - // view row | |
| 515 | - make_list_view_row(table, "h", " ", list_view)+"\n"+ | |
| 516 | - " ]),\n"+ | |
| 517 | - " _get_viewable_"+table_name+"_"+view_name+"(db, t, [entry . so_far])\n"+ | |
| 518 | - " }.\n\n"+ | |
| 519 | - "public define VT_view\n"+ | |
| 520 | - " get_viewable_"+table_name+"_"+view_name+"\n"+ | |
| 521 | - " (\n"+ | |
| 522 | - " SQLite3DataBase db,\n"+ | |
| 523 | - " String clause\n"+ | |
| 524 | - " )=\n"+ | |
| 525 | - " _get_viewable_"+table_name+"_"+view_name+"(db, get_all_"+table_name+"_by_clause(db, clause), []).\n\n" | |
| 526 | - ) is //end of the function | |
| 527 | - { | |
| 528 | - failure then println("can't write generate_VT_view "+type_name); failure, | |
| 529 | - success(_) then success(unique) | |
| 530 | - }. | |
| 531 | - | |
| 532 | -public define Maybe(One) | |
| 533 | -/* Generate | |
| 534 | - | |
| 535 | -*/ | |
| 536 | - _generate_VT_view | |
| 537 | - ( | |
| 538 | - Stream stream, //stream file where to write | |
| 539 | - HK_Table table, // | |
| 540 | - List(HK_List_View) list_view, //list view to generate | |
| 541 | - Bool has_default //set to true if a default view was encountered. | |
| 542 | - )= | |
| 543 | - if list_view is | |
| 544 | - { | |
| 545 | - [] then | |
| 546 | - //if default view was not generated, we force to generate it | |
| 547 | - if has_default = false then | |
| 548 | - generate_VT_view(stream, table, list_view_all) | |
| 549 | - else | |
| 550 | - success(unique), | |
| 551 | - [view . t] then | |
| 552 | - if generate_VT_view(stream, table, view) is | |
| 553 | - { | |
| 554 | - failure then failure, | |
| 555 | - success(_) then | |
| 556 | - with new_has_default = if has_default = true then //already true, no need to go further | |
| 557 | - true | |
| 558 | - else | |
| 559 | - if view is | |
| 560 | - { | |
| 561 | - list_view_all then true, //list_view_all is default view | |
| 562 | - list_view(view_name, _, _) then | |
| 563 | - //if not we search for view named 'default' | |
| 564 | - if view_name = "default" then true else false | |
| 565 | - }, | |
| 566 | - _generate_VT_view(stream, table, t, new_has_default) | |
| 567 | - } | |
| 568 | - }. | |
| 569 | - | |
| 570 | -public define String | |
| 571 | -/* Generate | |
| 572 | - | |
| 573 | -*/ | |
| 574 | - _generate_get_viewable_if_else | |
| 575 | - ( | |
| 576 | - String table_name, // | |
| 577 | - List(HK_List_View) list_view, //list view to generate | |
| 578 | - String so_far | |
| 579 | - )= | |
| 580 | - if list_view is | |
| 581 | - { | |
| 582 | - [] then | |
| 583 | - so_far + | |
| 584 | - "\n"+ | |
| 585 | - " _get_viewable_"+table_name+"_default(db, get_all_"+table_name+"_by_clause(db, clause), [])\n", | |
| 586 | - [view . t] then | |
| 587 | - with view_name = if view is | |
| 588 | - { | |
| 589 | - list_view_all then "default", | |
| 590 | - list_view(view_name, _, _) then view_name | |
| 591 | - }, | |
| 592 | - _generate_get_viewable_if_else( table_name, t, | |
| 593 | - so_far + | |
| 594 | - " if view = \""+view_name+"\" then\n"+ | |
| 595 | - " _get_viewable_"+table_name+"_"+view_name+"(db, get_all_"+table_name+"_by_clause(db, clause), [])\n"+ | |
| 596 | - " else" | |
| 597 | - ) | |
| 598 | - }. | |
| 599 | - | |
| 600 | -public define Maybe(One) | |
| 601 | -/* Generate | |
| 602 | - | |
| 603 | -*/ | |
| 604 | - generate_get_viewable | |
| 605 | - ( | |
| 606 | - Stream stream, //stream file where to write | |
| 607 | - HK_Table table, // | |
| 608 | - List(HK_List_View) list_view //list view to generate | |
| 609 | - )= | |
| 610 | - since table is hk_table(table_name, short_name, model, display), | |
| 611 | - if write_string(stream, | |
| 612 | - "public define VT_view\n"+ | |
| 613 | - " get_viewable_"+table_name+"\n"+ | |
| 614 | - " (\n"+ | |
| 615 | - " SQLite3DataBase db,\n"+ | |
| 616 | - " String view,\n"+ | |
| 617 | - " String clause\n"+ | |
| 618 | - " )=\n"+ | |
| 619 | - _generate_get_viewable_if_else(table_name, list_view, "")+ | |
| 620 | - ".\n" | |
| 621 | - ) is //end of the function | |
| 622 | - { | |
| 623 | - failure then println("can't write generate_get_viewable "+table_name); failure, | |
| 624 | - success(_) then success(unique) | |
| 625 | - }. | |
| 626 | - | |
| 627 | -public define Maybe(One) | |
| 628 | - generate_VT_all_view | |
| 629 | - ( | |
| 630 | - Stream stream, | |
| 631 | - HK_Table table | |
| 632 | - )= | |
| 633 | - since table is hk_table(name, short_name, model, display), | |
| 634 | - since model is hk_model( columns, _), | |
| 635 | - since display is hk_display(list_view, list_edit), | |
| 636 | - | |
| 637 | - with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 638 | - if _generate_VT_view(stream, table, list_view, false) is //list view to generate | |
| 639 | - { | |
| 640 | - failure then failure, | |
| 641 | - success(_) then generate_get_viewable(stream, table, list_view) | |
| 642 | - }. | |
| 643 | - | |
| 644 | - | |
| 645 | - public define Maybe(One) | |
| 646 | - generate_VT_edit | |
| 647 | - ( | |
| 648 | - Stream stream, | |
| 649 | - HK_Table table | |
| 650 | - )= | |
| 651 | - since table is hk_table(name, short_name, model, display), | |
| 652 | - since model is hk_model( columns, _), | |
| 653 | - since display is hk_display(list_view, list_edit), | |
| 654 | - with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 655 | - | |
| 656 | - //generate the type of the table that contain all components | |
| 657 | - if write_string(stream, | |
| 658 | - "\n ********** EDITABLE VIEWs ***************\n"+ | |
| 659 | - //SQL query | |
| 660 | - "define VT_edit\n"+ | |
| 661 | - " _get_editable_"+name+"\n"+ | |
| 662 | - " (\n"+ | |
| 663 | - " "+type_name+" "+name+",\n"+ | |
| 664 | - " SQLite3DataBase db\n"+ | |
| 665 | - " )=\n"+ | |
| 666 | - " with edit_entries = (List(VT_edit_entry))\n"+ | |
| 667 | - " [\n"+ | |
| 668 | - edit_entries(columns, name, " ", [])+"\n"+ | |
| 669 | - " ],\n"+ | |
| 670 | - " vt_edit(\""+name+"\", edit_entries).\n\n"+ | |
| 671 | - | |
| 672 | - "public define VT_edit\n"+ | |
| 673 | - " get_editable_"+name+"\n"+ | |
| 674 | - " (\n"+ | |
| 675 | - " SQLite3DataBase db,\n"+ | |
| 676 | - " VT_action action\n"+ | |
| 677 | - " )=\n"+ | |
| 678 | - " with "+name+" = if action is\n"+ | |
| 679 | - " {\n"+ | |
| 680 | - " new_entry then get_default_"+name+"\n"+ | |
| 681 | - " edit_entry(idx) then\n"+ | |
| 682 | - " if get_"+name+"(db, idx) is\n"+ | |
| 683 | - " {\n"+ | |
| 684 | - " failure then get_default_"+name+",\n"+ | |
| 685 | - " success(data) then data\n"+ | |
| 686 | - " }\n"+ | |
| 687 | - " },\n"+ | |
| 688 | - " _get_editable_"+name+"("+name+", db).\n\n" | |
| 689 | - ) is //end of the function | |
| 690 | - { | |
| 691 | - failure then println("can't write generate_VT_edit "+type_name); failure, | |
| 692 | - success(_) then success(unique) | |
| 693 | - }. | |
| 362 | + | ... | ... |
src/generation/vt_edit.anubis
| ... | ... | @@ -78,6 +78,7 @@ public define Maybe(One) |
| 78 | 78 | " )=\n"+ |
| 79 | 79 | " with edit_entries = (List(VT_edit_entry))\n"+ |
| 80 | 80 | " [\n"+ |
| 81 | + " hidden(\"id\", to_String("+table_name+".id)),\n"+ | |
| 81 | 82 | edit_entries(current_edit_view, table_name, " ", [])+"\n"+ |
| 82 | 83 | " ],\n"+ |
| 83 | 84 | " with fk_view_entries = (List(HK_V_Edit_Tab))\n"+ | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 21/03/2017 | |
| 5 | + * Time: 22:00 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read hayamiki_lib/types/hayamiki.anubis | |
| 10 | +read tools/basis.anubis | |
| 11 | +read tools/streams.anubis | |
| 12 | +read system/string.anubis | |
| 13 | +read fields.anubis | |
| 14 | +read columns.anubis | |
| 15 | +read html.anubis | |
| 16 | +read json.anubis | |
| 17 | + | |
| 18 | +public define String | |
| 19 | + make_list_view_json_row | |
| 20 | + ( | |
| 21 | + HK_Table table, //table to format | |
| 22 | + String data_name, //name of data | |
| 23 | + String indent, //indentation string to use | |
| 24 | + List(HK_Model_Column) columns //list view to generate | |
| 25 | + )= | |
| 26 | + since table is hk_table(table_name, short, model, _), //get name and model of the table | |
| 27 | +// since model is hk_model( columns, _), //get all columns of table | |
| 28 | +// since display is db_display(views, _), // | |
| 29 | + //and the other set with list_view | |
| 30 | +// "\"{ "+ join("+\", ", map((HK_Model_Column column) |-> column.name+": \"+to_JSON_String(" + to_String(column, data_name, table_name)+")", columns))+"+\" }\"" | |
| 31 | + "\"{ id : \"+to_JSON_String(to_String("+data_name+".id))+\", "+ | |
| 32 | + | |
| 33 | + join("+\", ", map((HK_Model_Column column) |-> column.name+": \"+" + to_JSON_String(column, data_name, table_name), columns)) +"+\" }\"" | |
| 34 | + | |
| 35 | + . | |
| 36 | + | |
| 37 | +define String | |
| 38 | + to_VT_view_model | |
| 39 | + ( | |
| 40 | + HK_Model_Column col, | |
| 41 | + String type_name | |
| 42 | + )= | |
| 43 | + since col is hk_column(name, col_type, _, help), | |
| 44 | + if col_type is | |
| 45 | + { | |
| 46 | + p_key then "primary_key", | |
| 47 | + boolean_field then "boolean(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 48 | + date_field(attrs) then "date(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 49 | + time_field(attrs) then "time(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 50 | + datetime_field(attrs) then "datetime(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 51 | + foreign_key(app,foreign_table) then "foreign_text(\""+to_upper(name)+"\", \""+name+"\", vt_edit_selector(get_selector_"+foreign_table+"), "+to_Anubis_source(help)+")", | |
| 52 | + integer_field(choices) then | |
| 53 | + if choices is | |
| 54 | + { | |
| 55 | + no_choice then "integer(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 56 | + int_choices(choices_list) then | |
| 57 | + //if choice list is NOT empty we construct the possible choices selector | |
| 58 | + if length(choices_list) > 0 then | |
| 59 | + "choices_int(\""+to_upper(name)+"\", \""+name+"\", vt_edit_selector(get_choices_selector_"+to_lower(type_name)+"_"+name+"), "+to_Anubis_source(help)+")" | |
| 60 | + else | |
| 61 | + "integer(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 62 | + } | |
| 63 | + float_field then "float(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 64 | + | |
| 65 | + //TODO make choices selection if need | |
| 66 | + char_field(choices,_) then | |
| 67 | + if choices is | |
| 68 | + { | |
| 69 | + no_choice then "text(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")", | |
| 70 | + text_choices(choices_list) then | |
| 71 | + //if choice list is NOT empty we construct the possible choices selector | |
| 72 | + if length(choices_list) > 0 then | |
| 73 | + "choices_text(\""+to_upper(name)+"\", \""+name+"\", "+type_name+"."+name+", vt_edit_selector(get_choices_selector_"+to_lower(type_name)+"_"+name+"), "+to_Anubis_source(help)+")" | |
| 74 | + else | |
| 75 | + "text(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")" | |
| 76 | + } | |
| 77 | + password_field(min_size) then "password(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")" | |
| 78 | + text_field(txt_attr) then "text_area(\""+to_upper(name)+"\", \""+name+"\", "+to_Anubis_source(help)+")" | |
| 79 | + }. | |
| 80 | + | |
| 81 | + | |
| 82 | +public define String | |
| 83 | + make_list_view_model | |
| 84 | + ( | |
| 85 | + List(HK_Model_Column) columns, | |
| 86 | + String type_name, | |
| 87 | + String indent | |
| 88 | + )= | |
| 89 | + indent+join(",\n"+indent, map(((HK_Model_Column col) |-> to_VT_view_model(col, type_name)), columns)) | |
| 90 | +. | |
| 91 | + | |
| 92 | +public define String | |
| 93 | + make_list_view_header | |
| 94 | + ( | |
| 95 | + List(String) list_view, | |
| 96 | + String indent | |
| 97 | + )= | |
| 98 | + indent+join(",\n"+indent, map((String text) |-> "text(\""+to_upper(text)+"\")", list_view)). | |
| 99 | + | |
| 100 | +public define Maybe(One) | |
| 101 | +/* Generate | |
| 102 | + | |
| 103 | +*/ | |
| 104 | + generate_VT_view | |
| 105 | + ( | |
| 106 | + Stream stream, //stream file where to write | |
| 107 | + HK_Table table, // | |
| 108 | + HK_List_View list_view //list view to generate | |
| 109 | + )= | |
| 110 | + since table is hk_table(table_name, short_name, model, display), | |
| 111 | + since model is hk_model( columns, _), | |
| 112 | + //since display is db_display(list_view, list_edit), | |
| 113 | + | |
| 114 | + with type_name = to_upper(table_name, 1), //make the first character to upper case and be an Anubis Type. | |
| 115 | + with view_name = if list_view is | |
| 116 | + { | |
| 117 | + list_view_all then "default", | |
| 118 | + list_view(view_name, _, _) then view_name | |
| 119 | + }, | |
| 120 | + with current_list_view = if list_view is | |
| 121 | + { | |
| 122 | + list_view_all then to_List_String(columns, false), | |
| 123 | + list_view(_, cols, _) then cols | |
| 124 | + }, | |
| 125 | + with current_view_models = if list_view is | |
| 126 | + { | |
| 127 | + list_view_all then columns, | |
| 128 | + list_view(v_name, cols, _) then | |
| 129 | + if get_HK_Model_Column_list_from_name_list(columns, cols) is | |
| 130 | + { | |
| 131 | + failure then println("generate_VT_view: can't get all specified columns for table \""+table_name+"\" view name \""+v_name+"\" cols["+join(", ",cols)+"]");[], | |
| 132 | + success(got_columns) then got_columns, | |
| 133 | + } | |
| 134 | + }, | |
| 135 | + //generate the type of the table that contain all components | |
| 136 | + if write_string(stream, | |
| 137 | + "\n\n"+ | |
| 138 | + //SQL query | |
| 139 | + "define VT_view\n"+ | |
| 140 | + " _get_viewable_"+table_name+"_"+view_name+"\n"+ | |
| 141 | + " =\n"+ | |
| 142 | + " with header = vt_view_row_header([\n"+ | |
| 143 | + // view row header | |
| 144 | + make_list_view_header(current_list_view, " ")+"\n"+ | |
| 145 | + " ]),\n"+ | |
| 146 | + " with model = vt_view_model([\n"+ | |
| 147 | + //view model | |
| 148 | + make_list_view_model(current_view_models, type_name, " ")+"\n"+ | |
| 149 | + " ]),\n"+ | |
| 150 | + " vt_view(\n"+ | |
| 151 | + " \""+table_name+"\", //Name of the database table\n"+ | |
| 152 | + " \""+view_name+"\", //Name of the view\n"+ | |
| 153 | + " model,\n"+ | |
| 154 | + " header,\n"+ | |
| 155 | +" vt_view_db_calls(\n"+ | |
| 156 | +" get_count_"+table_name+"_by_clause,\n"+ | |
| 157 | +" get_all_"+table_name+"_by_clause_to_json\n"+ | |
| 158 | +//" get_"+xxx+"_rows\n"+ | |
| 159 | +" )\n"+ | |
| 160 | +" )\n"+ | |
| 161 | +".\n\n" | |
| 162 | + | |
| 163 | +// "public define VT_view\n"+ | |
| 164 | +// " get_viewable_"+table_name+"_"+view_name+"\n"+ | |
| 165 | +// " (\n"+ | |
| 166 | +// " SQLite3DataBase db,\n"+ | |
| 167 | +// " String clause\n"+ | |
| 168 | +// " )=\n"+ | |
| 169 | +// " _get_viewable_"+table_name+"_"+view_name+"(db, get_all_"+table_name+"_by_clause(db, clause), [], [] ).\n\n" | |
| 170 | + ) is //end of the function | |
| 171 | + { | |
| 172 | + failure then println("can't write generate_VT_view "+type_name); failure, | |
| 173 | + success(_) then success(unique) | |
| 174 | + }. | |
| 175 | + | |
| 176 | +public define Maybe(One) | |
| 177 | +/* Generate | |
| 178 | + | |
| 179 | +*/ | |
| 180 | + _generate_VT_view | |
| 181 | + ( | |
| 182 | + Stream stream, //stream file where to write | |
| 183 | + HK_Table table, // | |
| 184 | + List(HK_List_View) list_view, //list view to generate | |
| 185 | + Bool has_default //set to true if a default view was encountered. | |
| 186 | + )= | |
| 187 | + if list_view is | |
| 188 | + { | |
| 189 | + [] then | |
| 190 | + //if default view was not generated, we force to generate it | |
| 191 | + if has_default = false then | |
| 192 | + generate_VT_view(stream, table, list_view_all) | |
| 193 | + else | |
| 194 | + success(unique), | |
| 195 | + [view . t] then | |
| 196 | + if generate_VT_view(stream, table, view) is | |
| 197 | + { | |
| 198 | + failure then failure, | |
| 199 | + success(_) then | |
| 200 | + with new_has_default = if has_default = true then //already true, no need to go further | |
| 201 | + true | |
| 202 | + else | |
| 203 | + if view is | |
| 204 | + { | |
| 205 | + list_view_all then true, //list_view_all is default view | |
| 206 | + list_view(view_name, _, _) then | |
| 207 | + //if not we search for view named 'default' | |
| 208 | + if view_name = "default" then true else false | |
| 209 | + }, | |
| 210 | + _generate_VT_view(stream, table, t, new_has_default) | |
| 211 | + } | |
| 212 | + }. | |
| 213 | + | |
| 214 | +public define String | |
| 215 | +/* Generate | |
| 216 | + | |
| 217 | +*/ | |
| 218 | + _generate_get_viewable_if_else | |
| 219 | + ( | |
| 220 | + String table_name, // | |
| 221 | + List(HK_List_View) list_view, //list view to generate | |
| 222 | + String so_far | |
| 223 | + )= | |
| 224 | + if list_view is | |
| 225 | + { | |
| 226 | + [] then | |
| 227 | + so_far + | |
| 228 | + "\n"+ | |
| 229 | + " _get_viewable_"+table_name+"_default\n", | |
| 230 | + [view . t] then | |
| 231 | + with view_name = if view is | |
| 232 | + { | |
| 233 | + list_view_all then "default", | |
| 234 | + list_view(view_name, _, _) then view_name | |
| 235 | + }, | |
| 236 | + _generate_get_viewable_if_else( table_name, t, | |
| 237 | + so_far + | |
| 238 | + " if view = \""+view_name+"\" then\n"+ | |
| 239 | + " _get_viewable_"+table_name+"_"+view_name+"\n"+ | |
| 240 | + " else" | |
| 241 | + ) | |
| 242 | + }. | |
| 243 | + | |
| 244 | +public define Maybe(One) | |
| 245 | +/* Generate | |
| 246 | + | |
| 247 | +*/ | |
| 248 | + generate_get_viewable | |
| 249 | + ( | |
| 250 | + Stream stream, //stream file where to write | |
| 251 | + HK_Table table, // | |
| 252 | + List(HK_List_View) list_view //list view to generate | |
| 253 | + )= | |
| 254 | + since table is hk_table(table_name, short_name, model, display), | |
| 255 | + if write_string(stream, | |
| 256 | + "public define VT_view\n"+ | |
| 257 | + " get_viewable_"+table_name+"\n"+ | |
| 258 | + " (\n"+ | |
| 259 | + " String view,\n"+ | |
| 260 | + " )=\n"+ | |
| 261 | + _generate_get_viewable_if_else(table_name, list_view, "")+ | |
| 262 | + ".\n" | |
| 263 | + ) is //end of the function | |
| 264 | + { | |
| 265 | + failure then println("can't write generate_get_viewable "+table_name); failure, | |
| 266 | + success(_) then success(unique) | |
| 267 | + }. | |
| 268 | + | |
| 269 | +public define Maybe(One) | |
| 270 | + generate_VT_all_view | |
| 271 | + ( | |
| 272 | + Stream stream, | |
| 273 | + HK_Table table | |
| 274 | + )= | |
| 275 | + since table is hk_table(name, short_name, model, display), | |
| 276 | + since model is hk_model( columns, _), | |
| 277 | + since display is hk_display(list_view, list_edit), | |
| 278 | + | |
| 279 | + with type_name = to_upper(name, 1), //make the first character to upper case to able to be a Anubis Type. | |
| 280 | + if _generate_VT_view(stream, table, list_view, false) is //list view to generate | |
| 281 | + { | |
| 282 | + failure then failure, | |
| 283 | + success(_) then generate_get_viewable(stream, table, list_view) | |
| 284 | + }. | ... | ... |
src/generation/web_args.anubis
| ... | ... | @@ -104,7 +104,7 @@ public define String |
| 104 | 104 | //anubis(_T) then "constant_byte_array(0,0)", |
| 105 | 105 | p_key then "[]", |
| 106 | 106 | boolean_field then |
| 107 | - "with "+name+" = get_Bool(lwa, __prefix__+\""+name+"\"), [field(\""+name+"\", bind_Bool(\":v_"+name+"\", "+name+"))]", | |
| 107 | + "if get_mb_Bool(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Bool(\":v_"+name+"\", "+name+"))] }", | |
| 108 | 108 | date_field(attrs) then |
| 109 | 109 | if attrs = none then |
| 110 | 110 | "if get_DB_date(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Date(\":v_"+name+"\", "+name+"))] }" |
| ... | ... | @@ -121,7 +121,7 @@ public define String |
| 121 | 121 | else |
| 122 | 122 | "[]", |
| 123 | 123 | foreign_key(_,_) then //"with "+name+" = get_DB_id(lwa, __prefix__+\""+name+"\"),", |
| 124 | - "with "+name+" = get_DB_id(lwa, __prefix__+\""+name+"\"), [field(\""+name+"\", bind_DB_id_or_NULL(\":v_"+name+"\", "+name+"))]" | |
| 124 | + "if get_mb_DB_id(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_DB_id_or_NULL(\":v_"+name+"\", "+name+"))] }" | |
| 125 | 125 | integer_field(_) then //"get_Int(lwa, __prefix__+\""+name+"\")", |
| 126 | 126 | "if get_Int(lwa, __prefix__+\""+name+"\") is {failure then [], success("+name+") then [field(\""+name+"\", bind_Int(\":v_"+name+"\", "+name+"))] }" |
| 127 | 127 | float_field then //"get_Float(lwa, __prefix__+\""+name+"\")", | ... | ... |