MYDDAS: New functionalitys to the MYDDAS system

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1541 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
tiagosoares 2006-02-10 23:42:19 +00:00
parent 302495f6c4
commit bc82175e5e
6 changed files with 197 additions and 114 deletions

View File

@ -311,7 +311,7 @@ c_db_my_number_of_fields(void) {
MYSQL_RES *res_set;
sprintf(sql,"DESCRIBE %s",relation);
sprintf(sql,"DESCRIBE `%s`",relation);
/* executar a query SQL */
if (mysql_query(conn, sql) != 0)
@ -356,7 +356,7 @@ c_db_my_get_attributes_types(void) {
MYSQL_ROW row;
Term head, list;
sprintf(sql,"DESCRIBE %s",relation);
sprintf(sql,"DESCRIBE `%s`",relation);
/* executar a query SQL */
if (mysql_query(conn, sql) != 0)
@ -598,10 +598,10 @@ c_db_my_get_fields_properties(void) {
MYSQL *conn = (MYSQL *) (IntegerOfTerm(arg_conn));
/* 1=2 -> We only need the meta information about the fields
/* LIMIT 0 -> We only need the meta information about the fields
to know their properties, we don't need the results of the
query*/
sprintf (sql,"SELECT * FROM %s where 1=2",relacao);
sprintf (sql,"SELECT * FROM `%s` LIMIT 0",relacao);
/* executar a query SQL */
if (mysql_query(conn, sql) != 0)

View File

@ -624,9 +624,9 @@ c_db_odbc_get_fields_properties(void) {
SQLHDBC hdbc =(SQLHDBC) (IntegerOfTerm(arg_conn));
/* 1=2 -> We don't need the results of the query,
/* LIMIT 0 -> We don't need the results of the query,
only the information about the fields of the relation*/
sprintf (sql,"SELECT * FROM %s where 1=2",relacao);
sprintf (sql,"SELECT * FROM `%s` LIMIT 0",relacao);
/*Allocate an handle for the query*/
SQLALLOCHANDLE(SQL_HANDLE_STMT, hdbc, &hstmt, "db_get_fields_properties");

View File

@ -27,11 +27,13 @@
#include "myddas_statistics.h"
#endif
STATIC_PROTO(int c_db_get_new_table_name,(void));
//STATIC_PROTO(int c_db_get_new_table_name,(void));
STATIC_PROTO(int c_db_connection_type,(void));
STATIC_PROTO(int c_db_add_preds,(void));
STATIC_PROTO(int c_db_preds_conn_start ,(void));
STATIC_PROTO(int c_db_preds_conn_continue ,(void));
STATIC_PROTO(int c_db_connection_start ,(void));
STATIC_PROTO(int c_db_connection_continue ,(void));
STATIC_PROTO(int c_db_check_if_exists_pred,(void));
STATIC_PROTO(int c_db_delete_predicate,(void));
STATIC_PROTO(int c_db_multi_queries_number,(void));
@ -42,23 +44,46 @@ STATIC_PROTO(int c_db_stats,(void));
STATIC_PROTO(int c_db_check,(void));
#endif
/* c_db_get_new_table_name: -TableName */
static int
c_db_get_new_table_name (void){
/* Term arg_con = Deref(ARG1); */
/* Term arg_name = Deref(ARG2); */
/* int *con = (int *) IntegerOfTerm(arg_con); */
/* char *tableName = myddas_util_get_table_name(con); */
/* Yap_unify(arg_name, MkAtomTerm(Yap_LookupAtom(tableName))); */
/* free(tableName); */
return TRUE;
}
void Yap_InitMYDDAS_SharedPreds(void)
{
/* c_db_connection_type: Connection x Type */
Yap_InitCPred("c_db_connection_type",2,c_db_connection_type, 0);
/* CORRECT THIS: db_add_preds : PredName * Arity * Connection */
Yap_InitCPred("c_db_add_preds",4,c_db_add_preds, 0);
/* c_db_check_if_exists_pred : PredName * Arity * Connection */
Yap_InitCPred("c_db_check_if_exists_pred",3,c_db_check_if_exists_pred, 0);
/* c_db_delete_pred : Module * PredName * Arity */
Yap_InitCPred("c_db_delete_predicate",3,c_db_delete_predicate, 0);
/* c_db_delete_pred : Module * PredName * Arity */
Yap_InitCPred("c_db_multi_queries_number",2,c_db_multi_queries_number, 0);
#ifdef MYDDAS_STATS
/* db_stats: Connection * Stats*/
Yap_InitCPred("c_db_stats",2, c_db_stats, 0);
#endif
#ifdef DEBUG
Yap_InitCPred("c_db_check",0, c_db_check, 0);
#endif
}
void Yap_InitBackMYDDAS_SharedPreds(void)
{
/* Gives all the predicates associated to a given connection */
Yap_InitCPredBack("c_db_preds_conn", 4, sizeof(int),
c_db_preds_conn_start,
c_db_preds_conn_continue, 0);
/* Gives all the connections stored on the MYDDAS Structure*/
Yap_InitCPredBack("c_db_connection", 1, sizeof(int),
c_db_connection_start,
c_db_connection_continue, 0);
}
/* Gives the type of a given connection,
in other words, type will be mysql or odbc
@ -99,7 +124,7 @@ c_db_add_preds (void){
if (myddas_util_add_predicate(nome,aridade,module,conn) == NULL)
{
#ifdef DEBUG
printf ("ERRO : Nao consegui adicionar predicado\n");
printf ("ERROR : Could not add Predicate: Line: %d File: %s\n",__LINE__,__FILE__);
#endif
return FALSE;
}
@ -170,14 +195,44 @@ c_db_multi_queries_number(void){
return TRUE;
}
static int
c_db_connection_start(void){
MYDDAS_UTIL_CONNECTION node =
Yap_regp->MYDDAS_GLOBAL_POINTER->myddas_top_connections;
EXTRA_CBACK_ARG(1,1)=(CELL) MkIntegerTerm((int)node);
return (c_db_connection_continue());
}
static int
c_db_connection_continue(void){
Term arg_conn = Deref(ARG1);
MYDDAS_UTIL_CONNECTION node;
node = (MYDDAS_UTIL_CONNECTION) IntegerOfTerm(EXTRA_CBACK_ARG(1,1));
/* There is no connections */
if (node == NULL)
{
cut_fail();
return FALSE;
}
Yap_unify(arg_conn, MkIntegerTerm((int)(node->connection)));
EXTRA_CBACK_ARG(1,1)=(CELL) MkIntegerTerm((int)(node->next));
return TRUE;
}
/* db_preds_conn : Connection(+) * Pred_name(-) * Pred_arity */
static int
c_db_preds_conn_start (void){
Term arg_conn = Deref(ARG1);
Term module = Deref(ARG2);
Term nome = Deref(ARG3);
Term aridade = Deref(ARG4);
int *conn = (int *) IntegerOfTerm(arg_conn);
MYDDAS_UTIL_CONNECTION node =
myddas_util_search_connection(conn);
@ -192,30 +247,32 @@ c_db_preds_conn_start (void){
void *pointer = myddas_util_get_list_pred(node);
EXTRA_CBACK_ARG(4,1)=(CELL) MkIntegerTerm((int)pointer);
if (IsVarTerm(nome) && IsVarTerm(aridade) && IsVarTerm(module))
return (c_db_preds_conn_continue());
cut_fail();
return FALSE;
return (c_db_preds_conn_continue());
}
/* db_preds_conn : Connection(+) * Pred_name(-) * Pred_arity*/
static int
c_db_preds_conn_continue (void){
Term module = Deref(ARG2);
Term nome = Deref(ARG3);
Term aridade = Deref(ARG4);
Term name = Deref(ARG3);
Term arity = Deref(ARG4);
void *pointer;
pointer = (void *) IntegerOfTerm(EXTRA_CBACK_ARG(4,1));
if (pointer != NULL)
{
Yap_unify(module, MkAtomTerm(Yap_LookupAtom(myddas_util_get_pred_module(pointer))));
Yap_unify(nome, MkAtomTerm(Yap_LookupAtom(myddas_util_get_pred_name(pointer))));
Yap_unify(aridade, MkIntegerTerm((int)myddas_util_get_pred_arity(pointer)));
EXTRA_CBACK_ARG(4,1)=(CELL) MkIntegerTerm((int)myddas_util_get_pred_next(pointer));
if (!Yap_unify(module, MkAtomTerm(Yap_LookupAtom(myddas_util_get_pred_module(pointer))))){
return FALSE;
}
if (!Yap_unify(name,MkAtomTerm(Yap_LookupAtom(myddas_util_get_pred_name(pointer))))){
return FALSE;
}
if (!Yap_unify(arity, MkIntegerTerm((int)myddas_util_get_pred_arity(pointer)))){
return FALSE;
}
return TRUE;
}
else
@ -386,43 +443,6 @@ void Yap_MyDDAS_delete_all_myddas_structs(void)
/* } */
}
void Yap_InitMYDDAS_SharedPreds(void)
{
Yap_InitCPred("c_db_get_new_table_name",2,c_db_get_new_table_name, 0);
Yap_InitCPred("c_db_connection_type",2,c_db_connection_type, 0);
/* CORRECT THIS: db_add_preds : PredName * Arity * Connection */
Yap_InitCPred("c_db_add_preds",4,c_db_add_preds, 0);
/* c_db_check_if_exists_pred : PredName * Arity * Connection */
Yap_InitCPred("c_db_check_if_exists_pred",3,c_db_check_if_exists_pred, 0);
/* c_db_delete_pred : Module * PredName * Arity */
Yap_InitCPred("c_db_delete_predicate",3,c_db_delete_predicate, 0);
/* c_db_delete_pred : Module * PredName * Arity */
Yap_InitCPred("c_db_multi_queries_number",2,c_db_multi_queries_number, 0);
#ifdef MYDDAS_STATS
/* db_stats: Connection * Stats*/
Yap_InitCPred("c_db_stats",2, c_db_stats, 0);
#endif
#ifdef DEBUG
Yap_InitCPred("c_db_check",0, c_db_check, 0);
#endif
}
void Yap_InitBackMYDDAS_SharedPreds(void)
{
Yap_InitCPredBack("c_db_preds_conn", 4, sizeof(int),
c_db_preds_conn_start,
c_db_preds_conn_continue, 0);
}

View File

@ -17,13 +17,17 @@
:- module(myddas,[
db_open/5,
db_open/4,
db_close/1,
db_close/0,
db_verbose/1,
db_module/1,
db_is_database_predicate/3,
db_stats/2,
db_sql/2,
db_sql/3,
db_sql_select/3,
db_prolog_select/3,
db_prolog_select_multi/3,
@ -43,11 +47,15 @@
db_datalog_select/3,
% myddas_assert_predicates.yap
db_import/2,
db_import/3,
db_view/2,
db_view/3,
db_insert/3,
db_abolish/2,
db_listing/0,
db_listing/1,
% myddas_mysql.yap
db_my_open/5,
db_my_close/1,
@ -75,10 +83,14 @@
]).
:- use_module(myddas_assert_predicates,[
db_import/2,
db_import/3,
db_view/2,
db_view/3,
db_insert/3,
db_abolish/2
db_abolish/2,
db_listing/0,
db_listing/1
]).
:- use_module(myddas_mysql,[
@ -135,9 +147,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% db_open/5
%
% db_open/5
% db_open/4
%
db_open(Interface,HostDb,User,Password):-
db_open(Interface,myddas,HostDb,User,Password).
db_open(mysql,Connection,Host/Db,User,Password) :-
'$error_checks'(db_open(mysql,Connection,Host/Db,User,Password)),
c_db_my_connect(Host,User,Password,Db,Con),
@ -153,8 +167,10 @@ db_open(odbc,Connection,ODBCEntry,User,Password) :-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% db_close/1
% db_close/0
%
%
db_close:-
db_close(myddas).
db_close(Connection):-
'$error_checks'(db_close(Connection)),
get_value(Connection,Con),
@ -232,12 +248,18 @@ db_stats(Connection,List):-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
db_sql_select(_,_,_):-
nl,write('Know use db_sql/3 insted of db_sql_select/3'),nl,
halt.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% db_sql_select(+,+,-)
% db_sql(+,+,-)
%
%
db_sql_select(Connection,SQL,LA):-
'$error_checks'(db_sql_select(Connection,SQL,LA)),
db_sql(SQL,LA):-
db_sql(myddas,SQL,LA).
db_sql(Connection,SQL,LA):-
'$error_checks'(db_sql(Connection,SQL,LA)),
get_value(Connection,Con),
c_db_connection_type(Con,ConType),
( ConType == mysql ->

View File

@ -16,10 +16,14 @@
*************************************************************************/
:- module(myddas_assert_predicates,[
db_import/2,
db_import/3,
db_view/2,
db_view/3,
db_insert/3,
db_abolish/2
db_abolish/2,
db_listing/0,
db_listing/1
]).
@ -54,8 +58,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% db_import/3
% db_import/2
%
%
db_import(RelationName,PredName):-
db_import(myddas,Relation,PredName).
db_import(Connection,RelationName,PredName) :-
'$error_checks'(db_import(Connection,RelationName,PredName)),
get_value(Connection,Con),
@ -90,13 +96,6 @@ db_import(Connection,RelationName,PredName) :-
functor(P,PredName,Arity),
'$make_list_of_args'(1,Arity,P,LA),
%Optimization
%'$copy_term_nv'(P,[],G,_),
%generate the SQL query
% translate(G,G,Code),
%queries_atom(Code,SQL),
M=myddas_assert_predicates,
%build PredName clause
( ConType == mysql ->
@ -109,27 +108,10 @@ db_import(Connection,RelationName,PredName) :-
','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode),
','(!,M:c_db_my_row(ResultSet,Arity,LA))))))))]
% Assert =..[':-',P,','(M:'$build_query'(0,SQL,Code,LA,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 =..[':-',P,','(get_value(db_myddas_stats_count,Number),
% ','(statistics(cputime,TimeI),
% ','(M:'$build_query'(0,SQL,Code,LA,FinalSQL),
% ','(M:db_my_result_set(Mode),
% ','(M:'$write_or_not'(FinalSQL),
% ','(M:c_db_my_query(FinalSQL,ResultSet,Con,Mode),
% ','(statistics(cputime,TimeF),
% ','(Temp is TimeF - TimeI,
% ','(Temp2 is Temp + Number,
% ','(set_value(db_myddas_stats_count,Temp2),
% ','(!,M:c_db_my_row(ResultSet,Arity,LA))))))))))))]
;
'$make_a_list'(Arity,BindList),
Assert =..[':-',P,','(M:'$copy_term_nv'(P,[],G,_),
','(M:translate(G,G,Code),
','(M:translate(G,G,Code),
','(M:queries_atom(Code,FinalSQL),
','(M:c_db_odbc_query(FinalSQL,ResultSet,Arity,BindList,Connection),
','(M:'$write_or_not'(FinalSQL),
@ -144,8 +126,10 @@ db_import(Connection,RelationName,PredName) :-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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),
@ -247,13 +231,61 @@ db_insert(Connection,RelationName,PredName) :-
%
%
db_abolish(Module:PredName,Arity):-!,
%'$error_checks'(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)),
'$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).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -28,6 +28,15 @@
is_list/1
]).
'$error_checks'(db_abolish(ModulePredName,Arity)):-!,
(ModulePredName = Module:PredName ->
atom(Module),
atom(PredName)
;
atom(ModulePredName)
),
number(Arity).
'$error_checks'(db_show_database(Connection,_)):- !,
atom(Connection).
'$error_checks'(db_change_database(Connection,Database)):- !,
@ -106,7 +115,7 @@
'$error_checks'(db_get_attributes_types(Connection,RelationName,_)) :- !,
atom(Connection),
nonvar(RelationName).
'$error_checks'(db_sql_select(Connection,SQL,LA)):- !,
'$error_checks'(db_sql(Connection,SQL,LA)):- !,
atom(Connection),
nonvar(SQL),
not ground(LA).