bug fices
This commit is contained in:
@@ -1,79 +0,0 @@
|
||||
/* MYDDAS */
|
||||
|
||||
#ifdef USE_MYDDAS
|
||||
|
||||
/* myddas_initialization.c */
|
||||
MYDDAS_GLOBAL myddas_init_initialize_myddas(void);
|
||||
MYDDAS_UTIL_CONNECTION myddas_init_initialize_connection(void *,void *,MYDDAS_API,MYDDAS_UTIL_CONNECTION);
|
||||
MYDDAS_UTIL_PREDICATE myddas_init_initialize_predicate(char *, int, char *,MYDDAS_UTIL_PREDICATE);
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
/* myddas_statistics.c */
|
||||
MYDDAS_GLOBAL myddas_stats_initialize_global_stats(MYDDAS_GLOBAL);
|
||||
MYDDAS_STATS_STRUCT myddas_stats_initialize_connection_stats(void);
|
||||
void myddas_stats_delete_stats_list(MYDDAS_STATS_STRUCT);
|
||||
#endif /* MYDDAS_STATS */
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
/* myddas_util.c */
|
||||
void myddas_util_table_write(MYSQL_RES *);
|
||||
#endif
|
||||
MYDDAS_API myddas_util_connection_type(void *);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_connection(void *,void *,MYDDAS_API);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_search_connection(void *);
|
||||
void myddas_util_delete_connection(void *);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_predicate(char * ,Int , char *,void *);
|
||||
MYDDAS_UTIL_PREDICATE myddas_util_search_predicate(char * ,Int , char *);
|
||||
void myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE);
|
||||
|
||||
/* Get's the number of queries to save */
|
||||
UInt myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION);
|
||||
void myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION,UInt);
|
||||
#ifdef MYDDAS_ODBC
|
||||
/* Return enviromment identifier*/
|
||||
SQLHENV myddas_util_get_odbc_enviromment(SQLHDBC);
|
||||
#endif
|
||||
|
||||
void * myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION);
|
||||
void * myddas_util_get_pred_next(void *);
|
||||
char * myddas_util_get_pred_module(void *);
|
||||
char * myddas_util_get_pred_name(void *);
|
||||
MyddasInt myddas_util_get_pred_arity(void *);
|
||||
//DELETE THIS WHEN DB_STATS IS COMPLETED
|
||||
MyddasInt get_myddas_top(void);
|
||||
|
||||
#ifdef DEBUG
|
||||
void check_int(void);
|
||||
#endif
|
||||
|
||||
#endif /* MYDDAS_MYSQL || MYDDAS_ODBC */
|
||||
|
||||
/* myddas_mysql.c */
|
||||
#if defined MYDDAS_MYSQL
|
||||
void Yap_InitMYDDAS_MySQLPreds(void);
|
||||
void Yap_InitBackMYDDAS_MySQLPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_odbc.c */
|
||||
#if defined MYDDAS_ODBC
|
||||
void Yap_InitMYDDAS_ODBCPreds(void);
|
||||
void Yap_InitBackMYDDAS_ODBCPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_odbc.c */
|
||||
#if defined MYDDAS_SQLITE3
|
||||
void Yap_InitMYDDAS_SQLITE3Preds(void);
|
||||
void Yap_InitBackMYDDAS_SQLITE3Preds(void);
|
||||
#endif
|
||||
|
||||
/* Myddas_shared.c */
|
||||
#if defined USE_MYDDAS
|
||||
void Yap_MYDDAS_delete_all_myddas_structs(void);
|
||||
void Yap_InitMYDDAS_SharedPreds(void);
|
||||
void Yap_InitBackMYDDAS_SharedPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_top_level.c */
|
||||
#if defined MYDDAS_TOP_LEVEL && defined MYDDAS_MYSQL //&& defined HAVE_LIBREADLINE
|
||||
void Yap_InitMYDDAS_TopLevelPreds(void);
|
||||
#endif
|
@@ -13,7 +13,7 @@ set( MYDDAS_SOURCES
|
||||
myddas_shared.c
|
||||
myddas_statistics.c
|
||||
myddas_top_level.c
|
||||
myddas_wkb2prolog.c )
|
||||
)
|
||||
|
||||
set( MYDDAS_HEADERS
|
||||
myddas.h
|
||||
@@ -21,8 +21,7 @@ set( MYDDAS_HEADERS
|
||||
myddas_statistics_structs.h
|
||||
myddas_structs.h
|
||||
myddas_top_level.c
|
||||
myddas_types.h
|
||||
myddas_wkb2prolog.c )
|
||||
myddas_types.h )
|
||||
|
||||
set( MYDDAS_UTIL_SOURCES
|
||||
myddas_util.c
|
||||
|
@@ -3,44 +3,46 @@
|
||||
#ifdef USE_MYDDAS
|
||||
|
||||
/* myddas_initialization.c */
|
||||
MYDDAS_GLOBAL myddas_init_initialize_myddas(void);
|
||||
MYDDAS_UTIL_CONNECTION myddas_init_initialize_connection(void *,void *,MYDDAS_API,MYDDAS_UTIL_CONNECTION);
|
||||
MYDDAS_UTIL_PREDICATE myddas_init_initialize_predicate(const char *, int, const char *,MYDDAS_UTIL_PREDICATE);
|
||||
MYDDAS_GLOBAL myddas_init_initialize_myddas(void);
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *, void *, MYDDAS_API,
|
||||
MYDDAS_UTIL_CONNECTION);
|
||||
MYDDAS_UTIL_PREDICATE myddas_init_initialize_predicate(const char *, int,
|
||||
const char *,
|
||||
MYDDAS_UTIL_PREDICATE);
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
/* myddas_statistics.c */
|
||||
MYDDAS_GLOBAL myddas_stats_initialize_global_stats(MYDDAS_GLOBAL);
|
||||
MYDDAS_STATS_STRUCT myddas_stats_initialize_connection_stats(void);
|
||||
void myddas_stats_delete_stats_list(MYDDAS_STATS_STRUCT);
|
||||
MYDDAS_GLOBAL myddas_stats_initialize_global_stats(MYDDAS_GLOBAL);
|
||||
MYDDAS_STATS_STRUCT myddas_stats_initialize_connection_stats(void);
|
||||
void myddas_stats_delete_stats_list(MYDDAS_STATS_STRUCT);
|
||||
#endif /* MYDDAS_STATS */
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
/* myddas_util.c */
|
||||
void myddas_util_table_write(MYSQL_RES *);
|
||||
void myddas_util_table_write(MYSQL_RES *);
|
||||
#endif
|
||||
Short myddas_util_connection_type(void *);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_connection(void *,void *,MYDDAS_API);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_search_connection(void *con);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_connection(void *, void *, MYDDAS_API);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_search_connection(void *);
|
||||
void myddas_util_delete_connection(void *);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_predicate(const char * ,Int , const char *,void *);
|
||||
MYDDAS_UTIL_PREDICATE myddas_util_search_predicate(const char * ,Int , const char *);
|
||||
void myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE);
|
||||
void myddas_util_delete_connection(void *);
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_predicate(const char *, Int,
|
||||
const char *, void *);
|
||||
MYDDAS_UTIL_PREDICATE myddas_util_search_predicate(const char *, Int,
|
||||
const char *);
|
||||
void myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE);
|
||||
|
||||
/* Get's the number of queries to save */
|
||||
UInt myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION);
|
||||
void myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION,UInt);
|
||||
#ifdef MYDDAS_ODBC
|
||||
/* Return enviromment identifier*/
|
||||
SQLHENV myddas_util_get_odbc_enviromment(SQLHDBC);
|
||||
#endif
|
||||
UInt myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION);
|
||||
void myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION, UInt);
|
||||
|
||||
void * myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION);
|
||||
void * myddas_util_get_pred_next(void *);
|
||||
const char * myddas_util_get_pred_module(void *);
|
||||
const char * myddas_util_get_pred_name(void *);
|
||||
MyddasInt myddas_util_get_pred_arity(void *);
|
||||
//DELETE THIS WHEN DB_STATS IS COMPLETED
|
||||
MyddasInt get_myddas_top(void);
|
||||
void *myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION);
|
||||
void *myddas_util_get_pred_next(void *);
|
||||
const char *myddas_util_get_pred_module(void *);
|
||||
const char *myddas_util_get_pred_name(void *);
|
||||
MyddasInt myddas_util_get_pred_arity(void *);
|
||||
// DELETE THIS WHEN DB_STATS IS COMPLETED
|
||||
MyddasInt get_myddas_top(void);
|
||||
|
||||
#ifdef DEBUG
|
||||
void check_int(void);
|
||||
@@ -50,30 +52,31 @@ void check_int(void);
|
||||
|
||||
/* myddas_mysql.c */
|
||||
#if defined MYDDAS_MYSQL
|
||||
void Yap_InitMYDDAS_MySQLPreds(void);
|
||||
void Yap_InitBackMYDDAS_MySQLPreds(void);
|
||||
void Yap_InitMYDDAS_MySQLPreds(void);
|
||||
void Yap_InitBackMYDDAS_MySQLPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_odbc.c */
|
||||
#if defined MYDDAS_ODBC
|
||||
void Yap_InitMYDDAS_ODBCPreds(void);
|
||||
void Yap_InitBackMYDDAS_ODBCPreds(void);
|
||||
void Yap_InitMYDDAS_ODBCPreds(void);
|
||||
void Yap_InitBackMYDDAS_ODBCPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_odbc.c */
|
||||
#if defined MYDDAS_SQLITE3
|
||||
void Yap_InitMYDDAS_SQLITE3Preds(void);
|
||||
void Yap_InitBackMYDDAS_SQLITE3Preds(void);
|
||||
void Yap_InitMYDDAS_SQLITE3Preds(void);
|
||||
void Yap_InitBackMYDDAS_SQLITE3Preds(void);
|
||||
#endif
|
||||
|
||||
/* Myddas_shared.c */
|
||||
#if defined USE_MYDDAS
|
||||
void Yap_MYDDAS_delete_all_myddas_structs(void);
|
||||
void Yap_InitMYDDAS_SharedPreds(void);
|
||||
void Yap_InitBackMYDDAS_SharedPreds(void);
|
||||
void Yap_MYDDAS_delete_all_myddas_structs(void);
|
||||
void Yap_InitMYDDAS_SharedPreds(void);
|
||||
void Yap_InitBackMYDDAS_SharedPreds(void);
|
||||
#endif
|
||||
|
||||
/* myddas_top_level.c */
|
||||
#if defined MYDDAS_TOP_LEVEL && defined MYDDAS_MYSQL //&& defined HAVE_LIBREADLINE
|
||||
void Yap_InitMYDDAS_TopLevelPreds(void);
|
||||
#if defined MYDDAS_TOP_LEVEL && \
|
||||
defined MYDDAS_MYSQL //&& defined HAVE_LIBREADLINE
|
||||
void Yap_InitMYDDAS_TopLevelPreds(void);
|
||||
#endif
|
||||
|
@@ -11,32 +11,34 @@
|
||||
#endif
|
||||
|
||||
MYDDAS_GLOBAL
|
||||
myddas_init_initialize_myddas(void){
|
||||
myddas_init_initialize_myddas(void) {
|
||||
MYDDAS_GLOBAL global = NULL;
|
||||
|
||||
/* We cannot call MYDDAS_MALLOC were because the global
|
||||
register isn't yet initialized */
|
||||
global = (MYDDAS_GLOBAL) malloc (sizeof(struct myddas_global));
|
||||
global = (MYDDAS_GLOBAL)malloc(sizeof(struct myddas_global));
|
||||
#ifdef DEBUGX
|
||||
printf ("MALLOC %p %s %d\n",global,__FILE__,__LINE__);
|
||||
printf("MALLOC %p %s %d\n", global, __FILE__, __LINE__);
|
||||
#endif
|
||||
global->myddas_top_connections = NULL;
|
||||
#ifdef MYDDAS_TOP_LEVEL
|
||||
global->myddas_top_level_connection = NULL;
|
||||
#endif
|
||||
#ifdef MYDDAS_STATS
|
||||
global->myddas_statistics = (MYDDAS_GLOBAL_STATS) malloc (sizeof(struct myddas_global_stats));
|
||||
global->myddas_statistics =
|
||||
(MYDDAS_GLOBAL_STATS)malloc(sizeof(struct myddas_global_stats));
|
||||
#ifdef DEBUG
|
||||
printf ("MALLOC %p %s %d\n",global->myddas_statistics,__FILE__,__LINE__);
|
||||
printf("MALLOC %p %s %d\n", global->myddas_statistics, __FILE__, __LINE__);
|
||||
#endif
|
||||
global->myddas_statistics->stats = NULL;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
/* We first malloc for this struct and the stats struct */
|
||||
/* We first malloc for this struct and the stats struct */
|
||||
#ifdef MYDDAS_STATS
|
||||
global->malloc_called = 2;
|
||||
global->memory_allocated = sizeof(struct myddas_global) + sizeof(struct myddas_global_stats);
|
||||
global->memory_allocated =
|
||||
sizeof(struct myddas_global) + sizeof(struct myddas_global_stats);
|
||||
#else
|
||||
global->malloc_called = 1;
|
||||
global->memory_allocated = sizeof(struct myddas_global);
|
||||
@@ -50,34 +52,32 @@ myddas_init_initialize_myddas(void){
|
||||
|
||||
/* Inserts the new node on the front of the list */
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
MYDDAS_API api,
|
||||
MYDDAS_UTIL_CONNECTION next){
|
||||
myddas_init_initialize_connection(void *conn, void *enviromment, MYDDAS_API api,
|
||||
MYDDAS_UTIL_CONNECTION next) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION new = NULL;
|
||||
MYDDAS_MALLOC(new,struct myddas_list_connection);
|
||||
MYDDAS_MALLOC(new, struct myddas_list_connection);
|
||||
|
||||
if (new == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
if (new == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new->api = api;
|
||||
new->predicates=NULL;
|
||||
new->connection=conn;
|
||||
new->odbc_enviromment=enviromment;
|
||||
new->predicates = NULL;
|
||||
new->connection = conn;
|
||||
new->odbc_enviromment = enviromment;
|
||||
|
||||
/* It saves n queries, doing at once n+1 queries */
|
||||
new->total_number_queries=0; //Default
|
||||
new->actual_number_queries=0;
|
||||
new->total_number_queries = 0; // Default
|
||||
new->actual_number_queries = 0;
|
||||
new->queries = NULL;
|
||||
|
||||
/* List integrity */
|
||||
new->next=next;
|
||||
new->previous=NULL;
|
||||
new->next = next;
|
||||
new->previous = NULL;
|
||||
/* If there's already at least one node
|
||||
on the list */
|
||||
if (next != NULL)
|
||||
next->previous=new;
|
||||
next->previous = new;
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
new->stats = NULL;
|
||||
@@ -88,26 +88,26 @@ myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_init_initialize_predicate(const char *pred_name, int pred_arity,
|
||||
const char *pred_module, MYDDAS_UTIL_PREDICATE next){
|
||||
const char *pred_module,
|
||||
MYDDAS_UTIL_PREDICATE next) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_PREDICATE new = NULL;
|
||||
MYDDAS_MALLOC(new,struct myddas_list_preds);
|
||||
MYDDAS_MALLOC(new, struct myddas_list_preds);
|
||||
|
||||
if (new == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
new->pred_name=pred_name;
|
||||
new->pred_arity=pred_arity;
|
||||
new->pred_module=pred_module;
|
||||
if (new == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new->pred_name = pred_name;
|
||||
new->pred_arity = pred_arity;
|
||||
new->pred_module = pred_module;
|
||||
|
||||
/* List integrity */
|
||||
new->next=next;
|
||||
new->previous=NULL;
|
||||
new->next = next;
|
||||
new->previous = NULL;
|
||||
/* If there's already at least one node
|
||||
on the list */
|
||||
if (next != NULL)
|
||||
next->previous=new;
|
||||
next->previous = new;
|
||||
|
||||
return new;
|
||||
}
|
||||
|
@@ -706,9 +706,6 @@ void
|
||||
init_myddas(void)
|
||||
{
|
||||
CACHE_REGS
|
||||
#if defined MYDDAS_MYSQL
|
||||
Yap_InitBackMYDDAS_MySQLPreds();
|
||||
#endif
|
||||
#if defined MYDDAS_ODBC
|
||||
Yap_InitBackMYDDAS_ODBCPreds();
|
||||
#endif
|
||||
@@ -733,21 +730,6 @@ init_myddas(void)
|
||||
#if defined MYDDAS_TOP_LEVEL && defined MYDDAS_MYSQL // && defined HAVE_LIBREADLINE
|
||||
Yap_InitMYDDAS_TopLevelPreds();
|
||||
#endif
|
||||
#ifdef MYDDAS_MYSQL_INIT
|
||||
if (yap_init->myddas) {
|
||||
Yap_PutValue(AtomMyddasGoal,MkIntegerTerm(yap_init->myddas));
|
||||
|
||||
/* Mandatory Fields */
|
||||
Yap_PutValue(AtomMyddasUser,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_user)));
|
||||
Yap_PutValue(AtomMyddasDB,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_db)));
|
||||
|
||||
/* Non-Mandatory Fields */
|
||||
if (yap_init->myddas_pass != NULL)
|
||||
Yap_PutValue(AtomMyddasPass,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_pass)));
|
||||
if (yap_init->myddas_host != NULL)
|
||||
Yap_PutValue(AtomMyddasHost,MkAtomTerm(Yap_LookupAtom(yap_init->myddas_host)));
|
||||
}
|
||||
#endif
|
||||
#if USE_MYDDAS
|
||||
#define stringify(X) _stringify(X)
|
||||
#define _stringify(X) #X
|
||||
|
@@ -12,374 +12,265 @@
|
||||
#include <mysql/mysql.h>
|
||||
#endif /*MYDDAS_MYSQL*/
|
||||
|
||||
#include "myddas.h"
|
||||
#include "myddas_util.h"
|
||||
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
/* Auxilary function to table_write*/
|
||||
static void
|
||||
n_print(Int , char );
|
||||
#endif
|
||||
|
||||
/* Type: MYSQL->1 ODBC->2*/
|
||||
Short
|
||||
myddas_util_connection_type(void *con){
|
||||
|
||||
MYDDAS_UTIL_CONNECTION con_node =
|
||||
myddas_util_search_connection(con);
|
||||
|
||||
Short myddas_util_connection_type(void *con) {
|
||||
|
||||
MYDDAS_UTIL_CONNECTION con_node = myddas_util_search_connection(con);
|
||||
|
||||
if (con_node == NULL)
|
||||
return 0;
|
||||
|
||||
return con_node->api;
|
||||
// if (con_node->odbc_enviromment != NULL) /* ODBC */
|
||||
// if (con_node->odbc_enviromment != NULL) /* ODBC */
|
||||
// return 2;
|
||||
//else
|
||||
// else
|
||||
// return 1;
|
||||
}
|
||||
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_util_search_predicate(const char *pred_name, Int pred_arity,
|
||||
const char *pred_module){
|
||||
const char *pred_module) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_PREDICATE pred=NULL;
|
||||
MYDDAS_UTIL_CONNECTION top = Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
MYDDAS_UTIL_PREDICATE pred = NULL;
|
||||
MYDDAS_UTIL_CONNECTION top =
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
|
||||
for (;top!=NULL;top=top->next)
|
||||
{
|
||||
if ((pred=myddas_util_find_predicate(pred_name,pred_arity,pred_module,top->predicates)))
|
||||
return pred;
|
||||
}
|
||||
for (; top != NULL; top = top->next) {
|
||||
if ((pred = myddas_util_find_predicate(pred_name, pred_arity, pred_module,
|
||||
top->predicates)))
|
||||
return pred;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* When using this function, we must guarante that this predicate
|
||||
it's unique */
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_add_predicate(const char *pred_name, Int pred_arity,
|
||||
const char *pred_module, void *con){
|
||||
|
||||
MYDDAS_UTIL_CONNECTION node_con =
|
||||
myddas_util_search_connection(con);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE new =
|
||||
myddas_init_initialize_predicate(pred_name,pred_arity,pred_module,node_con->predicates);
|
||||
|
||||
if (new == NULL)
|
||||
{
|
||||
myddas_util_error_message("Could not initialize predicate node",__LINE__,__FILE__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
node_con->predicates=new;
|
||||
return node_con;
|
||||
}
|
||||
const char *pred_module, void *con) {
|
||||
|
||||
void
|
||||
myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE to_delete){
|
||||
MYDDAS_UTIL_CONNECTION node_con = myddas_util_search_connection(con);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE new = myddas_init_initialize_predicate(
|
||||
pred_name, pred_arity, pred_module, node_con->predicates);
|
||||
|
||||
if (new == NULL) {
|
||||
myddas_util_error_message("Could not initialize predicate node", __LINE__,
|
||||
__FILE__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
node_con->predicates = new;
|
||||
return node_con;
|
||||
}
|
||||
|
||||
void myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE to_delete) {
|
||||
CACHE_REGS
|
||||
if (to_delete->next != NULL)
|
||||
to_delete->next->previous = to_delete->previous;
|
||||
if (to_delete->previous != NULL)
|
||||
to_delete->previous->next = to_delete->next;
|
||||
else //First predicate of the predicate list
|
||||
{
|
||||
MYDDAS_UTIL_CONNECTION con_node = Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
for(;con_node != NULL; con_node = con_node->next)
|
||||
if (con_node->predicates == to_delete)
|
||||
break;
|
||||
con_node->predicates = to_delete->next;
|
||||
}
|
||||
MYDDAS_FREE(to_delete,struct myddas_list_preds);
|
||||
else // First predicate of the predicate list
|
||||
{
|
||||
MYDDAS_UTIL_CONNECTION con_node =
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
for (; con_node != NULL; con_node = con_node->next)
|
||||
if (con_node->predicates == to_delete)
|
||||
break;
|
||||
con_node->predicates = to_delete->next;
|
||||
}
|
||||
MYDDAS_FREE(to_delete, struct myddas_list_preds);
|
||||
}
|
||||
|
||||
void
|
||||
myddas_util_delete_connection(void *conn){
|
||||
void myddas_util_delete_connection(void *conn) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION to_delete = myddas_util_search_connection(conn);
|
||||
|
||||
if (to_delete == NULL)
|
||||
|
||||
if (to_delete == NULL)
|
||||
return;
|
||||
else
|
||||
{
|
||||
/* Removes the predicates list */
|
||||
myddas_util_delete_predicate_list(to_delete->predicates);
|
||||
|
||||
else {
|
||||
/* Removes the predicates list */
|
||||
myddas_util_delete_predicate_list(to_delete->predicates);
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
/* Removes the stats list */
|
||||
myddas_stats_delete_stats_list(to_delete->stats);
|
||||
/* Removes the stats list */
|
||||
myddas_stats_delete_stats_list(to_delete->stats);
|
||||
#endif
|
||||
/* List Integrety */
|
||||
/* Is the last element of the list */
|
||||
if ((to_delete->next) != NULL)
|
||||
to_delete->next->previous = to_delete->previous;
|
||||
|
||||
/* Is the first element of the list */
|
||||
if (to_delete == (Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections))
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections = to_delete->next;
|
||||
else
|
||||
to_delete->previous->next=to_delete->next;
|
||||
|
||||
MYDDAS_FREE(to_delete,struct myddas_list_connection);
|
||||
return;
|
||||
}
|
||||
/* List Integrety */
|
||||
/* Is the last element of the list */
|
||||
if ((to_delete->next) != NULL)
|
||||
to_delete->next->previous = to_delete->previous;
|
||||
|
||||
/* Is the first element of the list */
|
||||
if (to_delete == (Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections))
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections = to_delete->next;
|
||||
else
|
||||
to_delete->previous->next = to_delete->next;
|
||||
|
||||
MYDDAS_FREE(to_delete, struct myddas_list_connection);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_search_connection(void *conn){
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_search_connection(void *conn) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION list = Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
|
||||
MYDDAS_UTIL_CONNECTION list =
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
|
||||
#ifdef MYDDAS_STATS
|
||||
if (conn == 0) { /* We want all the statistics */
|
||||
return list;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (;list!=NULL;list=list->next)
|
||||
|
||||
for (; list != NULL; list = list->next)
|
||||
if (list->connection == conn)
|
||||
return list;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_add_connection(void *conn, void *enviromment, MYDDAS_API api){
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION node=NULL;
|
||||
MYDDAS_UTIL_CONNECTION temp=NULL;
|
||||
|
||||
if ((node = myddas_util_search_connection(conn)) != NULL)
|
||||
{
|
||||
return node;
|
||||
}
|
||||
//put the new connection node on the top of the list
|
||||
temp = myddas_init_initialize_connection(conn,enviromment,api,Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections);
|
||||
if (temp == NULL)
|
||||
{
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_add_connection(void *conn, void *enviromment, MYDDAS_API api) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION node = NULL;
|
||||
MYDDAS_UTIL_CONNECTION temp = NULL;
|
||||
|
||||
if ((node = myddas_util_search_connection(conn)) != NULL) {
|
||||
return node;
|
||||
}
|
||||
// put the new connection node on the top of the list
|
||||
temp = myddas_init_initialize_connection(
|
||||
conn, enviromment, api,
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections);
|
||||
if (temp == NULL) {
|
||||
#ifdef DEBUG
|
||||
myddas_util_error_message("Could not initialize connection node",__LINE__,__FILE__);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
myddas_util_error_message("Could not initialize connection node", __LINE__,
|
||||
__FILE__);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections = temp;
|
||||
return Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
}
|
||||
|
||||
#ifdef MYDDAS_ODBC
|
||||
/* This function searches the MYDDAS list for odbc connections
|
||||
If there isn't any, it returns NULL. This is a nice way to know
|
||||
if there is any odbc connections left on the list*/
|
||||
SQLHENV
|
||||
myddas_util_get_odbc_enviromment(SQLHDBC connection){
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_CONNECTION top = Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
|
||||
for (;top != NULL;top=top->next)
|
||||
if (top->connection == ((void *)connection))
|
||||
return top->odbc_enviromment;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
UInt
|
||||
myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con){
|
||||
UInt myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con) {
|
||||
return con->total_number_queries;
|
||||
}
|
||||
|
||||
void
|
||||
myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con,
|
||||
UInt number){
|
||||
void myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con,
|
||||
UInt number) {
|
||||
con->total_number_queries = number;
|
||||
}
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
/* Auxilary function to table_write*/
|
||||
static void
|
||||
n_print(Int n, char c)
|
||||
{
|
||||
for(;n>0;n--) printf("%c",c);
|
||||
static void n_print(Int n, char c) {
|
||||
for (; n > 0; n--)
|
||||
printf("%c", c);
|
||||
}
|
||||
#endif
|
||||
|
||||
void myddas_util_error_message(char *message ,Int line,char *file){
|
||||
void myddas_util_error_message(char *message, Int line, char *file) {
|
||||
#ifdef DEBUG
|
||||
printf ("ERROR: %s at line %d in file %s\n",message,(int)line,file);
|
||||
printf("ERROR: %s at line %d in file %s\n", message, (int)line, file);
|
||||
#else
|
||||
printf ("ERROR: %s\n",message);
|
||||
printf("ERROR: %s\n", message);
|
||||
#endif
|
||||
}
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_util_find_predicate(const char *pred_name, Int pred_arity,
|
||||
const char *pred_module, MYDDAS_UTIL_PREDICATE list){
|
||||
const char *pred_module,
|
||||
MYDDAS_UTIL_PREDICATE list) {
|
||||
|
||||
for(;list != NULL ; list = list->next)
|
||||
if (pred_arity == list->pred_arity &&
|
||||
!strcmp(pred_name,list->pred_name) &&
|
||||
!strcmp(pred_module,list->pred_module))
|
||||
for (; list != NULL; list = list->next)
|
||||
if (pred_arity == list->pred_arity && !strcmp(pred_name, list->pred_name) &&
|
||||
!strcmp(pred_module, list->pred_module))
|
||||
return list;
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
myddas_util_delete_predicate_list(MYDDAS_UTIL_PREDICATE preds_list){
|
||||
void myddas_util_delete_predicate_list(MYDDAS_UTIL_PREDICATE preds_list) {
|
||||
CACHE_REGS
|
||||
MYDDAS_UTIL_PREDICATE to_delete = NULL;
|
||||
|
||||
for (;preds_list != NULL;)
|
||||
{
|
||||
to_delete = preds_list;
|
||||
preds_list = preds_list->next;
|
||||
|
||||
MYDDAS_FREE(to_delete,struct myddas_list_preds);
|
||||
}
|
||||
for (; preds_list != NULL;) {
|
||||
to_delete = preds_list;
|
||||
preds_list = preds_list->next;
|
||||
|
||||
MYDDAS_FREE(to_delete, struct myddas_list_preds);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
void
|
||||
myddas_util_table_write(MYSQL_RES *res_set){
|
||||
|
||||
MYSQL_ROW row;
|
||||
MYSQL_FIELD *fields;
|
||||
Int i,f;
|
||||
|
||||
if (mysql_num_rows(res_set) == 0)
|
||||
{
|
||||
printf ("Empty Set\n");
|
||||
return;
|
||||
}
|
||||
|
||||
f = mysql_num_fields(res_set);
|
||||
|
||||
fields = mysql_fetch_field(res_set);
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("+");
|
||||
if (strlen(fields[i].name)>fields[i].max_length) fields[i].max_length=strlen(fields[i].name);
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("|");
|
||||
printf(" %s ",fields[i].name);
|
||||
n_print(fields[i].max_length - strlen(fields[i].name),' ');
|
||||
}
|
||||
printf("|\n");
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("+");
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
while ((row = mysql_fetch_row(res_set)) != NULL)
|
||||
{
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("|");
|
||||
if (row[i] != NULL)
|
||||
{
|
||||
printf(" %s ",row[i]);
|
||||
n_print(fields[i].max_length - strlen(row[i]),' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" NULL ");
|
||||
n_print(fields[i].max_length - 4,' ');
|
||||
}
|
||||
}
|
||||
printf("|\n");
|
||||
}
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("+");
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
//DELETE THIS WHEN DB_STATS IS COMPLETED
|
||||
MyddasInt
|
||||
get_myddas_top( void ){
|
||||
// DELETE THIS WHEN DB_STATS IS COMPLETED
|
||||
MyddasInt get_myddas_top(void) {
|
||||
CACHE_REGS
|
||||
if (Yap_REGS.MYDDAS_GLOBAL_POINTER == NULL)
|
||||
return 0;
|
||||
return (Int)Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
}
|
||||
|
||||
void *
|
||||
myddas_util_get_pred_next(void *pointer){
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE) pointer;
|
||||
return (void *) (temp->next);
|
||||
void *myddas_util_get_pred_next(void *pointer) {
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE)pointer;
|
||||
return (void *)(temp->next);
|
||||
}
|
||||
|
||||
MyddasInt
|
||||
myddas_util_get_pred_arity(void *pointer){
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE) pointer;
|
||||
MyddasInt myddas_util_get_pred_arity(void *pointer) {
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE)pointer;
|
||||
return temp->pred_arity;
|
||||
}
|
||||
|
||||
const char *
|
||||
myddas_util_get_pred_name(void *pointer){
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE) pointer;
|
||||
const char *myddas_util_get_pred_name(void *pointer) {
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE)pointer;
|
||||
return temp->pred_name;
|
||||
}
|
||||
|
||||
const char *
|
||||
myddas_util_get_pred_module(void *pointer){
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE) pointer;
|
||||
const char *myddas_util_get_pred_module(void *pointer) {
|
||||
MYDDAS_UTIL_PREDICATE temp = (MYDDAS_UTIL_PREDICATE)pointer;
|
||||
return temp->pred_module;
|
||||
}
|
||||
|
||||
void *
|
||||
myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION node){
|
||||
void *myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION node) {
|
||||
return (void *)(node->predicates);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void check_int( void ){
|
||||
void check_int(void) {
|
||||
CACHE_REGS
|
||||
|
||||
MYDDAS_UTIL_PREDICATE pred = NULL;
|
||||
MYDDAS_UTIL_CONNECTION top = Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
for ( ; top!=NULL ; top=top->next)
|
||||
{
|
||||
printf ("***************\n");
|
||||
printf ("===== top =====\n");
|
||||
printf ("======= %p =====\n",top);
|
||||
printf ("CONN: = %p =====\n",top->connection);
|
||||
printf ("ENV : = %p =====\n",top->odbc_enviromment);
|
||||
printf ("PRED: = %p =====\n",top->predicates);
|
||||
printf ("======= %p =====\n",top->previous);
|
||||
printf ("======= %p =====\n",top->next);
|
||||
if (top->predicates != NULL)
|
||||
{
|
||||
printf ("\t******\n");
|
||||
printf ("\t===== PREDICATES =====\n");
|
||||
for (pred = top->predicates ; pred != NULL ; pred = pred->next)
|
||||
{
|
||||
printf ("\t--------------\n");
|
||||
printf ("\t===== %p =====\n",pred);
|
||||
printf ("\t===== %s =====\n",pred->pred_name);
|
||||
printf ("\t===== %d =====\n",pred->pred_arity);
|
||||
printf ("\t===== %s =====\n",pred->pred_module);
|
||||
printf ("\t===== %p =====\n",pred->previous);
|
||||
printf ("\t===== %p =====\n",pred->next);
|
||||
}
|
||||
}
|
||||
|
||||
MYDDAS_UTIL_CONNECTION top =
|
||||
Yap_REGS.MYDDAS_GLOBAL_POINTER->myddas_top_connections;
|
||||
for (; top != NULL; top = top->next) {
|
||||
printf("***************\n");
|
||||
printf("===== top =====\n");
|
||||
printf("======= %p =====\n", top);
|
||||
printf("CONN: = %p =====\n", top->connection);
|
||||
printf("ENV : = %p =====\n", top->odbc_enviromment);
|
||||
printf("PRED: = %p =====\n", top->predicates);
|
||||
printf("======= %p =====\n", top->previous);
|
||||
printf("======= %p =====\n", top->next);
|
||||
if (top->predicates != NULL) {
|
||||
printf("\t******\n");
|
||||
printf("\t===== PREDICATES =====\n");
|
||||
for (pred = top->predicates; pred != NULL; pred = pred->next) {
|
||||
printf("\t--------------\n");
|
||||
printf("\t===== %p =====\n", pred);
|
||||
printf("\t===== %s =====\n", pred->pred_name);
|
||||
printf("\t===== %d =====\n", pred->pred_arity);
|
||||
printf("\t===== %s =====\n", pred->pred_module);
|
||||
printf("\t===== %p =====\n", pred->previous);
|
||||
printf("\t===== %p =====\n", pred->next);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
@@ -1,32 +1,14 @@
|
||||
|
||||
#include "myddas_structs.h"
|
||||
|
||||
void myddas_util_error_message(char *message ,Int line,char *file);
|
||||
void myddas_util_error_message(char *message, Int line, char *file);
|
||||
|
||||
/* Search for the predicate in the given predicate list*/
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_search_connection(void *conn);
|
||||
UInt myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *conn,void *enviromment,
|
||||
MYDDAS_API api,
|
||||
MYDDAS_UTIL_CONNECTION next);
|
||||
void myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con,
|
||||
UInt number);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_add_connection(void *conn, void *enviromment, MYDDAS_API api);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_init_initialize_predicate(const char *pred_name, int pred_arity,
|
||||
const char *pred_module, MYDDAS_UTIL_PREDICATE next);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_util_find_predicate(const char *pred_name, Int pred_arity,
|
||||
const char *pred_module, MYDDAS_UTIL_PREDICATE list);
|
||||
|
||||
UInt
|
||||
myddas_util_get_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con);
|
||||
|
||||
void
|
||||
myddas_util_set_total_multi_queries_number(MYDDAS_UTIL_CONNECTION con, UInt number);
|
||||
//void myddas_util_table_write(MYSQL_RES *res_set);
|
||||
|
||||
void *myddas_util_get_pred_next(void *pointer);
|
||||
|
||||
@@ -34,8 +16,30 @@ MyddasInt myddas_util_get_pred_arity(void *pointer);
|
||||
|
||||
const char *myddas_util_get_pred_name(void *pointer);
|
||||
|
||||
void myddas_util_delete_predicate(MYDDAS_UTIL_PREDICATE to_delete);
|
||||
|
||||
const char *myddas_util_get_pred_module(void *pointer);
|
||||
|
||||
void *myddas_util_get_list_pred(MYDDAS_UTIL_CONNECTION node);
|
||||
|
||||
void myddas_util_delete_predicate_list(MYDDAS_UTIL_PREDICATE preds_list);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_search_connection(void *con);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE myddas_util_find_predicate(const char *pred_name,
|
||||
Int pred_arity,
|
||||
const char *pred_module,
|
||||
MYDDAS_UTIL_PREDICATE list);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION myddas_util_add_connection(void *conn, void *enviromment,
|
||||
MYDDAS_API api);
|
||||
void myddas_util_delete_connection(void *conn);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_init_initialize_predicate(const char *pred_name, int pred_arity,
|
||||
const char *pred_module,
|
||||
MYDDAS_UTIL_PREDICATE next);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *conn, void *enviromment, MYDDAS_API api,
|
||||
MYDDAS_UTIL_CONNECTION next);
|
||||
|
@@ -1,6 +1,21 @@
|
||||
#include <string.h>
|
||||
p#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "Yap.h"
|
||||
#include "cut_c.h"
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_init_initialize_connection(void *conn, void *enviromment, MYDDAS_API api,
|
||||
MYDDAS_UTIL_CONNECTION next);
|
||||
|
||||
MYDDAS_UTIL_CONNECTION
|
||||
myddas_util_add_connection(void *conn, void *enviromment, MYDDAS_API api);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_init_initialize_predicate(const char *pred_name, int pred_arity,
|
||||
const char *pred_module,
|
||||
MYDDAS_UTIL_PREDICATE next);
|
||||
|
||||
MYDDAS_UTIL_PREDICATE
|
||||
myddas_util_find_predicate(const char *pred_name, Int pred_arity,
|
||||
const char *pred_module, MYDDAS_UTIL_PREDICATE list);
|
||||
|
@@ -1,25 +0,0 @@
|
||||
#ifndef MYDDAS_WKB_H_
|
||||
#define MYDDAS_WKB_H_
|
||||
|
||||
typedef char byte;
|
||||
|
||||
typedef unsigned int uint32;
|
||||
|
||||
#define WKBXDR 0
|
||||
#define WKBNDR 1
|
||||
|
||||
#define WKBMINTYPE 1
|
||||
|
||||
#define WKBPOINT 1
|
||||
#define WKBLINESTRING 2
|
||||
#define WKBPOLYGON 3
|
||||
#define WKBMULTIPOINT 4
|
||||
#define WKBMULTILINESTRING 5
|
||||
#define WKBMULTIPOLYGON 6
|
||||
#define WKBGEOMETRYCOLLECTION 7
|
||||
|
||||
#define WKBMAXTYPE 7
|
||||
|
||||
#define WKBGEOMETRY 0
|
||||
|
||||
#endif /* MYDDAS_WKB_H_ */
|
@@ -1,382 +0,0 @@
|
||||
#if defined MYDDAS_MYSQL
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "Yap.h"
|
||||
#include <netinet/in.h>
|
||||
#include "myddas_wkb.h"
|
||||
#include "myddas_wkb2prolog.h"
|
||||
|
||||
static void readswap4(uint32 *buf);
|
||||
static void readswap8(double *buf);
|
||||
|
||||
static byte get_hostbyteorder(void);
|
||||
static byte get_inbyteorder(void);
|
||||
static uint32 get_wkbType(void);
|
||||
static Term get_point(char *functor USES_REGS);
|
||||
static Term get_linestring(char *functor);
|
||||
static Term get_polygon(char *functor);
|
||||
static Term get_geometry(uint32 type);
|
||||
|
||||
static int swaporder;
|
||||
static byte inbyteorder, hostbyteorder;
|
||||
static byte *cursor;
|
||||
|
||||
Term wkb2prolog(char *wkb) {
|
||||
uint32 type;
|
||||
|
||||
cursor = wkb;
|
||||
|
||||
/*ignore the SRID 4 bytes*/
|
||||
cursor += 4;
|
||||
|
||||
/*byteorder*/
|
||||
hostbyteorder = get_hostbyteorder();
|
||||
inbyteorder = get_inbyteorder();
|
||||
|
||||
swaporder = 0;
|
||||
if ( hostbyteorder != inbyteorder )
|
||||
swaporder = 1;
|
||||
|
||||
type = get_wkbType();
|
||||
|
||||
return get_geometry(type);
|
||||
}
|
||||
|
||||
static byte get_hostbyteorder(void){
|
||||
uint16_t host = 5;
|
||||
uint16_t net;
|
||||
|
||||
net = htons(host);
|
||||
if ( net == host )
|
||||
return(WKBXDR);
|
||||
else
|
||||
return(WKBNDR);
|
||||
}
|
||||
|
||||
static byte get_inbyteorder(void){
|
||||
byte b = cursor[0];
|
||||
|
||||
if (b != WKBNDR && b != WKBXDR) {
|
||||
fprintf(stderr, "Unknown byteorder: %d\n",b);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
cursor++;
|
||||
|
||||
return(b);
|
||||
}
|
||||
|
||||
static uint32 get_wkbType(void){
|
||||
uint32 u;
|
||||
|
||||
/* read the type */
|
||||
readswap4(&u);
|
||||
|
||||
if (u > WKBMAXTYPE || u < WKBMINTYPE) {
|
||||
fprintf(stderr, "Unknown type: %d\n",u);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
return(u);
|
||||
}
|
||||
|
||||
static void readswap4(uint32 *buf){
|
||||
((byte *) buf)[0] = cursor[0];
|
||||
((byte *) buf)[1] = cursor[1];
|
||||
((byte *) buf)[2] = cursor[2];
|
||||
((byte *) buf)[3] = cursor[3];
|
||||
|
||||
if ( swaporder ) {
|
||||
if ( inbyteorder == WKBXDR ) {
|
||||
*buf = (uint32)ntohl((u_long)*buf);
|
||||
} else {
|
||||
byte u[4];
|
||||
|
||||
u[0] = ((byte *) buf)[3];
|
||||
u[1] = ((byte *) buf)[2];
|
||||
u[2] = ((byte *) buf)[1];
|
||||
u[3] = ((byte *) buf)[0];
|
||||
((byte *) buf)[0] = u[0];
|
||||
((byte *) buf)[1] = u[1];
|
||||
((byte *) buf)[2] = u[2];
|
||||
((byte *) buf)[3] = u[3];
|
||||
}
|
||||
}
|
||||
|
||||
cursor += 4;
|
||||
}
|
||||
|
||||
static void readswap8(double *buf) {
|
||||
((byte *) buf)[0] = cursor[0];
|
||||
((byte *) buf)[1] = cursor[1];
|
||||
((byte *) buf)[2] = cursor[2];
|
||||
((byte *) buf)[3] = cursor[3];
|
||||
((byte *) buf)[4] = cursor[4];
|
||||
((byte *) buf)[5] = cursor[5];
|
||||
((byte *) buf)[6] = cursor[6];
|
||||
((byte *) buf)[7] = cursor[7];
|
||||
|
||||
if ( swaporder ) {
|
||||
if ( inbyteorder == WKBXDR ) {
|
||||
u_long u[2];
|
||||
|
||||
u[0] = ((u_long *) buf)[0];
|
||||
u[1] = ((u_long *) buf)[1];
|
||||
((u_long *) buf)[1] = ntohl(u[0]);
|
||||
((u_long *) buf)[0] = ntohl(u[1]);
|
||||
} else {
|
||||
byte u[8];
|
||||
|
||||
u[0] = ((byte *) buf)[7];
|
||||
u[1] = ((byte *) buf)[6];
|
||||
u[2] = ((byte *) buf)[5];
|
||||
u[3] = ((byte *) buf)[4];
|
||||
u[4] = ((byte *) buf)[3];
|
||||
u[5] = ((byte *) buf)[2];
|
||||
u[6] = ((byte *) buf)[1];
|
||||
u[7] = ((byte *) buf)[0];
|
||||
((byte *) buf)[0] = u[0];
|
||||
((byte *) buf)[1] = u[1];
|
||||
((byte *) buf)[2] = u[2];
|
||||
((byte *) buf)[3] = u[3];
|
||||
((byte *) buf)[4] = u[4];
|
||||
((byte *) buf)[5] = u[5];
|
||||
((byte *) buf)[6] = u[6];
|
||||
((byte *) buf)[7] = u[7];
|
||||
}
|
||||
}
|
||||
|
||||
cursor += 8;
|
||||
}
|
||||
|
||||
static Term get_point(char *func USES_REGS){
|
||||
Term args[2];
|
||||
Functor functor;
|
||||
double d;
|
||||
|
||||
if(func == NULL)
|
||||
/*functor "," => (_,_)*/
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom(","), 2);
|
||||
else
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom(func), 2);
|
||||
|
||||
/* read the X */
|
||||
readswap8(&d);
|
||||
args[0] = MkFloatTerm(d);
|
||||
|
||||
/* read the Y */
|
||||
readswap8(&d);
|
||||
args[1] = MkFloatTerm(d);
|
||||
|
||||
return Yap_MkApplTerm(functor, 2, args);
|
||||
}
|
||||
|
||||
static Term get_linestring(char *func){
|
||||
CACHE_REGS
|
||||
|
||||
Term *c_list;
|
||||
Term list;
|
||||
Functor functor;
|
||||
uint32 n;
|
||||
int i;
|
||||
|
||||
/* read the number of vertices */
|
||||
readswap4(&n);
|
||||
|
||||
/* space for arguments */
|
||||
c_list = (Term *) calloc(sizeof(Term),n);
|
||||
|
||||
for ( i = 0; i < n; i++) {
|
||||
c_list[i] = get_point(NULL PASS_REGS);
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
if(func == NULL)
|
||||
return list;
|
||||
else{
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom(func), 1);
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
}
|
||||
}
|
||||
|
||||
static Term get_polygon(char *func){
|
||||
CACHE_REGS
|
||||
|
||||
uint32 r;
|
||||
int i;
|
||||
Functor functor;
|
||||
Term *c_list;
|
||||
Term list;
|
||||
|
||||
/* read the number of rings */
|
||||
readswap4(&r);
|
||||
|
||||
/* space for rings */
|
||||
c_list = (Term *) calloc(sizeof(Term),r);
|
||||
|
||||
for ( i = 0; i < r; i++ ) {
|
||||
c_list[i] = get_linestring(NULL);
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = r - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
if(func == NULL)
|
||||
return list;
|
||||
else{
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom("polygon"), 1);
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
}
|
||||
}
|
||||
|
||||
static Term get_geometry(uint32 type){
|
||||
CACHE_REGS
|
||||
|
||||
switch(type) {
|
||||
case WKBPOINT:
|
||||
return get_point("point" PASS_REGS);
|
||||
case WKBLINESTRING:
|
||||
return get_linestring("linestring");
|
||||
case WKBPOLYGON:
|
||||
return get_polygon("polygon");
|
||||
case WKBMULTIPOINT:
|
||||
{
|
||||
uint32 n;
|
||||
int i;
|
||||
Functor functor;
|
||||
Term *c_list;
|
||||
Term list;
|
||||
|
||||
|
||||
/* read the number of points */
|
||||
readswap4(&n);
|
||||
|
||||
/* space for points */
|
||||
c_list = (Term *) calloc(sizeof(Term),n);
|
||||
|
||||
for ( i = 0; i < n; i++ ) {
|
||||
/* read (and ignore) the byteorder and type */
|
||||
get_inbyteorder();
|
||||
get_wkbType();
|
||||
|
||||
c_list[i] = get_point(NULL PASS_REGS);
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom("multipoint"), 1);
|
||||
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
|
||||
}
|
||||
case WKBMULTILINESTRING:
|
||||
{
|
||||
uint32 n;
|
||||
int i;
|
||||
Functor functor;
|
||||
Term *c_list;
|
||||
Term list;
|
||||
|
||||
|
||||
/* read the number of polygons */
|
||||
readswap4(&n);
|
||||
|
||||
/* space for polygons*/
|
||||
c_list = (Term *) calloc(sizeof(Term),n);
|
||||
|
||||
for ( i = 0; i < n; i++ ) {
|
||||
/* read (and ignore) the byteorder and type */
|
||||
get_inbyteorder();
|
||||
get_wkbType();
|
||||
|
||||
c_list[i] = get_linestring(NULL);
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom("multilinestring"), 1);
|
||||
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
|
||||
}
|
||||
case WKBMULTIPOLYGON:
|
||||
{
|
||||
uint32 n;
|
||||
int i;
|
||||
Functor functor;
|
||||
Term *c_list;
|
||||
Term list;
|
||||
|
||||
|
||||
/* read the number of polygons */
|
||||
readswap4(&n);
|
||||
|
||||
/* space for polygons*/
|
||||
c_list = (Term *) calloc(sizeof(Term),n);
|
||||
|
||||
for ( i = 0; i < n; i++ ) {
|
||||
/* read (and ignore) the byteorder and type */
|
||||
get_inbyteorder();
|
||||
get_wkbType();
|
||||
|
||||
c_list[i] = get_polygon(NULL);
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom("multipolygon"), 1);
|
||||
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
|
||||
}
|
||||
case WKBGEOMETRYCOLLECTION:
|
||||
{
|
||||
uint32 n;
|
||||
int i;
|
||||
Functor functor;
|
||||
Term *c_list;
|
||||
Term list;
|
||||
|
||||
/* read the number of geometries */
|
||||
readswap4(&n);
|
||||
|
||||
/* space for geometries*/
|
||||
c_list = (Term *) calloc(sizeof(Term),n);
|
||||
|
||||
|
||||
for ( i = 0; i < n; i++ ) {
|
||||
get_inbyteorder();
|
||||
c_list[i] = get_geometry(get_wkbType());
|
||||
}
|
||||
|
||||
list = MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
list = MkPairTerm(c_list[i],list);
|
||||
}
|
||||
|
||||
functor = Yap_MkFunctor(Yap_LookupAtom("geometrycollection"), 1);
|
||||
|
||||
return Yap_MkApplTerm(functor, 1, &list);
|
||||
}
|
||||
}
|
||||
|
||||
return MkAtomTerm(Yap_LookupAtom("[]"));
|
||||
}
|
||||
|
||||
#endif /*MYDDAS_MYSQL*/
|
@@ -1,6 +0,0 @@
|
||||
#ifndef MYDDAS_WKB2PROLOG_H_
|
||||
# define MYDDAS_WKB2PROLOG_H_
|
||||
|
||||
Term wkb2prolog(char *wkb) ;
|
||||
|
||||
#endif /* !MYDDAS_WKB2PROLOG_H_ */
|
@@ -1,7 +1,10 @@
|
||||
|
||||
set( YAPMYSQL_SOURCES
|
||||
myddas_mysql.c
|
||||
)
|
||||
myddas_util.c
|
||||
myddas_util.c
|
||||
myddas_wkb2prolog.c
|
||||
)
|
||||
|
||||
set(SO_MAJOR 1)
|
||||
set(SO_MINOR 0)
|
||||
@@ -19,12 +22,8 @@ macro_log_feature (MYSQL_FOUND "MySQL"
|
||||
# MYSQL_FOUND - True if MySQL found.
|
||||
add_definitions (-DMYDDAS_MYSQL=1)
|
||||
add_library (Yapmysql SHARED ${YAPMYSQL_SOURCES})
|
||||
target_link_libraries(Yapmysql myddas libYap)
|
||||
target_link_libraries(Yapmysql ${MYSQL_LIBRARIES} libYap)
|
||||
include_directories (${MYSQL_INCLUDE_DIR} ..)
|
||||
else()
|
||||
add_definitions (-DMYDDAS_MYSQL=0)
|
||||
endif (MYSQL_FOUND)
|
||||
|
||||
set_target_properties (Yapmysql PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
|
||||
@@ -36,6 +35,10 @@ set_target_properties (Yapmysql PROPERTIES
|
||||
LIBRARY DESTINATION ${libdir}
|
||||
)
|
||||
|
||||
else()
|
||||
add_definitions (-DMYDDAS_MYSQL=0)
|
||||
endif (MYSQL_FOUND)
|
||||
|
||||
cmake_dependent_option (USE_MYDDAS_top_level
|
||||
"enable the MYDDAS top-level (REPL) support for MySQL" OFF
|
||||
'USE_MYDDAS AND MYSQL_FOUND' OFF)
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#include "Yatom.h"
|
||||
#include "cut_c.h"
|
||||
#include "myddas_structs.h"
|
||||
#include "myddas_util.h"
|
||||
#ifdef MYDDAS_STATS
|
||||
#include "myddas_statistics.h"
|
||||
#endif
|
||||
|
@@ -15,87 +15,75 @@
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
#include "Yap.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <mysql/mysql.h>
|
||||
#include <myddas_util.h>
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
/* Auxilary function to table_write*/
|
||||
static void n_print(Int, char);
|
||||
#endif
|
||||
|
||||
/* Auxilary function to table_write*/
|
||||
static void
|
||||
n_print(Int , char );
|
||||
|
||||
/* Auxilary function to table_write*/
|
||||
static void
|
||||
n_print(Int n, char c)
|
||||
{
|
||||
for(;n>0;n--) printf("%c",c);
|
||||
static void n_print(Int n, char c) {
|
||||
for (; n > 0; n--)
|
||||
printf("%c", c);
|
||||
}
|
||||
|
||||
void
|
||||
myddas_util_table_write(MYSQL_RES *res_set){
|
||||
|
||||
void myddas_util_table_write(MYSQL_RES *res_set) {
|
||||
|
||||
MYSQL_ROW row;
|
||||
MYSQL_FIELD *fields;
|
||||
Int i,f;
|
||||
Int i, f;
|
||||
|
||||
if (mysql_num_rows(res_set) == 0)
|
||||
{
|
||||
printf ("Empty Set\n");
|
||||
return;
|
||||
}
|
||||
if (mysql_num_rows(res_set) == 0) {
|
||||
printf("Empty Set\n");
|
||||
return;
|
||||
}
|
||||
|
||||
f = mysql_num_fields(res_set);
|
||||
|
||||
fields = mysql_fetch_field(res_set);
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
for (i = 0; i < f; i++) {
|
||||
printf("+");
|
||||
if (strlen(fields[i].name)>fields[i].max_length) fields[i].max_length=strlen(fields[i].name);
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
if (strlen(fields[i].name) > fields[i].max_length)
|
||||
fields[i].max_length = strlen(fields[i].name);
|
||||
n_print(fields[i].max_length + 2, '-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
|
||||
for (i = 0; i < f; i++) {
|
||||
printf("|");
|
||||
printf(" %s ",fields[i].name);
|
||||
n_print(fields[i].max_length - strlen(fields[i].name),' ');
|
||||
}
|
||||
printf(" %s ", fields[i].name);
|
||||
n_print(fields[i].max_length - strlen(fields[i].name), ' ');
|
||||
}
|
||||
printf("|\n");
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
|
||||
for (i = 0; i < f; i++) {
|
||||
printf("+");
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
n_print(fields[i].max_length + 2, '-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
while ((row = mysql_fetch_row(res_set)) != NULL)
|
||||
{
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("|");
|
||||
if (row[i] != NULL)
|
||||
{
|
||||
printf(" %s ",row[i]);
|
||||
n_print(fields[i].max_length - strlen(row[i]),' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" NULL ");
|
||||
n_print(fields[i].max_length - 4,' ');
|
||||
}
|
||||
}
|
||||
printf("|\n");
|
||||
}
|
||||
|
||||
for(i=0;i<f;i++)
|
||||
{
|
||||
printf("+");
|
||||
n_print(fields[i].max_length+2,'-');
|
||||
|
||||
while ((row = mysql_fetch_row(res_set)) != NULL) {
|
||||
for (i = 0; i < f; i++) {
|
||||
printf("|");
|
||||
if (row[i] != NULL) {
|
||||
printf(" %s ", row[i]);
|
||||
n_print(fields[i].max_length - strlen(row[i]), ' ');
|
||||
} else {
|
||||
printf(" NULL ");
|
||||
n_print(fields[i].max_length - 4, ' ');
|
||||
}
|
||||
}
|
||||
printf("|\n");
|
||||
}
|
||||
|
||||
for (i = 0; i < f; i++) {
|
||||
printf("+");
|
||||
n_print(fields[i].max_length + 2, '-');
|
||||
}
|
||||
printf("+\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -806,6 +806,8 @@
|
||||
]).
|
||||
|
||||
#ifdef MYDDAS_MYSQL
|
||||
:- load_foreign_files([], [], init_mysql).
|
||||
|
||||
:- use_module(myddas_mysql,[
|
||||
db_my_result_set/1,
|
||||
db_datalog_describe/1,
|
||||
|
@@ -21,16 +21,16 @@ if (POSTGRES_FOUND)
|
||||
add_definitions (-DMYDDAS_POSTGRES=1)
|
||||
target_link_libraries(Yappostgres libYap ${POSTGRES_LIBRARIES})
|
||||
include_directories (${POSTGRES_INCLUDE_DIRECTORIES} ..)
|
||||
else()
|
||||
add_definitions (-DMYDDAS_POSTGRES=0)
|
||||
endif (POSTGRES_FOUND)
|
||||
|
||||
set_target_properties (Yappostgres PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
|
||||
SOVERSION ${SO_MAJOR}
|
||||
set_target_properties (Yappostgres PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
|
||||
SOVERSION ${SO_MAJOR}
|
||||
)
|
||||
|
||||
install(TARGETS Yappostgres
|
||||
LIBRARY DESTINATION ${libdir}
|
||||
)
|
||||
else()
|
||||
add_definitions (-DMYDDAS_POSTGRES=0)
|
||||
endif (POSTGRES_FOUND)
|
||||
|
||||
|
@@ -3,7 +3,6 @@ set( YAPSQLITE3_SOURCES
|
||||
myddas_sqlite3.c
|
||||
)
|
||||
|
||||
add_library (Yapsqlite3 SHARED ${YAPSQLITE3_SOURCES})
|
||||
macro_optional_find_package(SQLITE3 ON)
|
||||
|
||||
macro_log_feature (SQLITE3_FOUND "Sqlite3"
|
||||
@@ -14,19 +13,19 @@ if (SQLITE3_FOUND)
|
||||
# SQLITE3_INCLUDE_DIRECTORIES, where to find sql.h
|
||||
# SQLITE3_LIBRARIES, the libraries to link against to use SQLITE3
|
||||
# SQLITE3_FOUND. If false, you cannot build anything that requires Sqlite3.
|
||||
add_definitions (target PUBLIC YapMyddasUtils Yapsqlite3 MYDDAS_SQLITE3=1)
|
||||
add_library (Yapsqlite3 SHARED ${YAPSQLITE3_SOURCES})
|
||||
add_definitions (-DMYDDAS_SQLITE3=1)
|
||||
target_link_libraries(Yapsqlite3 ${SQLITE3_LIBRARIES} libYap)
|
||||
include_directories (${SQLITE3_INCLUDE_DIRECTORIES} ..)
|
||||
include_directories (${SQLITE3_INCLUDE_DIRECTORIES} .. )
|
||||
|
||||
endif (SQLITE3_FOUND)
|
||||
|
||||
set_target_properties (Yapsqlite3 PROPERTIES
|
||||
set_target_properties (Yapsqlite3 PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON
|
||||
VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}"
|
||||
SOVERSION ${SO_MAJOR}
|
||||
)
|
||||
)
|
||||
|
||||
install(TARGETS Yapsqlite3
|
||||
LIBRARY DESTINATION ${libdir}
|
||||
)
|
||||
|
||||
endif (SQLITE3_FOUND)
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user