/************************************************************************* * * * 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_postgres.yap * * Last rev: * * mods: * * comments: Postgres Predicates * * * *************************************************************************/ #ifdef MYDDAS_POSTGRES :- module(myddas_postgres,[ postgres_result_set/1, postgres_datalog_describe/1, postgres_datalog_describe/2, postgres_describe/3, postgres_describe/2, postgres_datalog_show_tables/1, postgres_datalog_show_tables/0, postgres_show_tables/2, postgres_show_tables/1, postgres_show_database/2, postgres_show_databases/2, postgres_show_databases/1, postgres_change_database/2, postgres_call_procedure/4, postgres_call_procedure/3, postgres_sql_mode/1, postgres_sql_mode/2, postgres_sql_mode/1, postgres_sql_mode/2 ]). :- use_module(myddas,[ postgres_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 %-------------------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_result_set/1 % % postgres_result_set(X):- var(X),!, get_value(postgres_result_set,X). postgres_result_set(use_result):- set_value(postgres_result_set,use_result). postgres_result_set(store_result):- set_value(postgres_result_set,store_result). %default value :- postgres_result_set(store_result). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_describe/2 % % postgres_datalog_describe(Relation):- postgres_datalog_describe(myddas,Relation). postgres_datalog_describe(Connection,Relation) :- '$error_checks'(postgres_datalog_describe(Relation,Connection)), '$get_value'(Connection,Conn), '$make_atom'(['DESCRIBE ',Relation],SQL), postgres_result_set(Mode), c_postgres_query(SQL,ResultSet,Conn,Mode,_), c_postgres_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_describe/3 % postgres_describe/2 % gives the results of the DESCRIBE statement % by backtracking postgres_describe(Relation,TableInfo) :- postgres_describe(myddas,Relation,TableInfo). postgres_describe(Connection,Relation,tableinfo(A1,A2,A3,A4,A5,A6)) :- '$error_checks'(postgres_describe(Relation,Connection,_)), '$get_value'(Connection,Conn), '$make_atom'(['DESCRIBE ',Relation],SQL), postgres_result_set(Mode), '$write_or_not'(SQL), c_postgres_query(SQL,ResultSet,Conn,Mode,_), !,c_postgres_row(ResultSet,6,[A1,A2,A3,A4,A5,A6]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_datalog_show_tables/1 % % postgres_datalog_show_tables:- postgres_datalog_show_tables(myddas). postgres_datalog_show_tables(Connection) :- '$error_checks'(postgres_show_tables(Connection)), '$get_value'(Connection,Conn), postgres_result_set(Mode), '$write_or_not'('SHOW TABLES'), c_postgres_query('SHOW TABLES',ResultSet,Conn,Mode,_), c_postgres_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_show_tables/2 % postgres_show_tables/1 % gives the results of the SHOW TABLES statement % by backtracking postgres_show_tables(Table) :- postgres_show_tables(myddas,Table). postgres_show_tables(Connection,table(Table)) :- '$error_checks'(postgres_show_tables(Connection)), '$get_value'(Connection,Conn), postgres_result_set(Mode), '$write_or_not'('SHOW TABLES'), c_postgres_query('SHOW TABLES',ResultSet,Conn,Mode,_), !,c_postgres_row(ResultSet,1,[Table]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_show_database/2 % % postgres_show_database(Connection,Database) :- '$error_checks'(postgres_show_database(Connection,Database)), '$get_value'(Connection,Con), c_postgres_get_database(Con,Database). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_show_databases/2 % % postgres_show_databases(Connection,database(Databases)) :- %'$error_checks'(postgres_show_databases(Connection,Database)), '$get_value'(Connection,Conn), postgres_result_set(Mode), '$write_or_not'('SHOW DATABASES'), c_postgres_query('SHOW DATABASES',ResultSet,Conn,Mode,_), !,c_postgres_row(ResultSet,1,[Databases]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_show_databases/1 % TODO Error Checks % postgres_show_databases(Connection) :- '$error_checks'(postgres_show_databases(Connection)), '$get_value'(Connection,Conn), postgres_result_set(Mode), '$write_or_not'('SHOW DATABASES'), c_postgres_query('SHOW DATABASES',ResultSet,Conn,Mode,_), c_postgres_table_write(ResultSet). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_change_database/2 % % postgres_change_database(Connection,Database) :- '$error_checks'(postgres_change_database(Connection,Database)), '$get_value'(Connection,Con), '$make_atom'(['USE ',Database],SQL), '$write_or_not'(SQL), c_postgres_change_database(Con,Database). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_call_procedure/4 % postgres_call_procedure/3 % postgres_call_procedure(+,+,+,?) % Only support in Postgres 5.0 an above % Called procedure must return results via Postgres result set postgres_call_procedure(Procedure,Args,Result) :- postgres_call_procedure(myddas,Procedure,Args,Result). postgres_call_procedure(Connection,Procedure,Args,LA) :- '$error_checks'(postgres_call_procedure(Connection,Procedure,Args,LA)), '$make_atom_args'(Args,ArgsSQL), '$make_atom'(['CALL ',Procedure,'(',ArgsSQL,')'],SQL), postgres_sql(Connection,SQL,LA). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % postgres_sql_mode/1 % postgres_sql_mode/2 % Possible values : traditional,ansi,strict_trans_tables or '' (empty) postgres_sql_mode(SQLMode):- postgres_sql_mode(SQLMode). postgres_sql_mode(Connection,SQLMode):- postgres_sql_mode(Connection,SQLMode). postgres_sql_mode(SQLMode):- postgres_sql_mode(myddas,SQLMode). postgres_sql_mode(Connection,SQLMode):- var(SQLMode),!, '$error_checks'(postgres_sql_mode(Connection,SQLMode)), get_value(Connection,Con), c_postgres_connection_type(Con,postgres), %must be a postgres connection postgres_sql(Connection,'SELECT @@session.sql_mode',[SQLMode]). postgres_sql_mode(Connection,SQLMode):- '$error_checks'(postgres_sql_mode(Connection,SQLMode)), get_value(Connection,Con), c_postgres_connection_type(Con,postgres), %must be a postgres connection '$make_atom'(['SET SESSION sql_mode=`',SQLMode,'`'],FinalSQL), '$write_or_not'(FinalSQL), postgres_result_set(Mode), c_postgres_query(FinalSQL,_,Con,Mode,_). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #endif /* MYDDAS_POSTGRES*/