| 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, |