1/************************************************************************* 2* * 3* YAP Prolog * 4* * 5* Yap Prolog was developed at NCCUP - Universidade do Porto * 6* * 7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * 8* * 9************************************************************************** 10* * 11* File: myddas_assert_predicates.yap * 12* Last rev: * 13* mods: * 14* comments: Predicates that assert other for the MyDDAS Interface * 15* * 16*************************************************************************/ 17 18:- module(myddas_assert_predicates,[ 19 db_import/2, 20 db_import/3, 21 db_view/2, 22 db_view/3, 23 db_insert/2, 24 db_insert/3, 25 db_abolish/2, 26 db_listing/0, 27 db_listing/1 28 ]). 29 30 31:- use_module(myddas,[ 32 db_module/1 33 ]). 34 35:- use_module(myddas_errors,[ 36 '$error_checks'/1 37 ]). 38 39:- use_module(myddas_util_predicates,[ 40 '$get_values_for_insert'/3, 41 '$make_atom'/2, 42 '$write_or_not'/1, 43 '$copy_term_nv'/4, 44 '$assert_attribute_information'/4, 45 '$make_a_list'/2, 46 '$where_exists'/2, 47 '$build_query'/5 48 ]). 49 50:- use_module(myddas_prolog2sql,[ 51 translate/3, 52 queries_atom/2 53 ]). 54:- use_module(myddas_mysql,[ 55 db_my_result_set/1 56 ]). 57 58 59%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 60% db_import/3 61% db_import/2 62% 63db_import(RelationName,PredName):- 64 db_import(myddas,RelationName,PredName). 65db_import(Connection,RelationName,PredName) :- 66 '$error_checks'(db_import(Connection,RelationName,PredName)), 67 get_value(Connection,Con), 68 c_db_connection_type(Con,ConType), 69 70 % get relation arity 71 ( ConType == mysql -> 72 c_db_my_number_of_fields(RelationName,Con,Arity) 73 ; 74 c_db_odbc_number_of_fields(RelationName,Con,Arity) 75 ), 76 db_module(Module), 77 not c_db_check_if_exists_pred(PredName,Arity,Module), 78 79 R=..[relation,PredName,Arity,RelationName], 80 % assert relation fact 81 assert(myddas_prolog2sql:R), 82 83 Size is 2*Arity, 84 '$make_a_list'(Size,TypesList), 85 % get attributes types in TypesList [field0,type0,field1,type1...] 86 ( ConType == mysql -> 87 c_db_my_get_attributes_types(RelationName,Con,TypesList) 88 ; 89 c_db_odbc_get_attributes_types(RelationName,Con,TypesList) 90 ), 91 92 % assert attributes facts 93 '$assert_attribute_information'(0,Arity,RelationName,TypesList), 94 95 % build PredName functor 96 functor(P,PredName,Arity), 97 P=..[PredName|LA], 98 99 M=myddas_assert_predicates, 100 %build PredName clause 101 ( ConType == mysql -> 102 103 Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_), 104 ','(M:translate(G,G,Code), 105 ','(M:queries_atom(Code,FinalSQL), 106 ','(M:db_my_result_set(Mode), 107 ','(M:'$write_or_not'(FinalSQL), 108 ','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode,_), 109 ','(!,M:c_db_my_row(ResultSet,Arity,LA))))))))] 110 111 ; 112 '$make_a_list'(Arity,BindList), 113 Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_), 114 ','(M:translate(G,G,Code), 115 ','(M:queries_atom(Code,FinalSQL), 116 ','(M:c_db_odbc_query(FinalSQL,ResultSet,Arity,BindList,Con), 117 ','(M:'$write_or_not'(FinalSQL), 118 ','(!,M:c_db_odbc_row(ResultSet,BindList,LA)))))))] 119 ), 120 121 assert(Module:Assert), 122 c_db_add_preds(PredName,Arity,Module,Con). 123%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 124 125 126 127%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 128% db_view/3 129% db_view/2 130% 131db_view(PredName,DbGoal) :- 132 db_view(myddas,PredName,DbGoal). 133db_view(Connection,PredName,DbGoal) :- 134 '$error_checks'(db_view(Connection,PredName,DbGoal)), 135 get_value(Connection,Con), 136 137 % get arity of projection term 138 functor(PredName,ViewName,Arity), 139 db_module(Module), 140 not c_db_check_if_exists_pred(ViewName,Arity,Module), 141 142 % This copy_term is done to prevent the unification 143 % with top-level variables A='var('A')' error 144 copy_term((PredName,DbGoal),(CopyView,CopyGoal)), 145 146 CopyView=..[ViewName|LA], 147 148 M=myddas_assert_predicates, 149 c_db_connection_type(Con,ConType), 150 151 % build view clause 152 ( ConType == mysql -> 153 Assert =..[':-',CopyView, 154 ','(M:'$copy_term_nv'(CopyView,[],ProjT,Dic), 155 ','(M:'$copy_term_nv'(CopyGoal,Dic,NG,_), 156 ','(M:translate(ProjT,NG,Code), 157 ','(M:queries_atom(Code,FinalSQL), 158 ','(M:db_my_result_set(Mode), 159 ','(M:'$write_or_not'(FinalSQL), 160 ','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode,_), 161 ','(!,M:c_db_my_row(ResultSet,Arity,LA)))))))))] 162 ; 163 % Assert =..[':-',NewName, 164% ','(M:translate(CopyView,CopyGoal,Code), 165% ','(M:queries_atom(Code,FinalSQL), 166% ','(M:'$make_a_list'(Arity,BindList), 167% ','(M:'$write_or_not'(FinalSQL), 168% ','(M:c_db_odbc_query(FinalSQL,ResultSet,Arity,BindList,Con), 169% ','(!,M:c_db_odbc_row(ResultSet,BindList,LA)))))))] 170 true 171 ), 172 assert(Module:Assert), 173 c_db_add_preds(ViewName,Arity,Module,Con). 174 175%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 176 177 178 179%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 180% db_insert/3 181% 182% 183db_insert(RelationName,PredName) :- 184 db_insert(myddas,RelationName,PredName). 185db_insert(Connection,RelationName,PredName) :- 186 '$error_checks'(db_insert3(Connection,RelationName,PredName)), 187 get_value(Connection,Con), 188 c_db_connection_type(Con,ConType), 189 190 % get relation arity 191 ( ConType == mysql -> 192 c_db_my_number_of_fields(RelationName,Con,Arity) 193 ; 194 c_db_odbc_number_of_fields(RelationName,Con,Arity) 195 ), 196 db_module(Module), 197 not c_db_check_if_exists_pred(PredName,Arity,Module), 198 199 R=..[relation,PredName,Arity,RelationName], 200 % assert relation fact 201 assert(myddas_prolog2sql:R), 202 203 % build PredName functor 204 functor(Predicate,PredName,Arity), 205 Predicate=..[PredName|LA], 206 207 Size is 2*Arity, 208 '$make_a_list'(Size,TypesList), 209 210 % get attributes types in TypesList [field0,type0,field1,type1...] 211 % and build PredName clause 212 ( ConType == mysql -> 213 c_db_my_get_attributes_types(RelationName,Con,TypesList), 214 Assert =..[':-',Predicate,','(myddas_assert_predicates:'$get_values_for_insert'(TypesList,LA,ValuesList), 215 ','(myddas_assert_predicates:'$make_atom'(['INSERT INTO `',RelationName,'` VALUES ('|ValuesList],SQL), 216 ','(myddas_assert_predicates:db_my_result_set(Mode), 217 ','(myddas_assert_predicates:'$write_or_not'(SQL), 218 myddas_assert_predicates:c_db_my_query(SQL,_,Con,Mode,_)))))] 219 ; 220 c_db_odbc_get_attributes_types(RelationName,Con,TypesList), 221 Assert =..[':-',Predicate,','(myddas_assert_predicates:'$get_values_for_insert'(TypesList,LA,ValuesList), 222 ','(myddas_assert_predicates:'$make_atom'(['INSERT INTO `',RelationName,'` VALUES ('|ValuesList],SQL), 223 ','(myddas_assert_predicates:'$write_or_not'(SQL), 224 myddas_assert_predicates:c_db_odbc_query(SQL,_,_,_,Con))))] 225 ), 226 assert(Module:Assert), 227 c_db_add_preds(PredName,Arity,Module,Con). 228%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 229 230 231%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 232% db_abolish(+,+) 233% 234% 235db_abolish(Module:PredName,Arity):-!, 236 '$error_checks'(db_abolish(Module:PredName,Arity)), 237 c_db_delete_predicate(Module,PredName,Arity), 238 abolish(Module:PredName,Arity). 239db_abolish(PredName,Arity):- 240 '$error_checks'(db_abolish(PredName,Arity)), 241 db_module(Module), 242 c_db_delete_predicate(Module,PredName,Arity), 243 abolish(Module:PredName,Arity). 244%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 245 246 247%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 248% db_abolish(+,+) 249% 250% 251db_abolish(Module:PredName,Arity):-!, 252 '$error_checks'(db_abolish(Module:PredName,Arity)), 253 c_db_delete_predicate(Module,PredName,Arity), 254 abolish(Module:PredName,Arity). 255db_abolish(PredName,Arity):- 256 '$error_checks'(db_abolish(PredName,Arity)), 257 db_module(Module), 258 c_db_delete_predicate(Module,PredName,Arity), 259 abolish(Module:PredName,Arity). 260%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 261 262 263%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 264% db_listing. 265% 266% 267db_listing:- 268 c_db_connection(Con), 269 c_db_preds_conn(Con,Module,Name,Arity), 270 listing(Module:Name/Arity), 271 fail. 272db_listing. 273%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 274 275 276%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 277% db_listing. 278% 279% 280db_listing(Module:Name/Arity):-!, 281 c_db_connection(Con), 282 c_db_preds_conn(Con,Module,Name,Arity), 283 listing(Module:Name/Arity). 284db_listing(Name/Arity):-!, 285 c_db_connection(Con), 286 c_db_preds_conn(Con,Module,Name,Arity), 287 listing(Module:Name/Arity). 288db_listing(Name):- 289 c_db_connection(Con), 290 c_db_preds_conn(Con,Module,Name,Arity), 291 listing(Module:Name/Arity). 292%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 293 294