216 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			6.0 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_mysql.yap					 *
 | |
| * Last rev:								 *
 | |
| * mods:									 *
 | |
| * comments:	MySQL Predicates                 			 *
 | |
| *									 *
 | |
| *************************************************************************/
 | |
| #ifdef MYDDAS_SQLITE3
 | |
| 
 | |
| :- module(myddas_sqlite3,[
 | |
| 			sqlite3_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
 | |
| 		       ]).
 | |
| 
 | |
| :- 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
 | |
| %--------------------------------------------------------
 | |
| 
 | |
| 
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| % sqlite3_result_set/1
 | |
| %
 | |
| %
 | |
| sqlite3_result_set(X):-
 | |
| 	var(X),!,
 | |
| 	get_value(sqlite3_result_set,X).
 | |
| sqlite3_result_set(use_result):-
 | |
| 	set_value(sqlite3_result_set,use_result).
 | |
| sqlite3_result_set(store_result):- 
 | |
| 	set_value(sqlite3_result_set,store_result).
 | |
| %default value
 | |
| :- sqlite3_result_set(store_result).
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| 
 | |
| 
 | |
| 
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| % sqlite3_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),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	c_sqlite3_query(SQL,ResultSet,Conn,Mode,_),
 | |
| 	c_sqlite3_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),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	'$write_or_not'(SQL),
 | |
| 	c_sqlite3_query(SQL,ResultSet,Conn,Mode,_),
 | |
| 	!,c_sqlite3_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'(sqlite3_show_tables(Connection)),
 | |
| 	'$get_value'(Connection,Conn),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	'$write_or_not'('.tables'),
 | |
| 	c_sqlite3_query('.tables',ResultSet,Conn,Mode,_),
 | |
| 	c_sqlite3_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'(sqlite3_show_tables(Connection)),
 | |
| 	'$get_value'(Connection,Conn),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	'$write_or_not'('.tables'),
 | |
| 	c_sqlite3_query('.tables',ResultSet,Conn,Mode,_),
 | |
| 	!,c_sqlite3_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_sqlite3_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),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	'$write_or_not'('SHOW DATABASES'),
 | |
| 	c_sqlite3_query('SHOW DATABASES',ResultSet,Conn,Mode,_),
 | |
| 	!,c_sqlite3_row(ResultSet,1,[Databases]).
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| 
 | |
| 
 | |
| 
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| % db_show_databases/1
 | |
| % TODO Error Checks
 | |
| %
 | |
| db_show_databases(Connection) :-
 | |
| 	'$error_checks'(sqlite3_show_databases(Connection)),
 | |
| 	'$get_value'(Connection,Conn),
 | |
| 	sqlite3_result_set(Mode),
 | |
| 	'$write_or_not'('SHOW DATABASES'),
 | |
| 	c_sqlite3_query('SHOW DATABASES',ResultSet,Conn,Mode,_),
 | |
| 	c_sqlite3_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_sqlite3_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).
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| 
 | |
| sqlite3_result_set(store_result).
 | |
| 
 | |
| #endif /* MYDDAS_SQLITE3 */ |