/* * Created by PyramIDE. * User: フランスのトトロ * Date: 04/02/2016 * Time: 22:34 * © Calexium */ read calexium_lib/database/model/db_model.anubis read system/string.anubis read tools/list.anubis read tools/basis.anubis public define Maybe(List(String)) get_all_apps_name ( List(HK_App) apps, List(String) so_far )= if apps is { [] then success(so_far), [h . t] then since h is hk_app(name, _), if name:so_far then println("The app name "+name+" already exists"); failure //'this' is not allowed as app name because the //else name = "this" then // prinln("error: 'this' is forbidden app name "); failure else get_all_apps_name(t, [name. so_far]) }. define Maybe(HK_Model_Column) resolve_foreign ( List(String) apps_name, String current_app_name, String table_name, HK_Model_Column col )= since col is hk_column(name, type, attrib, help), if type is foreign_key(fk_app, fk_table) then with mb_fk_app = if (fk_app) is { this then println("this found replaced by "+current_app_name+" in app '"+current_app_name+"' table '"+table_name+"' column '"+name+"'"); success(current_app_name), app_name(_name) then if _name:apps_name then success(_name) else println("foreign key app '"+_name+"' doesn't exists in app '"+current_app_name+"' table '"+table_name+"' column '"+_name+"'");failure, none then success("") }, if mb_fk_app is { failure then failure, success(n_fk_app) then success(hk_column(name, foreign_key(if (fk_app) is app_name(_) then app_name(n_fk_app) else fk_app, (if length(n_fk_app)>0 then n_fk_app+"_"else "")+fk_table), attrib, help)) } else success(col). define Maybe(List(HK_Model_Column)) resolve_foreign ( List(String) apps_name, String app_name, String table_name, List(HK_Model_Column) columns, List(HK_Model_Column) so_far )= if columns is { [] then success(reverse(so_far)), [h . t] then if resolve_foreign(apps_name, app_name, table_name, h) is { failure then failure, success(col) then resolve_foreign(apps_name, app_name, table_name, t, [col. so_far]) } }. define Maybe(List(HK_Table)) resolve_foreign ( List(String) apps_name, String app_name, List(HK_Table) tables, List(HK_Table) so_far )= if tables is { [] then success(reverse(so_far)), [h . t] then since h is hk_table(name, model, display), since model is hk_model(columns, display_string), with table_name = if length(app_name) > 0 then app_name +"_"+name else name, if resolve_foreign(apps_name, app_name, table_name, columns, []) is { failure then failure, success(checked_model) then resolve_foreign(apps_name, app_name, t, [hk_table(table_name, hk_model(checked_model, display_string), display) . so_far]) } }. define Maybe(HK_App) resolve_foreign ( List(String) apps_name, HK_App app )= since app is hk_app(name, tables), if resolve_foreign(apps_name, name, tables, []) is { failure then failure, success(resolved_tables) then success(hk_app(name, resolved_tables)) }. define Maybe(List(HK_App)) resolve_foreign ( List(String) apps_name, List(HK_App) apps, List(HK_App) so_far )= if apps is { [] then success(reverse(so_far)), [h . t] then if resolve_foreign(apps_name, h) is { failure then failure, success(app) then resolve_foreign(apps_name, t, [app . so_far]) } }. public define Maybe(HK_Database) check_database ( HK_Database current_db //database model description )= since current_db is hk_database(name, apps), if get_all_apps_name(apps, []) is { failure then failure, success(chk_apps) then if resolve_foreign(chk_apps, apps, []) is { failure then failure, success(resolved_apps) then //with checked_db = current_db, success(hk_database(name, resolved_apps)) } }.