189 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			6.2 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_errors.yap					 *
 | 
						|
* Last rev:								 *
 | 
						|
* mods:									 *
 | 
						|
* comments:	MYDDAS errors checks and errors Messages                 *
 | 
						|
*									 *
 | 
						|
*************************************************************************/
 | 
						|
 | 
						|
:- module(myddas_errors,[
 | 
						|
			 '$error_checks'/1
 | 
						|
			 ]).
 | 
						|
 | 
						|
:- use_module(myddas_util_predicates,[
 | 
						|
				      '$make_a_list'/2,
 | 
						|
				      '$check_fields'/2,
 | 
						|
				      '$check_list_on_list'/2
 | 
						|
				      ]).
 | 
						|
 | 
						|
'$error_checks'(db_abolish(ModulePredName,Arity)):-!,
 | 
						|
	(ModulePredName = Module:PredName ->
 | 
						|
	    atom(Module),
 | 
						|
	    atom(PredName)
 | 
						|
	;
 | 
						|
	    atom(ModulePredName)
 | 
						|
	),
 | 
						|
	number(Arity).
 | 
						|
'$error_checks'(db_show_databases(Connection)):- !,
 | 
						|
	atom(Connection).
 | 
						|
'$error_checks'(db_show_database(Connection,_)):- !,
 | 
						|
	atom(Connection).
 | 
						|
'$error_checks'(db_my_sql_mode(Connection,_)):- !,
 | 
						|
	atom(Connection).
 | 
						|
'$error_checks'(db_change_database(Connection,Database)):- !,
 | 
						|
	atom(Connection),
 | 
						|
	atom(Database).
 | 
						|
'$error_checks'(db_prolog_select_multi(Connection,DbGoalsList,_)):- !,
 | 
						|
	atom(Connection),
 | 
						|
	is_list(DbGoalsList).
 | 
						|
'$error_checks'(db_multi_queries_number(Connection,Number)):-!,
 | 
						|
        atom(Connection),
 | 
						|
	( var(Number) ->
 | 
						|
	    true
 | 
						|
	;
 | 
						|
	    number(Number),
 | 
						|
	    Number > 0
 | 
						|
	).
 | 
						|
'$error_checks'(db_command(Connection,SQL)):-!,
 | 
						|
        atom(Connection),
 | 
						|
        nonvar(SQL).
 | 
						|
#ifdef MYDDAS_STATS
 | 
						|
'$error_checks'(db_stats(_,List)):-!,
 | 
						|
	var(List).
 | 
						|
'$error_checks'(db_stats_time(Reference,Time)):-!,
 | 
						|
	number(Reference),
 | 
						|
	var(Time).
 | 
						|
#endif
 | 
						|
'$error_checks'(db_export_view(Connection,TableViewName,SQLorDbGoal,FieldsInf)):-!,
 | 
						|
        atom(Connection),
 | 
						|
	( atom(TableViewName) -> atom(SQLorDbGoal) ; true ),
 | 
						|
        ( atom(SQLorDbGoal) -> atom(TableViewName) ; true ),
 | 
						|
	is_list(FieldsInf).
 | 
						|
'$error_checks'(db_create_table(Connection,TableName,FieldsInf)):-!,
 | 
						|
        atom(Connection),
 | 
						|
	atom(TableName),
 | 
						|
	FieldsInf = [_|_].
 | 
						|
'$error_checks'(db_insert3(Connection,RelationName,PredName)):-!,
 | 
						|
        atom(Connection),
 | 
						|
	atom(RelationName),
 | 
						|
	atom(PredName).
 | 
						|
'$error_checks'(db_insert2(Connection,_,[query(Att,[rel(Relation,_)],_)])) :- !,
 | 
						|
        atom(Connection), 
 | 
						|
	get_value(Connection,Con),
 | 
						|
	% Number of fields of the Relation, must be
 | 
						|
        % equal to the number of attributes
 | 
						|
	c_db_connection_type(Con,ConType),
 | 
						|
	( ConType == mysql ->
 | 
						|
	    c_db_my_number_of_fields(Relation,Con,Arity)
 | 
						|
	; ConType == sqlit3 ->
 | 
						|
	    c_sqlit3_number_of_fields(Relation,Con,Arity)
 | 
						|
	;
 | 
						|
	    c_db_odbc_number_of_fields(Relation,Con,Arity)
 | 
						|
	),
 | 
						|
	length(Att,Arity),
 | 
						|
	% All fields must be Instanciated ( FALTA POR O NULL )
 | 
						|
	'$make_a_list'(Arity,FieldsProperties),
 | 
						|
	( ConType == mysql ->
 | 
						|
	    c_db_my_get_fields_properties(Relation,Con,FieldsProperties)
 | 
						|
	;ConType == sqlit3 ->
 | 
						|
	    c_sqlit3_get_fields_properties(Relation,Con,FieldsProperties)
 | 
						|
	;
 | 
						|
	    c_db_odbc_get_fields_properties(Relation,Con,FieldsProperties)
 | 
						|
	),
 | 
						|
	'$check_fields'(Att,FieldsProperties).
 | 
						|
