From 7abbf8a1d84fcbc2e9a239df9ad6a2864f1e43c2 Mon Sep 17 00:00:00 2001 From: tiagosoares Date: Sun, 30 Apr 2006 10:07:44 +0000 Subject: [PATCH] MYDDAS: added new predicates to the MYDDAS interface. db_call_procedure/3 and db_sql_mode/2 git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1622 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- MYDDAS/myddas_mysql.c | 76 +++++++++++++---------------------------- MYDDAS/myddas_shared.c | 7 +++- MYDDAS/myddas_structs.h | 1 + 3 files changed, 30 insertions(+), 54 deletions(-) diff --git a/MYDDAS/myddas_mysql.c b/MYDDAS/myddas_mysql.c index dc54fd5e1..ae24dcbe5 100755 --- a/MYDDAS/myddas_mysql.c +++ b/MYDDAS/myddas_mysql.c @@ -15,7 +15,7 @@ * * *************************************************************************/ -#if defined MYDDAS_MYSQL && defined CUT_C +#if defined MYDDAS_MYSQL #include #include @@ -52,7 +52,6 @@ STATIC_PROTO(Int c_db_my_table_write,(void)); STATIC_PROTO(Int c_db_my_row,(void)); STATIC_PROTO(Int c_db_my_row_cut,(void)); STATIC_PROTO(Int c_db_my_get_fields_properties,(void)); -STATIC_PROTO(Int c_db_my_number_of_fields_in_query,(void)); STATIC_PROTO(Int c_db_my_get_next_result_set,(void)); STATIC_PROTO(Int c_db_my_get_database,(void)); STATIC_PROTO(Int c_db_my_change_database,(void)); @@ -65,14 +64,11 @@ void Yap_InitMYDDAS_MySQLPreds(void) /* db_number_of_fields: Relation x Connection x NumberOfFields */ Yap_InitCPred("c_db_my_number_of_fields",3, c_db_my_number_of_fields, 0); - /* db_number_of_fields_in_query: SQLQuery x Connection x NumberOfFields */ - Yap_InitCPred("c_db_my_number_of_fields_in_query",3, c_db_my_number_of_fields_in_query, 0); - /* db_get_attributes_types: Relation x TypesList */ Yap_InitCPred("c_db_my_get_attributes_types", 3, c_db_my_get_attributes_types, 0); /* db_query: SQLQuery x ResultSet x Connection */ - Yap_InitCPred("c_db_my_query", 4, c_db_my_query, 0); + Yap_InitCPred("c_db_my_query", 5, c_db_my_query, 0); /* db_disconnect: Connection */ Yap_InitCPred("c_db_my_disconnect", 1,c_db_my_disconnect, 0); @@ -164,6 +160,7 @@ c_db_my_query(void) { Term arg_result_set = Deref(ARG2); Term arg_conn = Deref(ARG3); Term arg_mode = Deref(ARG4); + Term arg_arity = Deref(ARG5); char *sql = AtomName(AtomOfTerm(arg_sql_query)); char *mode = AtomName(AtomOfTerm(arg_mode)); @@ -191,7 +188,7 @@ c_db_my_query(void) { if (mysql_real_query(conn, sql, length) != 0) { #ifdef DEBUG - printf("Erro na query! %s\n",sql); + printf("ERROR: **c_db_my_query** Error on query! %s\n",sql); #endif return FALSE; } @@ -291,10 +288,16 @@ c_db_my_query(void) { //INSERT statements don't return any res_set if (mysql_field_count(conn) == 0) return TRUE; - printf("Query vazia!\n"); +#ifdef DEBUG + printf("Empty Query!\n"); +#endif return FALSE; } + if (!Yap_unify(arg_arity, MkIntegerTerm(mysql_num_fields(res_set)))){ + return FALSE; + } + if (!Yap_unify(arg_result_set, MkIntegerTerm((Int) res_set))) { mysql_free_result(res_set); @@ -325,7 +328,7 @@ c_db_my_number_of_fields(void) { if (mysql_query(conn, sql) != 0) { #ifdef DEBUG - printf("Erro na query! %s\n",sql); + printf("ERROR: **c_db_my_number_of_fields** Error on the query! %s\n",sql); #endif return FALSE; } @@ -334,7 +337,7 @@ c_db_my_number_of_fields(void) { if ((res_set = mysql_store_result(conn)) == NULL) { #ifdef DEBUG - printf("Erro na query! %s\n",sql); + printf("ERROR: **c_db_my_number_of_fields** Error storing the query! %s\n",sql); #endif return FALSE; @@ -366,8 +369,10 @@ c_db_my_get_attributes_types(void) { sprintf(sql,"DESCRIBE `%s`",relation); + Int length = strlen(sql); + /* executar a query SQL */ - if (mysql_query(conn, sql) != 0) + if (mysql_real_query(conn, sql, length) != 0) { #ifdef DEBUG printf("Erro na query! %s\n",sql); @@ -377,7 +382,9 @@ c_db_my_get_attributes_types(void) { /* guardar os tuplos do lado do cliente */ if ((res_set = mysql_store_result(conn)) == NULL) { +#ifdef DEBUG printf("Query vazia!\n"); +#endif return FALSE; } @@ -471,7 +478,7 @@ c_db_my_row(void) { arity = IntegerOfTerm(arg_arity); - while(TRUE) + while(TRUE) { if ((row = mysql_fetch_row(res_set)) != NULL) { @@ -552,45 +559,6 @@ c_db_my_row(void) { } } - -/* Mudar esta funcao de forma a nao fazer a consulta, pois - no predicate db_sql_selet vai fazer duas vezes a mesma consutla*/ -static Int -c_db_my_number_of_fields_in_query(void) { - Term arg_query = Deref(ARG1); - Term arg_conn = Deref(ARG2); - Term arg_fields = Deref(ARG3); - - char *query = AtomName(AtomOfTerm(arg_query)); - MYSQL *conn = (MYSQL *) (IntegerOfTerm(arg_conn)); - - MYSQL_RES *res_set; - - /* executar a query SQL */ - if (mysql_query(conn, query) != 0) - { -#ifdef DEBUG - printf("Erro na query! %s\n",query); -#endif - return FALSE; - } - - /* guardar os tuplos do lado do cliente */ - if ((res_set = mysql_store_result(conn)) == NULL) - { -#ifdef DEBUG - printf("Erro na query! %s\n",query); -#endif - return FALSE; - } - - if (!Yap_unify(arg_fields, MkIntegerTerm(mysql_num_fields(res_set)))){ - return FALSE; - } - mysql_free_result(res_set); - return TRUE; -} - static Int c_db_my_get_fields_properties(void) { Term nome_relacao = Deref(ARG1); @@ -611,8 +579,10 @@ c_db_my_get_fields_properties(void) { query*/ sprintf (sql,"SELECT * FROM `%s` LIMIT 0",relacao); + Int length=strlen(sql); + /* executar a query SQL */ - if (mysql_query(conn, sql) != 0) + if (mysql_real_query(conn, sql, length) != 0) { #ifdef DEBUG printf("Erro na query! %s\n",sql); @@ -714,4 +684,4 @@ c_db_my_change_database(void) { return TRUE; } -#endif /*MYDDAS_MYSQL && CUT_C*/ +#endif /*MYDDAS_MYSQL*/ diff --git a/MYDDAS/myddas_shared.c b/MYDDAS/myddas_shared.c index 5e6f17e6a..3c00fad03 100644 --- a/MYDDAS/myddas_shared.c +++ b/MYDDAS/myddas_shared.c @@ -116,6 +116,10 @@ c_db_add_preds (void){ Term arg_module = Deref(ARG3); Term arg_conn = Deref(ARG4); +/* PredEntry *pe; */ +/* pe = RepPredProp(PredPropByFunc(FunctorOfTerm(arg_pred),arg_module)); */ + + char *nome = AtomName(AtomOfTerm(arg_nome)); char *module = AtomName(AtomOfTerm(arg_module)); Int aridade = IntegerOfTerm(arg_aridade); @@ -125,7 +129,7 @@ c_db_add_preds (void){ { #ifdef DEBUG printf ("ERROR : Could not add Predicate: Line: %d File: %s\n",__LINE__,__FILE__); -#endif +#endif return FALSE; } @@ -139,6 +143,7 @@ c_db_check_if_exists_pred (void){ Term arg_aridade = Deref(ARG2); Term arg_module = Deref(ARG3); + char *nome = AtomName(AtomOfTerm(arg_nome)); char *module = AtomName(AtomOfTerm(arg_module)); Int aridade = IntegerOfTerm(arg_aridade); diff --git a/MYDDAS/myddas_structs.h b/MYDDAS/myddas_structs.h index e277cc810..f6c3196c3 100644 --- a/MYDDAS/myddas_structs.h +++ b/MYDDAS/myddas_structs.h @@ -24,6 +24,7 @@ struct myddas_list_preds { char *pred_module; char *pred_name; short pred_arity; + //void *pe; MYDDAS_UTIL_PREDICATE next; MYDDAS_UTIL_PREDICATE previous; };