blob: 9ffe011b48968929f20c5e6a22a0014f0fcc30e3 [file] [log] [blame]
diff -NurdB libgda-1.2.4/configure.in libgda-1.2.4-patched/configure.in
--- libgda-1.2.4/configure.in 2007-01-09 07:51:03.000000000 -0500
+++ libgda-1.2.4-patched/configure.in 2007-01-16 23:38:28.000000000 -0500
@@ -440,45 +440,23 @@
AC_MSG_WARN(tds backend not used)
else
AC_MSG_CHECKING(for freetds version)
- freetdsvercheck="`grep \"^#define \(VERSION_NO \|TDS_VERSION_NO \)\" $freetds_incdir/tdsver.h|sed 's|^.*"\(.*\)"|\1|'`"
+ freetdsvercheck="`grep \"^#define \(VERSION_NO \|TDS_VERSION_NO \)\" $freetds_incdir/tdsver.h|sed 's|^.*".*v\(.*\)"|\1|'`"
if test "x$freetdsvercheck" = "x"
then
AC_MSG_WARN(freetds version check failed - backend not used)
freetdsdir=""
freetds_incdir=""
else
- case "$freetdsvercheck" in
- *v0.5*) AC_MSG_RESULT($freetdsvercheck - using v0.5x api)
- AC_DEFINE(HAVE_FREETDS_VER0_5X, 1, [Have freetds v0.5x API])
- FREETDS_CFLAGS="-I${freetds_incdir}"
- FREETDS_LIBS="-L${freetdsdir}/lib -ltds"
- AC_DEFINE(HAVE_FREETDS, 1, [Have freetds])
- ;;
- *v0.60) AC_MSG_RESULT($freetdsvercheck - using v0.60 api)
- AC_DEFINE(HAVE_FREETDS_VER0_60, 1, [Have freetds v0.60 API])
- FREETDS_CFLAGS="-I${freetds_incdir}"
- FREETDS_LIBS="-L${freetdsdir}/lib -ltds"
- AC_DEFINE(HAVE_FREETDS, 1, [Have freetds])
- ;;
- *v0.6[[3-9]]*) AC_MSG_RESULT($freetdsvercheck - using v0.63 api)
- AC_DEFINE(HAVE_FREETDS_VER0_63, 1, [Have freetds v0.63 API])
- AC_DEFINE(HAVE_FREETDS_VER0_6X, 1, [Have freetds v0.6x API])
- FREETDS_CFLAGS="-I${freetds_incdir}"
- FREETDS_LIBS="-L${freetdsdir}/lib -ltds"
- AC_DEFINE(HAVE_FREETDS, 1, [Have freetds])
- ;;
- *v0.6*) AC_MSG_RESULT($freetdsvercheck - using v0.6x api)
- AC_DEFINE(HAVE_FREETDS_VER0_6X, 1, [Have freetds v0.6x API])
- FREETDS_CFLAGS="-I${freetds_incdir}"
- FREETDS_LIBS="-L${freetdsdir}/lib -ltds"
- AC_DEFINE(HAVE_FREETDS, 1, [Have freetds])
- ;;
- *) AC_MSG_WARN($freetdsvercheck not supported - backend not used)
- freetdsdir=""
- freetds_incdir=""
- ;;
- esac
-
+ AC_MSG_RESULT($freetdsvercheck)
+ FREETDS_CFLAGS="-I${freetds_incdir}"
+ FREETDS_LIBS="-L${freetdsdir}/lib -ltds"
+ AC_DEFINE(HAVE_FREETDS, 1, [Have freetds])
+
+ freetds_version_major="`echo $freetdsvercheck|sed 's:^\([[^.]]*\).*:\1:'`"
+ freetds_version_minor="`echo $freetdsvercheck|sed 's:^[[^.]]*\.\([[^.]]*\).*:\1:'`"
+
+ AC_DEFINE_UNQUOTED(FREETDS_VERSION_MAJOR, [$freetds_version_major])
+ AC_DEFINE_UNQUOTED(FREETDS_VERSION_MINOR, [$freetds_version_minor])
fi
fi
fi
diff -NurdB libgda-1.2.4/providers/freetds/gda-freetds-provider.c libgda-1.2.4-patched/providers/freetds/gda-freetds-provider.c
--- libgda-1.2.4/providers/freetds/gda-freetds-provider.c 2007-01-09 07:50:54.000000000 -0500
+++ libgda-1.2.4-patched/providers/freetds/gda-freetds-provider.c 2007-01-16 23:52:17.000000000 -0500
@@ -103,7 +103,7 @@
const gint col,
const gint row);
-#ifdef HAVE_FREETDS_VER0_5X
+#if FREETDS_VERSION < 6000
static gboolean tds_cbs_initialized = FALSE;
extern int (*g_tds_msg_handler)();
extern int (*g_tds_err_handler)();
@@ -116,7 +116,7 @@
static int gda_freetds_provider_tds_handle_message (void *aStruct,
void *bStruct,
const gboolean is_err_msg);
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
static int gda_freetds_provider_tds_handle_info_msg (TDSCONTEXT *,
TDSSOCKET *,
TDSMSGINFO *);
@@ -252,8 +252,12 @@
tds_set_packet(tds_cnc->login, 512);
/* Version 0.60 api uses context additionaly */
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
+#if FREETDS_VERSION >= 6400
+ tds_cnc->ctx = tds_alloc_context(NULL);
+#else
tds_cnc->ctx = tds_alloc_context();
+#endif
if (! tds_cnc->ctx) {
gda_log_error (_("Allocating tds context failed."));
gda_freetds_free_connection_data (tds_cnc);
@@ -267,9 +271,9 @@
#endif
/* establish connection; change in 0.6x api */
-#if defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION == 6000
tds_cnc->tds = tds_connect(tds_cnc->login, tds_cnc->ctx, NULL);
-#elif defined(HAVE_FREETDS_VER0_6X)
+#elif FREETDS_VERSION > 6000
tds_cnc->tds = tds_alloc_socket(tds_cnc->ctx, 512);
if (! tds_cnc->tds) {
gda_log_error (_("Allocating tds socket failed."));
@@ -297,9 +301,9 @@
}
/* try to receive connection info for sanity check */
-#if defined(HAVE_FREETDS_VER0_6X)
+#if FREETDS_VERSION > 6000
/* do nothing */
-#elif defined(HAVE_FREETDS_VER0_60)
+#elif FREETDS_VERSION == 6000
tds_cnc->config = tds_get_config(tds_cnc->tds, tds_cnc->login, tds_cnc->ctx->locale);
#else
tds_cnc->config = tds_get_config(tds_cnc->tds, tds_cnc->login);
@@ -357,9 +361,9 @@
tds_cnc->database = NULL;
}
if (tds_cnc->config) {
-#ifdef HAVE_FREETDS_VER0_63
+#if FREETDS_VERSION >= 6300
tds_free_connection (tds_cnc->config);
-#elif defined(HAVE_FREETDS_VER0_6X)
+#elif FREETDS_VERSION > 6000
tds_free_connect (tds_cnc->config);
#else
tds_free_config(tds_cnc->config);
@@ -372,7 +376,7 @@
tds_free_socket (tds_cnc->tds);
tds_cnc->tds = NULL;
}
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
if (tds_cnc->ctx) {
/* Clear callback handler */
tds_cnc->ctx->msg_handler = NULL;
@@ -784,7 +788,7 @@
{
GdaFreeTDSConnectionData *tds_cnc;
GdaError *error;
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
int result_type = 0;
#endif
@@ -804,9 +808,11 @@
}
/* there should not be any result tokens */
-#if defined(HAVE_FREETDS_VER0_63)
+#if FREETDS_VERSION >= 6400
+ while ((tds_cnc->rc = tds_process_tokens (tds_cnc->tds, &tds_cnc->result_type, NULL, TDS_RETURN_ROWFMT | TDS_RETURN_COMPUTEFMT | TDS_RETURN_DONE | TDS_STOPAT_ROW | TDS_STOPAT_COMPUTE | TDS_RETURN_PROC))
+#elif FREETDS_VERSION >= 6200
while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds, &tds_cnc->result_type, NULL))
-#elif defined(HAVE_FREETDS_VER0_6X)
+#elif FREETDS_VERSION > 6000
while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds, &tds_cnc->result_type))
#else
while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds))
@@ -1006,7 +1012,7 @@
provider_class->supports = gda_freetds_provider_supports;
provider_class->get_schema = gda_freetds_provider_get_schema;
-#ifdef HAVE_FREETDS_VER0_5X
+#if FREETDS_VERSION < 6000
if (tds_cbs_initialized == FALSE) {
tds_cbs_initialized = TRUE;
@@ -1029,7 +1035,7 @@
g_return_if_fail (GDA_IS_FREETDS_PROVIDER (provider));
-#ifdef HAVE_FREETDS_VER0_5X
+#if FREETDS_VERSION < 6000
tds_cbs_initialized = FALSE;
g_tds_msg_handler = NULL;
g_tds_err_handler = NULL;
@@ -1062,9 +1068,15 @@
TDS_SUCCEED);
msg = g_strdup_printf(_("Msg %d, Level %d, State %d, Server %s, Line %d\n%s\n"),
+#if FREETDS_VERSION >= 6400
+ msg_info->msgno,
+ msg_info->severity,
+ msg_info->state,
+#else
msg_info->msg_number,
msg_info->msg_level,
msg_info->msg_state,
+#endif
(msg_info->server ? msg_info->server : ""),
msg_info->line_number,
msg_info->message ? msg_info->message : "");
@@ -1074,7 +1086,11 @@
if (cnc != NULL) {
error = gda_error_new ();
gda_error_set_description (error, msg);
+#if FREETDS_VERSION >= 6400
+ gda_error_set_number (error, msg_info->msgno);
+#else
gda_error_set_number (error, msg_info->msg_number);
+#endif
gda_error_set_source (error, "gda-freetds");
if (msg_info->sql_state != NULL) {
gda_error_set_sqlstate (error,
@@ -1099,14 +1115,14 @@
return TDS_SUCCEED;
}
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
/* FIXME: rewrite tds_handle_message as well/use new parameters here */
static int
gda_freetds_provider_tds_handle_info_msg (TDSCONTEXT *ctx, TDSSOCKET *tds,
TDSMSGINFO *msg)
{
return gda_freetds_provider_tds_handle_message ((void *) tds,
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
(void *) msg,
#else
(void *) tds->msg_info,
@@ -1121,14 +1137,14 @@
}
#endif
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
/* FIXME: rewrite tds_handle_message as well/use new parameters here */
static int
gda_freetds_provider_tds_handle_err_msg (TDSCONTEXT *ctx, TDSSOCKET *tds,
TDSMSGINFO *msg)
{
return gda_freetds_provider_tds_handle_message ((void *) tds,
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
(void *) msg,
#else
(void *) tds->msg_info,
diff -NurdB libgda-1.2.4/providers/freetds/gda-freetds-provider.h libgda-1.2.4-patched/providers/freetds/gda-freetds-provider.h
--- libgda-1.2.4/providers/freetds/gda-freetds-provider.h 2007-01-09 07:50:54.000000000 -0500
+++ libgda-1.2.4-patched/providers/freetds/gda-freetds-provider.h 2007-01-16 23:38:28.000000000 -0500
@@ -30,14 +30,16 @@
G_BEGIN_DECLS
+#define FREETDS_VERSION (10000*FREETDS_VERSION_MAJOR+100*FREETDS_VERSION_MINOR)
+
/* Compatibility macros */
-#ifdef HAVE_FREETDS_VER0_63
+#if FREETDS_VERSION >= 6300
#define TDSCONNECTINFO TDSCONNECTION
#define TDSCOLINFO TDSCOLUMN
#define TDSMSGINFO TDSMESSAGE
-#endif /* HAVE_FREETDS_VER0_63 */
+#endif /* FREETDS_VERSION >= 6300 */
#define GDA_TYPE_FREETDS_PROVIDER (gda_freetds_provider_get_type())
#define GDA_FREETDS_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, GDA_TYPE_FREETDS_PROVIDER, GdaFreeTDSProvider))
@@ -68,11 +70,11 @@
gchar *database; /* database we are connected to */
TDSLOGIN *login; /* tds login struct */
-#if defined(HAVE_FREETDS_VER0_6X) || defined(HAVE_FREETDS_VER0_60)
+#if FREETDS_VERSION >= 6000
TDSCONTEXT *ctx; /* tds context */
#endif
TDSSOCKET *tds; /* connection handle */
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
TDSCONNECTINFO *config; /* tds connect struct */
#else
TDSCONFIGINFO *config; /* tds config struct */
diff -NurdB libgda-1.2.4/providers/freetds/gda-freetds-recordset.c libgda-1.2.4-patched/providers/freetds/gda-freetds-recordset.c
--- libgda-1.2.4/providers/freetds/gda-freetds-recordset.c 2007-01-09 07:50:54.000000000 -0500
+++ libgda-1.2.4-patched/providers/freetds/gda-freetds-recordset.c 2007-01-17 00:53:55.000000000 -0500
@@ -279,7 +279,7 @@
/* set pointers to NULL */
copy->column_nullbind = NULL;
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
copy->column_varaddr = NULL;
#else
copy->varaddr = NULL;
@@ -339,7 +339,17 @@
recset->priv->tds_cnc = tds_cnc;
recset->priv->res = tds_cnc->tds->res_info;
-#ifdef HAVE_FREETDS_VER0_63
+#if FREETDS_VERSION >= 6400
+ while ((tds_cnc->rc = tds_process_tokens (tds_cnc->tds,
+ &tds_cnc->result_type, NULL, TDS_RETURN_ROWFMT |
+ TDS_RETURN_COMPUTEFMT | TDS_RETURN_DONE | TDS_STOPAT_ROW |
+ TDS_STOPAT_COMPUTE | TDS_RETURN_PROC))
+ == TDS_SUCCEED) {
+ if (tds_cnc->result_type == TDS_ROW_RESULT) {
+ gint row_type, compute_id;
+
+ while ((tds_cnc->rc = tds_process_row_tokens(tds_cnc->tds, &row_type, &compute_id))
+#elif FREETDS_VERSION >= 6200
while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds,
&tds_cnc->result_type, NULL))
== TDS_SUCCEED) {
@@ -347,7 +357,7 @@
gint row_type, compute_id;
while ((tds_cnc->rc = tds_process_row_tokens(tds_cnc->tds, &row_type, &compute_id))
-#elif defined(HAVE_FREETDS_VER0_6X)
+#elif FREETDS_VERSION > 6000
while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds,
&tds_cnc->result_type))
== TDS_SUCCEED) {
@@ -386,7 +396,11 @@
g_object_unref (recset);
recset = NULL;
return NULL;
+#if FREETDS_VERSION >= 6400
+ } else if (tds_cnc->rc != TDS_NO_MORE_RESULTS) {
+#else
} else if (tds_cnc->rc != TDS_NO_MORE_ROWS) {
+#endif
error = gda_freetds_make_error(tds_cnc->tds,
_("Unexpected freetds return code in tds_process_row_tokens().\n"));
gda_connection_add_error (cnc, error);
diff -NurdB libgda-1.2.4/providers/freetds/gda-freetds-types.c libgda-1.2.4-patched/providers/freetds/gda-freetds-types.c
--- libgda-1.2.4/providers/freetds/gda-freetds-types.c 2007-01-09 07:50:54.000000000 -0500
+++ libgda-1.2.4-patched/providers/freetds/gda-freetds-types.c 2007-01-16 23:38:28.000000000 -0500
@@ -191,7 +191,7 @@
const TDS_INT max_size = 255;
TDS_INT col_size = 0;
gchar *txt = NULL;
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
CONV_RESULT tds_conv;
#endif
GdaNumeric numeric;
@@ -202,7 +202,7 @@
/* perhaps remove ifdef later on
* tds_cnc is just needed for context structure of 0.6x api for now
*/
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
g_return_if_fail (tds_cnc != NULL);
g_return_if_fail (tds_cnc->ctx != NULL);
@@ -309,7 +309,7 @@
txt = g_new0 (gchar, col_size);
/* tds_convert api changed to 0.6x */
-#ifdef HAVE_FREETDS_VER0_6X
+#if FREETDS_VERSION > 6000
if (tds_convert (tds_cnc->ctx,
col->column_type, val,
col->column_size, SYBCHAR,
@@ -319,7 +319,7 @@
gda_value_set_string (field,
(tds_conv.c ? tds_conv.c : (tds_conv.ib ? tds_conv.ib : "")));
}
-#elif HAVE_FREETDS_VER0_60
+#elif FREETDS_VERSION == 6000
tds_convert (tds_cnc->ctx,
col->column_type, val,
col->column_size, SYBCHAR,