'$error_checks'(db_open(mysql,Connection,Host/Db/Port/_,User,Password)) :- !,
 | 
						|
	nonvar(Host), % ==  \+var(Host)
 | 
						|
	nonvar(User),
 | 
						|
	nonvar(Password),
 | 
						|
	nonvar(Db),
 | 
						|
	integer(Port),
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(odbc,Connection,ODBCEntry,User,Password)) :- !,
 | 
						|
	nonvar(ODBCEntry), % ==  \+var(ODBCEntry)
 | 
						|
	nonvar(User),
 | 
						|
	nonvar(Password),
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(postgres,Connection,_Host/_Db/_Port/_,_User,_Password)) :- !,
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(postgres,Connection,_Host/_Db/_Port/_,_User)) :- !,
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(postgres,Connection,_Host/_Db/_Port/_)) :- !,
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(postgres,Connection)) :- !,
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_open(sqlite3,Connection,File,_User,_Password)) :- !,
 | 
						|
	nonvar(File), % ==  \+var(ODBCEntry)
 | 
						|
	atom(Connection),
 | 
						|
	get_value(Connection,[]).  % Nao pode ter nenhum valor atribuido
 | 
						|
'$error_checks'(db_view(Connection,Pred,DbGoal)) :- !,
 | 
						|
        atom(Connection),
 | 
						|
        nonvar(DbGoal),
 | 
						|
	nonvar(Pred),
 | 
						|
	nonvar(DbGoal),
 | 
						|
	Pred =.. [_|_],
 | 
						|
	DbGoal =.. [_|_].
 | 
						|
	%'$check_list_on_list'(PredArgs,DbGoalArgs).
 | 
						|
'$error_checks'(db_import(Connection,RelationName,PredName)) :- !,
 | 
						|
        atom(Connection),
 | 
						|
        atom(RelationName),
 | 
						|
	atom(PredName).
 | 
						|
'$error_checks'(db_get_attributes_types(Connection,RelationName,_)) :- !,
 | 
						|
        atom(Connection),
 | 
						|
	nonvar(RelationName).
 | 
						|
'$error_checks'(db_call_procedure(_,Procedure,Args,LA)) :- !,
 | 
						|
	nonvar(Procedure),
 | 
						|
	ground(Args),
 | 
						|
	not ground(LA).
 | 
						|
'$error_checks'(db_sql(Connection,SQL,LA)):- !,
 | 
						|
        atom(Connection),
 | 
						|
        nonvar(SQL),
 | 
						|
	not ground(LA).
 | 
						|
'$error_checks'(db_number_of_fields(Connection,RelationName,_)) :- !,
 | 
						|
        atom(Connection),
 | 
						|
	nonvar(RelationName).
 | 
						|
'$error_checks'(db_close(Connection)) :- !,
 | 
						|
        atom(Connection).
 | 
						|
% must have only one relation
 | 
						|
'$error_checks'(db_datalog_describe(Relation,_)) :- !,
 | 
						|
	nonvar(Relation).
 | 
						|
'$error_checks'(db_describe(Connection,Relation,_)) :- !,
 | 
						|
	atom(Connection),
 | 
						|
	nonvar(Relation).
 | 
						|
'$error_checks'(db_my_show_tables(_)):- !.
 | 
						|
'$error_checks'(db_is_database_predicate(PredName,Arity,Module)):-!,
 | 
						|
        nonvar(PredName),
 | 
						|
	nonvar(Arity),
 | 
						|
	nonvar(Module).
 | 
						|
% Prevent the error of given an atom that has no value
 | 
						|
'$error_checks'(get_value(Connection,Con)) :- !,
 | 
						|
	% This also prevents the case of giving the number of the connection
 | 
						|
	% as an argument
 | 
						|
	atom(Connection),
 | 
						|
	var(Con),
 | 
						|
	get_value(Connection,Value),
 | 
						|
	Value \== [].
 | 
						|
 | 
						|
% Prevent the error of given an atom that has no value
 | 
						|
'$error_checks'(get_value(Conn,Connection)) :- !,
 | 
						|
	% This also prevents the case of giving the number of the connection
 | 
						|
	% as an argument
 | 
						|
	atom(Conn),
 | 
						|
	var(Connection),
 | 
						|
	get_value(Conn,Value),
 | 
						|
	Value \== [].
 |