rendered paste bodyIndex: 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