1/************************************************************************* 2* * 3* YAP Prolog * 4* * 5* Yap Prolog was developed at NCCUP - Universidade do Porto * 6* * 7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * 8* * 9************************************************************************** 10* * 11* File: myddas_top_level.yap * 12* Last rev: * 13* mods: * 14* comments: MYDDAS Top Level predicates * 15* * 16*************************************************************************/ 17 18#ifdef MYDDAS_TOP_LEVEL 19 20:- module(myddas_top_level,[ 21 db_top_level/4, 22 db_top_level/5, 23 db_datalog_select/3 24 ]). 25 26:- use_module(myddas_mysql,[ 27 db_my_result_set/1 28 ]). 29 30:- use_module(system,[ 31 system/2 32 ]). 33 34:- use_module(charsio,[ 35 read_from_chars/2 36 ]). 37 38:- use_module(terms,[ 39 term_variables/2 40 ]). 41 42:- use_module(myddas_util_predicates,[ 43 '$make_atom'/2, 44 '$prolog2sql'/3, 45 '$write_or_not'/1, 46 '$lenght'/2 47 ]). 48 49 50 51%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 52% db_top_level/5 53% db_top_level/4 54% 55db_top_level(mysql,HostDb,User,Password):- 56 db_top_level(mysql,myddas,HostDb,User,Password). 57 58db_top_level(mysql,Connection,Host/Db/Port/Socket,User,Password) :- !, 59 '$make_atom'(['mysql',' -h ',Host,' -P ',Port,' -S ',Socket,' -u ',User,' --password=',Password,' ',Db],Command), 60 system(Command,_). 61db_top_level(mysql,Connection,Host/Db/Port,User,Password) :- 62 integer(Port),!, 63 '$make_atom'(['mysql',' -h ',Host,' -P ',Port,' -u ',User,' --password=',Password,' ',Db],Command), 64 system(Command,_). 65db_top_level(mysql,Connection,Host/Db/Socket,User,Password) :- !, 66 db_top_level(mysql,Connection,Host/Db/0/Socket,User,Password). 67db_top_level(mysql,Connection,Host/Db,User,Password):- 68 db_top_level(mysql,Connection,Host/Db/0,User,Password). 69 70 71 72db_top_level(datalog,Connection,_,_,_):- 73 %'$error_checks'(db_open(mysql,Connection,Host/Db,User,Password)), 74 get_value(Connection,Con), 75 Con \= [],!, 76 c_db_connection_type(Con,mysql), 77 Prompt = ' datalog> ', 78 nl, 79 '$top_level_datalog_cicle'(Connection,Prompt). 80% c_db_tl_readline(Prompt,Line), 81% name(Line,CharsLine), 82% read_from_chars(CharsLine,Query), 83% term_variables(Query,VarList), 84% db_datalog_select(Connection,VarList,Query). 85 86'$top_level_datalog_cicle'(Connection,Prompt):- 87 c_db_tl_readline(Prompt,Line), 88 name(Line,CharsLine), 89 catch(read_from_chars(CharsLine,Query),_,'$top_level_datalog_cicle'(Connection,Prompt)), 90 !,'$top_level_datalog'(Connection,Prompt,Query). 91 92 93'$top_level_datalog'(_,_,halt):-!. 94'$top_level_datalog'(Connection,Prompt,Query):- 95 term_variables(Query,[]),!, 96 Query =..[_|Args], 97 db_datalog_select(Connection,Args,Query), 98 '$top_level_datalog_cicle'(Connection,Prompt). 99'$top_level_datalog'(Connection,Prompt,Query):- 100 term_variables(Query,VarList), 101 db_datalog_select(Connection,VarList,Query), 102 !,'$top_level_datalog_cicle'(Connection,Prompt). 103 104db_datalog_select(Connection,LA,DbGoal):- 105 106 '$lenght'(LA,Arity), 107 Name=viewname, 108 functor(ViewName,Name,Arity), 109 % build arg list for viewname/Arity 110 ViewName=..[Name|LA], 111 112 '$prolog2sql'(ViewName,DbGoal,SQL), 113 114 get_value(Connection,Con), 115 %c_db_connection_type(Con,ConType), 116 '$write_or_not'(SQL), 117 %( ConType == mysql -> 118 db_my_result_set(Mode), 119 c_db_my_query(SQL,ResultSet,Con,Mode,_), 120 c_db_my_table_write(ResultSet). 121 122#endif MYDDAS_TOP_LEVEL