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
This commit is contained in:
parent
6c4cb8ab74
commit
7abbf8a1d8
|
@ -15,7 +15,7 @@
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
#if defined MYDDAS_MYSQL && defined CUT_C
|
#if defined MYDDAS_MYSQL
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -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,(void));
|
||||||
STATIC_PROTO(Int c_db_my_row_cut,(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_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_next_result_set,(void));
|
||||||
STATIC_PROTO(Int c_db_my_get_database,(void));
|
STATIC_PROTO(Int c_db_my_get_database,(void));
|
||||||
STATIC_PROTO(Int c_db_my_change_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 */
|
/* 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);
|
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 */
|
/* db_get_attributes_types: Relation x TypesList */
|
||||||
Yap_InitCPred("c_db_my_get_attributes_types", 3, c_db_my_get_attributes_types, 0);
|
Yap_InitCPred("c_db_my_get_attributes_types", 3, c_db_my_get_attributes_types, 0);
|
||||||
|
|
||||||
/* db_query: SQLQuery x ResultSet x Connection */
|
/* 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 */
|
/* db_disconnect: Connection */
|
||||||
Yap_InitCPred("c_db_my_disconnect", 1,c_db_my_disconnect, 0);
|
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_result_set = Deref(ARG2);
|
||||||
Term arg_conn = Deref(ARG3);
|
Term arg_conn = Deref(ARG3);
|
||||||
Term arg_mode = Deref(ARG4);
|
Term arg_mode = Deref(ARG4);
|
||||||
|
Term arg_arity = Deref(ARG5);
|
||||||
|
|
||||||
char *sql = AtomName(AtomOfTerm(arg_sql_query));
|
char *sql = AtomName(AtomOfTerm(arg_sql_query));
|
||||||
char *mode = AtomName(AtomOfTerm(arg_mode));
|
char *mode = AtomName(AtomOfTerm(arg_mode));
|
||||||
|
@ -191,7 +188,7 @@ c_db_my_query(void) {
|
||||||
if (mysql_real_query(conn, sql, length) != 0)
|
if (mysql_real_query(conn, sql, length) != 0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Erro na query! %s\n",sql);
|
printf("ERROR: **c_db_my_query** Error on query! %s\n",sql);
|
||||||
#endif
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -291,10 +288,16 @@ c_db_my_query(void) {
|
||||||
//INSERT statements don't return any res_set
|
//INSERT statements don't return any res_set
|
||||||
if (mysql_field_count(conn) == 0)
|
if (mysql_field_count(conn) == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
printf("Query vazia!\n");
|
#ifdef DEBUG
|
||||||
|
printf("Empty Query!\n");
|
||||||
|
#endif
|
||||||
return FALSE;
|
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)))
|
if (!Yap_unify(arg_result_set, MkIntegerTerm((Int) res_set)))
|
||||||
{
|
{
|
||||||
mysql_free_result(res_set);
|
mysql_free_result(res_set);
|
||||||
|
@ -325,7 +328,7 @@ c_db_my_number_of_fields(void) {
|
||||||
if (mysql_query(conn, sql) != 0)
|
if (mysql_query(conn, sql) != 0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#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
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -334,7 +337,7 @@ c_db_my_number_of_fields(void) {
|
||||||
if ((res_set = mysql_store_result(conn)) == NULL)
|
if ((res_set = mysql_store_result(conn)) == NULL)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#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
|
#endif
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -366,8 +369,10 @@ c_db_my_get_attributes_types(void) {
|
||||||
|
|
||||||
sprintf(sql,"DESCRIBE `%s`",relation);
|
sprintf(sql,"DESCRIBE `%s`",relation);
|
||||||
|
|
||||||
|
Int length = strlen(sql);
|
||||||
|
|
||||||
/* executar a query SQL */
|
/* executar a query SQL */
|
||||||
if (mysql_query(conn, sql) != 0)
|
if (mysql_real_query(conn, sql, length) != 0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Erro na query! %s\n",sql);
|
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 */
|
/* guardar os tuplos do lado do cliente */
|
||||||
if ((res_set = mysql_store_result(conn)) == NULL)
|
if ((res_set = mysql_store_result(conn)) == NULL)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
printf("Query vazia!\n");
|
printf("Query vazia!\n");
|
||||||
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +478,7 @@ c_db_my_row(void) {
|
||||||
|
|
||||||
arity = IntegerOfTerm(arg_arity);
|
arity = IntegerOfTerm(arg_arity);
|
||||||
|
|
||||||
while(TRUE)
|
while(TRUE)
|
||||||
{
|
{
|
||||||
if ((row = mysql_fetch_row(res_set)) != NULL)
|
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
|
static Int
|
||||||
c_db_my_get_fields_properties(void) {
|
c_db_my_get_fields_properties(void) {
|
||||||
Term nome_relacao = Deref(ARG1);
|
Term nome_relacao = Deref(ARG1);
|
||||||
|
@ -611,8 +579,10 @@ c_db_my_get_fields_properties(void) {
|
||||||
query*/
|
query*/
|
||||||
sprintf (sql,"SELECT * FROM `%s` LIMIT 0",relacao);
|
sprintf (sql,"SELECT * FROM `%s` LIMIT 0",relacao);
|
||||||
|
|
||||||
|
Int length=strlen(sql);
|
||||||
|
|
||||||
/* executar a query SQL */
|
/* executar a query SQL */
|
||||||
if (mysql_query(conn, sql) != 0)
|
if (mysql_real_query(conn, sql, length) != 0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Erro na query! %s\n",sql);
|
printf("Erro na query! %s\n",sql);
|
||||||
|
@ -714,4 +684,4 @@ c_db_my_change_database(void) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /*MYDDAS_MYSQL && CUT_C*/
|
#endif /*MYDDAS_MYSQL*/
|
||||||
|
|
|
@ -116,6 +116,10 @@ c_db_add_preds (void){
|
||||||
Term arg_module = Deref(ARG3);
|
Term arg_module = Deref(ARG3);
|
||||||
Term arg_conn = Deref(ARG4);
|
Term arg_conn = Deref(ARG4);
|
||||||
|
|
||||||
|
/* PredEntry *pe; */
|
||||||
|
/* pe = RepPredProp(PredPropByFunc(FunctorOfTerm(arg_pred),arg_module)); */
|
||||||
|
|
||||||
|
|
||||||
char *nome = AtomName(AtomOfTerm(arg_nome));
|
char *nome = AtomName(AtomOfTerm(arg_nome));
|
||||||
char *module = AtomName(AtomOfTerm(arg_module));
|
char *module = AtomName(AtomOfTerm(arg_module));
|
||||||
Int aridade = IntegerOfTerm(arg_aridade);
|
Int aridade = IntegerOfTerm(arg_aridade);
|
||||||
|
@ -125,7 +129,7 @@ c_db_add_preds (void){
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf ("ERROR : Could not add Predicate: Line: %d File: %s\n",__LINE__,__FILE__);
|
printf ("ERROR : Could not add Predicate: Line: %d File: %s\n",__LINE__,__FILE__);
|
||||||
#endif
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +143,7 @@ c_db_check_if_exists_pred (void){
|
||||||
Term arg_aridade = Deref(ARG2);
|
Term arg_aridade = Deref(ARG2);
|
||||||
Term arg_module = Deref(ARG3);
|
Term arg_module = Deref(ARG3);
|
||||||
|
|
||||||
|
|
||||||
char *nome = AtomName(AtomOfTerm(arg_nome));
|
char *nome = AtomName(AtomOfTerm(arg_nome));
|
||||||
char *module = AtomName(AtomOfTerm(arg_module));
|
char *module = AtomName(AtomOfTerm(arg_module));
|
||||||
Int aridade = IntegerOfTerm(arg_aridade);
|
Int aridade = IntegerOfTerm(arg_aridade);
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct myddas_list_preds {
|
||||||
char *pred_module;
|
char *pred_module;
|
||||||
char *pred_name;
|
char *pred_name;
|
||||||
short pred_arity;
|
short pred_arity;
|
||||||
|
//void *pe;
|
||||||
MYDDAS_UTIL_PREDICATE next;
|
MYDDAS_UTIL_PREDICATE next;
|
||||||
MYDDAS_UTIL_PREDICATE previous;
|
MYDDAS_UTIL_PREDICATE previous;
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue