types.anubis 12.1 KB
/*
 * 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)
  }.