/************************************************************************* * * * 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_assert_predicates.yap * * Last rev: * * mods: * * comments: Predicates that assert other for the MyDDAS Interface * * * *************************************************************************/ :- module(myddas_assert_predicates,[ db_import/2, db_import/3, db_view/2, db_view/3, db_insert/2, db_insert/3, db_abolish/2, db_listing/0, db_listing/1 ]). :- use_module(myddas,[ db_module/1 ]). :- use_module(myddas_errors,[ '$error_checks'/1 ]). :- use_module(myddas_util_predicates,[ '$get_values_for_insert'/3, '$make_atom'/2, '$write_or_not'/1, '$copy_term_nv'/4, '$assert_attribute_information'/4, '$make_a_list'/2, '$where_exists'/2, '$build_query'/5 ]). :- use_module(myddas_prolog2sql,[ translate/3, queries_atom/2 ]). :- use_module(myddas_mysql,[ db_my_result_set/1 ]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_import/3 % db_import/2 % db_import(RelationName,PredName):- db_import(myddas,RelationName,PredName). db_import(Connection,RelationName,PredName) :- '$error_checks'(db_import(Connection,RelationName,PredName)), get_value(Connection,Con), c_db_connection_type(Con,ConType), % get relation arity ( ConType == mysql -> c_db_my_number_of_fields(RelationName,Con,Arity) ; ConType == odbc -> c_db_odbc_number_of_fields(RelationName,Con,Arity) ; c_sqllite3_number_of_fields(RelationName,Con,Arity) ), db_module(Module), not c_db_check_if_exists_pred(PredName,Arity,Module), R=..[relation,PredName,Arity,RelationName], % assert relation fact assert(myddas_prolog2sql:R), Size is 2*Arity, '$make_a_list'(Size,TypesList), % get attributes types in TypesList [field0,type0,field1,type1...] ( ConType == mysql -> c_db_my_get_attributes_types(RelationName,Con,TypesList) ; ConType == odbc -> c_db_odbc_get_attributes_types(RelationName,Con,TypesList) ; c_sqlite3_get_attributes_types(RelationName,Con,TypesList) ), % assert attributes facts '$assert_attribute_information'(0,Arity,RelationName,TypesList), % build PredName functor functor(P,PredName,Arity), P=..[PredName|LA], M=myddas_assert_predicates, %build PredName clause ( ConType == mysql -> Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_), ','(M:translate(G,G,Code), ','(M:queries_atom(Code,FinalSQL), ','(M:db_my_result_set(Mode), ','(M:'$write_or_not'(FinalSQL), ','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode,_), ','(!,M:c_db_my_row(ResultSet,Arity,LA))))))))] ; ConType == sqlit3 -> Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_), ','(M:translate(G,G,Code), ','(M:queries_atom(Code,FinalSQL), ','(M:db_my_result_set(Mode), ','(M:'$write_or_not'(FinalSQL), ','(M:c_sqlit3_query(FinalSQL,ResultSet,Con,Mode,_), ','(!,M:c_sqlit3_row(ResultSet,Arity,LA))))))))] ; '$make_a_list'(Arity,BindList), Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_), ','(M:translate(G,G,Code), ','(M:queries_atom(Code,FinalSQL), ','(M:c_db_odbc_query(FinalSQL,ResultSet,Arity,BindList,Con), ','(M:'$write_or_not'(FinalSQL), ','(!,M:c_db_odbc_row(ResultSet,BindList,LA)))))))] ), assert(Module:Assert), c_db_add_preds(PredName,Arity,Module,Con). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_view/3 % db_view/2 % db_view(PredName,DbGoal) :- db_view(myddas,PredName,DbGoal). db_view(Connection,PredName,DbGoal) :- '$error_checks'(db_view(Connection,PredName,DbGoal)), get_value(Connection,Con), % get arity of projection term functor(PredName,ViewName,Arity), db_module(Module), not c_db_check_if_exists_pred(ViewName,Arity,Module), % This copy_term is done to prevent the unification % with top-level variables A='var('A')' error copy_term((PredName,DbGoal),(CopyView,CopyGoal)), CopyView=..[ViewName|LA], M=myddas_assert_predicates, c_db_connection_type(Con,ConType), % build view clause ( ConType == mysql -> Assert =..[':-',CopyView, ','(M:'$copy_term_nv'(CopyView,[],ProjT,Dic), ','(M:'$copy_term_nv'(CopyGoal,Dic,NG,_), ','(M:translate(ProjT,NG,Code), ','(M:queries_atom(Code,FinalSQL), ','(M:db_my_result_set(Mode), ','(M:'$write_or_not'(FinalSQL), ','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode,_), ','(!,M:c_db_my_row(ResultSet,Arity,LA)))))))))] ; % Assert =..[':-',NewName, % ','(M:translate(CopyView,CopyGoal,Code), % ','(M:queries_atom(Code,FinalSQL), % ','(M:'$make_a_list'(Arity,BindList), % ','(M:'$write_or_not'(FinalSQL), % ','(M:c_db_odbc_query(FinalSQL,ResultSet,Arity,BindList,Con), % ','(!,M:c_db_odbc_row(ResultSet,BindList,LA)))))))] true ), assert(Module:Assert), c_db_add_preds(ViewName,Arity,Module,Con). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_insert/3 % % db_insert(RelationName,PredName) :- db_insert(myddas,RelationName,PredName). db_insert(Connection,RelationName,PredName) :- '$error_checks'(db_insert3(Connection,RelationName,PredName)), get_value(Connection,Con), c_db_connection_type(Con,ConType), % get relation arity ( ConType == mysql -> c_db_my_number_of_fields(RelationName,Con,Arity) ; c_db_odbc_number_of_fields(RelationName,Con,Arity) ), db_module(Module), not c_db_check_if_exists_pred(PredName,Arity,Module), R=..[relation,PredName,Arity,RelationName], % assert relation fact assert(myddas_prolog2sql:R), % build PredName functor functor(Predicate,PredName,Arity), Predicate=..[PredName|LA], Size is 2*Arity, '$make_a_list'(Size,TypesList), % get attributes types in TypesList [field0,type0,field1,type1...] % and build PredName clause ( ConType == mysql -> c_db_my_get_attributes_types(RelationName,Con,TypesList), Assert =..[':-',Predicate,','(myddas_assert_predicates:'$get_values_for_insert'(TypesList,LA,ValuesList), ','(myddas_assert_predicates:'$make_atom'(['INSERT INTO `',RelationName,'` VALUES ('|ValuesList],SQL), ','(myddas_assert_predicates:db_my_result_set(Mode), ','(myddas_assert_predicates:'$write_or_not'(SQL), myddas_assert_predicates:c_db_my_query(SQL,_,Con,Mode,_)))))] ; c_db_odbc_get_attributes_types(RelationName,Con,TypesList), Assert =..[':-',Predicate,','(myddas_assert_predicates:'$get_values_for_insert'(TypesList,LA,ValuesList), ','(myddas_assert_predicates:'$make_atom'(['INSERT INTO `',RelationName,'` VALUES ('|ValuesList],SQL), ','(myddas_assert_predicates:'$write_or_not'(SQL), myddas_assert_predicates:c_db_odbc_query(SQL,_,_,_,Con))))] ), assert(Module:Assert), c_db_add_preds(PredName,Arity,Module,Con). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_abolish(+,+) % % db_abolish(Module:PredName,Arity):-!, '$error_checks'(db_abolish(Module:PredName,Arity)), c_db_delete_predicate(Module,PredName,Arity), abolish(Module:PredName,Arity). db_abolish(PredName,Arity):- '$error_checks'(db_abolish(PredName,Arity)), db_module(Module), c_db_delete_predicate(Module,PredName,Arity), abolish(Module:PredName,Arity). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_abolish(+,+) % % db_abolish(Module:PredName,Arity):-!, '$error_checks'(db_abolish(Module:PredName,Arity)), c_db_delete_predicate(Module,PredName,Arity), abolish(Module:PredName,Arity). db_abolish(PredName,Arity):- '$error_checks'(db_abolish(PredName,Arity)), db_module(Module), c_db_delete_predicate(Module,PredName,Arity), abolish(Module:PredName,Arity). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_listing. % % db_listing:- c_db_connection(Con), c_db_preds_conn(Con,Module,Name,Arity), listing(Module:Name/Arity), fail. db_listing. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % db_listing. % % db_listing(Module:Name/Arity):-!, c_db_connection(Con), c_db_preds_conn(Con,Module,Name,Arity), listing(Module:Name/Arity). db_listing(Name/Arity):-!, c_db_connection(Con), c_db_preds_conn(Con,Module,Name,Arity), listing(Module:Name/Arity). db_listing(Name):- c_db_connection(Con), c_db_preds_conn(Con,Module,Name,Arity), listing(Module:Name/Arity). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%