248 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			248 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /************************************************************************* | ||
|  | *									 * | ||
|  | *	 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*/ |