/************************************************************************* * * * YAP Prolog * * * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: myddas_mysql.yap * * Last rev: * * mods: * * comments: MySQL Predicates * * * *************************************************************************/ #ifdef MYDDAS_MYSQL :- module(myddas_mysql,[ db_my_result_set/1, db_datalog_describe/1, db_datalog_describe/2, db_describe/3, db_describe/2, db_datalog_show_tables/1, db_datalog_show_tables/0, db_show_tables/2, db_show_tables/1, db_show_database/2, db_show_databases/2, db_show_databases/1, db_change_database/2, db_call_procedure/4, db_call_procedure/3, db_my_sql_mode/1, db_my_sql_mode/2 ]). :- use_module(myddas,[ db_sql/3 ]). :- use_module(myddas_errors,[ '$error_checks'/1 ]). :- use_module(myddas_util_predicates,[ '$get_value'/2, '$make_atom'/2, '$make_atom_args'/2, '$make_a_list'/2, '$write_or_not'/1 ]). %-------------------------------------------------------- % Public Predicates %-------------------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_my_result_set/1 % % db_my_result_set(X):- var(X),!, get_value(db_my_result_set,X). db_my_result_set(use_result):- set_value(db_my_result_set,use_result). db_my_result_set(store_result):- set_value(db_my_result_set,store_result). %default value :- db_my_result_set(store_result). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_my_describe/2 % % db_datalog_describe(Relation):- db_datalog_describe(myddas,Relation). db_datalog_describe(Connection,Relation) :- '$error_checks'(db_datalog_describe(Relation,Connection)), '$get_value'(Connection,Conn), '$make_atom'(['DESCRIBE ',Relation],SQL), db_my_result_set(Mode), c_db_my_query(SQL,ResultSet,Conn,Mode,_), c_db_my_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_describe/3 % db_describe/2 % gives the results of the DESCRIBE statement % by backtracking db_describe(Relation,TableInfo) :- db_describe(myddas,Relation,TableInfo). db_describe(Connection,Relation,tableinfo(A1,A2,A3,A4,A5,A6)) :- '$error_checks'(db_describe(Relation,Connection,_)), '$get_value'(Connection,Conn), '$make_atom'(['DESCRIBE ',Relation],SQL), db_my_result_set(Mode), '$write_or_not'(SQL), c_db_my_query(SQL,ResultSet,Conn,Mode,_), !,c_db_my_row(ResultSet,6,[A1,A2,A3,A4,A5,A6]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_datalog_show_tables/1 % % db_datalog_show_tables:- db_datalog_show_tables(myddas). db_datalog_show_tables(Connection) :- '$error_checks'(db_my_show_tables(Connection)), '$get_value'(Connection,Conn), db_my_result_set(Mode), '$write_or_not'('SHOW TABLES'), c_db_my_query('SHOW TABLES',ResultSet,Conn,Mode,_), c_db_my_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_show_tables/2 % db_show_tables/1 % gives the results of the SHOW TABLES statement % by backtracking db_show_tables(Table) :- db_show_tables(myddas,Table). db_show_tables(Connection,table(Table)) :- '$error_checks'(db_my_show_tables(Connection)), '$get_value'(Connection,Conn), db_my_result_set(Mode), '$write_or_not'('SHOW TABLES'), c_db_my_query('SHOW TABLES',ResultSet,Conn,Mode,_), !,c_db_my_row(ResultSet,1,[Table]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_show_database/2 % % db_show_database(Connection,Database) :- '$error_checks'(db_show_database(Connection,Database)), '$get_value'(Connection,Con), c_db_my_get_database(Con,Database). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_show_databases/2 % % db_show_databases(Connection,database(Databases)) :- %'$error_checks'(db_show_databases(Connection,Database)), '$get_value'(Connection,Conn), db_my_result_set(Mode), '$write_or_not'('SHOW DATABASES'), c_db_my_query('SHOW DATABASES',ResultSet,Conn,Mode,_), !,c_db_my_row(ResultSet,1,[Databases]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_show_databases/1 % TODO Error Checks % db_show_databases(Connection) :- '$error_checks'(db_my_show_databases(Connection)), '$get_value'(Connection,Conn), db_my_result_set(Mode), '$write_or_not'('SHOW DATABASES'), c_db_my_query('SHOW DATABASES',ResultSet,Conn,Mode,_), c_db_my_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_change_database/2 % % db_change_database(Connection,Database) :- '$error_checks'(db_change_database(Connection,Database)), '$get_value'(Connection,Con), '$make_atom'(['USE ',Database],SQL), '$write_or_not'(SQL), c_db_my_change_database(Con,Database). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_call_procedure/4 % db_call_procedure/3 % db_call_procedure(+,+,+,?) % Only support in MySQL 5.0 an above % Called procedure must return results via MySQL result set db_call_procedure(Procedure,Args,Result) :- db_call_procedure(myddas,Procedure,Args,Result). db_call_procedure(Connection,Procedure,Args,LA) :- '$error_checks'(db_call_procedure(Connection,Procedure,Args,LA)), '$make_atom_args'(Args,ArgsSQL), '$make_atom'(['CALL ',Procedure,'(',ArgsSQL,')'],SQL), db_sql(Connection,SQL,LA). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_my_sql_mode/1 % db_my_sql_mode/2 % Possible values : traditional,ansi,strict_trans_tables or '' (empty) db_my_sql_mode(SQLMode):- db_my_sql_mode(myddas,SQLMode). db_my_sql_mode(Connection,SQLMode):- var(SQLMode),!, '$error_checks'(db_my_sql_mode(Connection,SQLMode)), get_value(Connection,Con), c_db_connection_type(Con,mysql), %must be a mysql connection db_sql(Connection,'SELECT @@session.sql_mode',[SQLMode]). db_my_sql_mode(Connection,SQLMode):- '$error_checks'(db_my_sql_mode(Connection,SQLMode)), get_value(Connection,Con), c_db_connection_type(Con,mysql), %must be a mysql connection '$make_atom'(['SET SESSION sql_mode=`',SQLMode,'`'],FinalSQL), '$write_or_not'(FinalSQL), db_my_result_set(Mode), c_db_my_query(FinalSQL,_,Con,Mode,_). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #endif /* MYDDAS_MYSQL*/