Index: configure.in =================================================================== RCS file: /cvs/gnome/libgda/configure.in,v retrieving revision 1.300 diff -u -d -r1.300 configure.in --- configure.in 17 Jun 2006 20:54:27 -0000 1.300 +++ configure.in 9 Aug 2006 10:36:24 -0000 @@ -451,45 +451,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 Index: providers/freetds/gda-freetds-defs.h =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-freetds-defs.h,v retrieving revision 1.1 diff -u -d -r1.1 gda-freetds-defs.h --- providers/freetds/gda-freetds-defs.h 11 Jan 2006 21:41:57 -0000 1.1 +++ providers/freetds/gda-freetds-defs.h 9 Aug 2006 10:36:25 -0000 @@ -21,12 +21,14 @@ #if !defined(__gda_freetds_defs_h__) # define __gda_freetds_defs_h__ -#ifdef HAVE_FREETDS_VER0_61_62 +#define FREETDS_VERSION (10000*FREETDS_VERSION_MAJOR+100*FREETDS_VERSION_MINOR) + +#if FREETDS_VERSION >= 6100 && FREETDS_VERSION < 6300 #define _TDSCONNECTINFO TDSCONNECTINFO #define _TDSCOLINFO TDSCOLINFO #define _TDSMSGINFO TDSMSGINFO #else - #ifdef HAVE_FREETDS_VER0_63 + #if FREETDS_VERSION >= 6300 #define _TDSCONNECTINFO TDSCONNECTION #define _TDSCOLINFO TDSCOLUMN #define _TDSMSGINFO TDSMESSAGE Index: providers/freetds/gda-freetds-provider.c =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-freetds-provider.c,v retrieving revision 1.41 diff -u -d -r1.41 gda-freetds-provider.c --- providers/freetds/gda-freetds-provider.c 12 May 2006 16:26:59 -0000 1.41 +++ providers/freetds/gda-freetds-provider.c 9 Aug 2006 10:36:25 -0000 @@ -108,7 +108,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)(); @@ -121,7 +121,7 @@ static int gda_freetds_provider_tds_handle_message (void *aStruct, void *bStruct, const gboolean is_err_msg); -#if defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_60) +#if FREETDS_VERSION >= 6000 static int gda_freetds_provider_tds_handle_info_msg (TDSCONTEXT *, TDSSOCKET *, _TDSMSGINFO *); @@ -257,8 +257,12 @@ tds_set_packet(tds_cnc->login, 512); /* Version 0.60 api uses context additionaly */ -#if defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_61_62) || 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); @@ -272,9 +276,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_61_62) || defined(HAVE_FREETDS_VER0_63) +#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.")); @@ -302,9 +306,9 @@ } /* try to receive connection info for sanity check */ -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#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); @@ -362,7 +366,9 @@ tds_cnc->database = NULL; } if (tds_cnc->config) { -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION >= 6300 + tds_free_connection (tds_cnc->config); +#elif FREETDS_VERSION > 6000 tds_free_connect (tds_cnc->config); #else tds_free_config(tds_cnc->config); @@ -375,7 +381,7 @@ tds_free_socket (tds_cnc->tds); tds_cnc->tds = NULL; } -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_60) +#if FREETDS_VERSION >= 6000 if (tds_cnc->ctx) { /* Clear callback handler */ tds_cnc->ctx->msg_handler = NULL; @@ -684,7 +690,7 @@ if (model) { for (i = 0; i < gda_data_model_get_n_rows (model); i++) { - GdaRow *row = (GdaRow *) gda_data_model_get_row (model, i); + GdaRow *row = gda_data_model_row_get_row (GDA_DATA_MODEL_ROW(model), i, NULL); /* first fix gda_type */ if (row) { @@ -786,7 +792,7 @@ { GdaFreeTDSConnectionData *tds_cnc; GdaConnectionEvent *error; -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 int result_type = 0; #endif @@ -806,13 +812,17 @@ } /* there should not be any result tokens */ -#if defined(HAVE_FREETDS_VER0_61_62) || 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 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)) #endif == TDS_SUCCEED) { - if (tds_cnc->tds->res_info->rows_exist) { + if (tds_cnc->tds->res_info && tds_cnc->tds->res_info->rows_exist) { gda_log_error (_("Unexpected result tokens in execute_cmd().")); error = gda_freetds_make_error (tds_cnc->tds, _("Unexpected result tokens in execute_cmd().")); @@ -920,7 +930,7 @@ g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL); g_return_val_if_fail (params != NULL, NULL); - parameter = gda_parameter_list_find (params, "name"); + parameter = gda_parameter_list_find_param (params, "name"); g_return_val_if_fail (parameter != NULL, NULL); table = g_value_get_string ((GValue *) gda_parameter_get_value (parameter)); @@ -1028,7 +1038,7 @@ provider_class->fetch_blob = NULL; -#ifdef HAVE_FREETDS_VER0_5X +#if FREETDS_VERSION < 6000 if (tds_cbs_initialized == FALSE) { tds_cbs_initialized = TRUE; @@ -1051,7 +1061,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; @@ -1084,9 +1094,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 : ""); @@ -1096,7 +1112,11 @@ if (cnc != NULL) { error = gda_connection_event_new (GDA_CONNECTION_EVENT_ERROR); gda_connection_event_set_description (error, msg); +#if FREETDS_VERSION >= 6400 + gda_connection_event_set_code (error, msg_info->msgno); +#else gda_connection_event_set_code (error, msg_info->msg_number); +#endif gda_connection_event_set_source (error, "gda-freetds"); if (msg_info->sql_state != NULL) { gda_connection_event_set_sqlstate (error, @@ -1121,14 +1141,14 @@ return TDS_SUCCEED; } -#if defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_61_62) || 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, -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 (void *) msg, #else (void *) tds->msg_info, @@ -1143,14 +1163,14 @@ } #endif -#if defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_61_62) || 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, -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 (void *) msg, #else (void *) tds->msg_info, Index: providers/freetds/gda-freetds-provider.h =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-freetds-provider.h,v retrieving revision 1.16 diff -u -d -r1.16 gda-freetds-provider.h --- providers/freetds/gda-freetds-provider.h 11 Jan 2006 21:41:57 -0000 1.16 +++ providers/freetds/gda-freetds-provider.h 9 Aug 2006 10:36:25 -0000 @@ -33,13 +33,13 @@ G_BEGIN_DECLS /* 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)) @@ -70,7 +70,7 @@ gchar *database; /* database we are connected to */ TDSLOGIN *login; /* tds login struct */ -#if defined(HAVE_FREETDS_VER0_63) || defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_60) +#if FREETDS_VERSION >= 6000 TDSCONTEXT *ctx; /* tds context */ #endif TDSSOCKET *tds; /* connection handle */ Index: providers/freetds/gda-freetds-recordset.c =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-freetds-recordset.c,v retrieving revision 1.21 diff -u -d -r1.21 gda-freetds-recordset.c --- providers/freetds/gda-freetds-recordset.c 8 May 2006 12:30:58 -0000 1.21 +++ providers/freetds/gda-freetds-recordset.c 9 Aug 2006 10:36:25 -0000 @@ -230,7 +230,7 @@ /* set pointers to NULL */ copy->column_nullbind = NULL; -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 copy->column_varaddr = NULL; #else copy->varaddr = NULL; @@ -329,14 +329,29 @@ recset->priv->tds_cnc = tds_cnc; recset->priv->res = tds_cnc->tds->res_info; -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 +#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)) +#else + while ((tds_cnc->rc = tds_process_result_tokens (tds_cnc->tds, + &tds_cnc->result_type)) +#endif /* FREETDS_VERSION >= 6400 */ == TDS_SUCCEED) { if (tds_cnc->result_type == TDS_ROW_RESULT) { gint row_type, compute_id; +#if FREETDS_VERSION >= 6400 + while ((tds_cnc->rc = tds_process_tokens(tds_cnc->tds, &row_type, &compute_id, TDS_STOPAT_ROWFMT | TDS_RETURN_DONE | TDS_RETURN_ROW | TDS_RETURN_COMPUTE)) +#else while ((tds_cnc->rc = tds_process_row_tokens(tds_cnc->tds, &row_type, &compute_id)) +#endif #else while ((tds_cnc->rc = tds_process_result_tokens(tds_cnc->tds)) == TDS_SUCCEED) { @@ -368,7 +383,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_event (cnc, error); Index: providers/freetds/gda-freetds-types.c =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-freetds-types.c,v retrieving revision 1.13 diff -u -d -r1.13 gda-freetds-types.c --- providers/freetds/gda-freetds-types.c 8 May 2006 12:30:58 -0000 1.13 +++ providers/freetds/gda-freetds-types.c 9 Aug 2006 10:36:25 -0000 @@ -191,7 +191,7 @@ const TDS_INT max_size = 255; TDS_INT col_size = 0; gchar *txt = NULL; -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 CONV_RESULT tds_conv; #endif GdaNumeric numeric; @@ -203,7 +203,7 @@ /* perhaps remove ifdef later on * tds_cnc is just needed for context structure of 0.6x api for now */ -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 g_return_if_fail (tds_cnc != NULL); g_return_if_fail (tds_cnc->ctx != NULL); @@ -310,7 +310,7 @@ txt = g_new0 (gchar, col_size); /* tds_convert api changed to 0.6x */ -#if defined(HAVE_FREETDS_VER0_61_62) || defined(HAVE_FREETDS_VER0_63) +#if FREETDS_VERSION > 6000 if (tds_convert (tds_cnc->ctx, col->column_type, val, col->column_size, SYBCHAR, @@ -320,7 +320,7 @@ g_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, Index: providers/freetds/gda-tds-schemas.h =================================================================== RCS file: /cvs/gnome/libgda/providers/freetds/gda-tds-schemas.h,v retrieving revision 1.9 diff -u -d -r1.9 gda-tds-schemas.h --- providers/freetds/gda-tds-schemas.h 11 Jan 2006 21:41:57 -0000 1.9 +++ providers/freetds/gda-tds-schemas.h 9 Aug 2006 10:36:25 -0000 @@ -135,7 +135,7 @@ " FROM sysobjects o, sysusers u" \ " WHERE ((o.type = 'P') OR (o.type = 'XP')) " \ " AND (o.uid = u.uid) " \ - " ORDER BY name" + " ORDER BY o.name" #define TDS_FIXMODEL_SCHEMA_TABLES(model) \ @@ -156,7 +156,7 @@ " (o.name NOT LIKE 'spt_%') AND " \ " (o.name != 'syblicenseslog')) " \ " AND (o.uid = u.uid) " \ - " ORDER BY name" + " ORDER BY o.name" #define TDS_FIXMODEL_SCHEMA_TYPES(model) \ @@ -174,7 +174,7 @@ "SELECT t.name, u.name AS owner, t.length, t.type " \ " FROM systypes t, sysusers u " \ " WHERE (t.uid = u.uid) " \ - " ORDER BY name" + " ORDER BY t.name" #define TDS_FIXMODEL_SCHEMA_USERS(model) \ @@ -203,7 +203,7 @@ "SELECT o.name, u.name, '', '' " \ " FROM sysobjects o, sysusers u " \ " WHERE (o.type = 'V') AND (o.uid = u.uid)" \ - " ORDER BY name" + " ORDER BY o.name" G_END_DECLS