libgda r3157 - in trunk: . libgda libgda/binreloc libgda/sqlite providers/mysql



Author: vivien
Date: Sun Jun  1 13:49:25 2008
New Revision: 3157
URL: http://svn.gnome.org/viewvc/libgda?rev=3157&view=rev

Log:
2008-06-01  Vivien Malerba <malerba gnome-db org>

	* libgda/sqlite/gda-sqlite-provider.c:
	* libgda/gda-server-operation.c: applied patch to fix mem leaks (thanks to
	Phil Longstaff)
	* providers/mysql/mysql_specs_create_table.xml.in: applied patch to fix the CREATE TABLE
	operation (thanks to Phil Longstaff)
	* libgda/gda-util.[ch]: applied patch for bug #534805 (thanks to Johannes Schmid)
	* configure.in:
	* libgda/binreloc/gda-binreloc.c: implemented binary relocation under Mac OS X
	* configure.in:
	* libgda/gda-data-model-dir.c: detect if GIO is available and
	use it instead of GnomeVFS


Modified:
   trunk/ChangeLog
   trunk/configure.in
   trunk/gtk-doc.make
   trunk/libgda/Makefile.am
   trunk/libgda/binreloc/gda-binreloc.c
   trunk/libgda/gda-data-model-dir.c
   trunk/libgda/gda-server-operation.c
   trunk/libgda/gda-util.c
   trunk/libgda/gda-util.h
   trunk/libgda/sqlite/gda-sqlite-provider.c
   trunk/providers/mysql/mysql_specs_create_table.xml.in

Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in	(original)
+++ trunk/configure.in	Sun Jun  1 13:49:25 2008
@@ -138,30 +138,46 @@
 dnl Check for Win32
 dnl ******************************
 
-AC_MSG_CHECKING([for some Win32 platform])
+AC_MSG_CHECKING([for platform])
+platform_win32=no
+platform_carbon=no
 case "$host" in
 *-cygwin*)
+    AC_MSG_RESULT([Win32 - cygwin])
     platform_win32=yes
     NO_UNDEFINED='-no-undefined'
     SOPREFIX='cyg'
     LIBTOOL_EXPORT_OPTIONS=
+    AC_MSG_RESULT([Win32])
     ;;
 *-mingw*)
+    AC_MSG_RESULT([Win32 - MinGW])
     platform_win32=yes
     NO_UNDEFINED='-no-undefined'
     SOPREFIX='lib'
     LIBTOOL_EXPORT_OPTIONS=
     ;;
+*-*-darwin*)
+    dnl Darwin based distributions (including Mac OS X)
+    AC_MSG_RESULT([Mac OS X - carbon])
+    platform_carbon=yes
+    SOPREFIX='lib'
+    AM_BINRELOC
+    LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
+    AC_DEFINE(HAVE_CARBON)
+    dnl SO_SUFFIX=dylib
+  ;;
 *)
-    platform_win32=no
+    AC_MSG_RESULT([Unix])
     NO_UNDEFINED=''
     SOPREFIX='lib'
     AM_BINRELOC
     LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
     ;;
 esac
-AC_MSG_RESULT([$platform_win32])
+
 AM_CONDITIONAL(PLATFORM_WIN32, [test $platform_win32 = yes])
+AM_CONDITIONAL(PLATFORM_CARBON, [test $platform_carbon = yes])
 AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
 AC_SUBST(NO_UNDEFINED)
 AC_SUBST(SOPREFIX)
@@ -189,19 +205,34 @@
 AC_SUBST(FAM_LIBS)
 AC_SUBST(FAM_CFLAGS)
 
-dnl ******************************
-dnl Checks for Gnome VFS
-dnl ******************************
+dnl ***********************************************
+dnl Checks for GIO or Gnome VFS, use GIO preferably
+dnl ***********************************************
 
 GNOMEVFS_MODULES="gnome-vfs-2.0 >= 2.20"
 PKG_CHECK_MODULES(GNOMEVFS, $GNOMEVFS_MODULES, have_gnomevfs=yes, have_gnomevfs=no)
-AM_CONDITIONAL(HAVE_GNOMEVFS, test x"$have_gnomevfs" = "xyes")
 if test x"$have_gnomevfs" = "xyes"
 then
         GNOMEVFS_CFLAGS="$GNOMEVFS_CFLAGS -DHAVE_GNOMEVFS"
 fi
+
+GIO_MODULES="gio-2.0"
+PKG_CHECK_MODULES(GIO, $GIO_MODULES, have_gio=yes, have_gio=no)
+AM_CONDITIONAL(HAVE_GIO, test x"$have_gio" = "xyes")
+if test x"$have_gio" = "xyes"
+then
+        GIO_CFLAGS="$GIO_CFLAGS -DHAVE_GIO"
+	GNOMEVFS_CFLAGS=""
+	GNOMEVFS_LIBS=""
+	have_gnomevfs=no
+fi
+AC_SUBST(GIO_CFLAGS)
+AC_SUBST(GIO_LIBS)
+
 AC_SUBST(GNOMEVFS_CFLAGS)
 AC_SUBST(GNOMEVFS_LIBS)
+AM_CONDITIONAL(HAVE_GNOMEVFS, test x"$have_gnomevfs" = "xyes")
+
 
 dnl ******************************
 dnl Checks for libxslt

Modified: trunk/gtk-doc.make
==============================================================================
--- trunk/gtk-doc.make	(original)
+++ trunk/gtk-doc.make	Sun Jun  1 13:49:25 2008
@@ -5,11 +5,11 @@
 ####################################
 
 if GTK_DOC_USE_LIBTOOL
-GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
-GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
 else
-GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
-GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
 endif
 
 # We set GPATH here; this gives us semantics for GNU make
@@ -38,7 +38,12 @@
 	$(DOC_MODULE).prerequisites \
 	$(DOC_MODULE).signals
 
-CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+REPORT_FILES = \
+	$(DOC_MODULE)-undocumented.txt \
+	$(DOC_MODULE)-undeclared.txt \
+	$(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
 
 if ENABLE_GTK_DOC
 all-local: html-build.stamp
@@ -79,6 +84,10 @@
 tmpl.stamp: tmpl-build.stamp
 	@true
 
+tmpl/*.sgml:
+	@true
+
+
 #### xml ####
 
 sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
@@ -96,11 +105,11 @@
 html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
 	@echo 'gtk-doc: Building HTML'
 	@-chmod -R u+w $(srcdir)
-	rm -rf $(srcdir)/html 
+	rm -rf $(srcdir)/html
 	mkdir $(srcdir)/html
 	cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
 	test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
-	@echo 'gtk-doc: Fixing cross-references' 
+	@echo 'gtk-doc: Fixing cross-references'
 	cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
 	touch html-build.stamp
 
@@ -110,11 +119,16 @@
 	rm -f *~ *.bak
 	rm -rf .libs
 
+distclean-local:
+	cd $(srcdir) && \
+	  rm -rf xml $(REPORT_FILES) \
+	         $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
 maintainer-clean-local: clean
-	cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	cd $(srcdir) && rm -rf xml html
 
 install-data-local:
-	installfiles=`echo $(srcdir)/html/*`; \
+	-installfiles=`echo $(srcdir)/html/*`; \
 	if test "$$installfiles" = '$(srcdir)/html/*'; \
 	then echo '-- Nothing to install' ; \
 	else \
@@ -125,7 +139,10 @@
 	  done; \
 	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
 	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+	  which gtkdoc-rebase >/dev/null && \
+	    gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) ; \
 	fi
+	
 
 uninstall-local:
 	rm -f $(DESTDIR)$(TARGET_DIR)/*
@@ -148,8 +165,9 @@
 	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
 	-cp $(srcdir)/xml/*.xml $(distdir)/xml
 	cp $(srcdir)/html/* $(distdir)/html
-	if test -f $(srcdir)/$(DOC_MODULE).types; then \
-	  cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
-	fi
+	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+	cd $(distdir) && rm -f $(DISTCLEANFILES)
+	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
 
 .PHONY : dist-hook-local docs

Modified: trunk/libgda/Makefile.am
==============================================================================
--- trunk/libgda/Makefile.am	(original)
+++ trunk/libgda/Makefile.am	Sun Jun  1 13:49:25 2008
@@ -15,7 +15,7 @@
 	$(LIBGDA_CFLAGS) \
 	$(FAM_CFLAGS) \
 	$(BDB_CFLAGS) \
-	$(GNOMEVFS_CFLAGS)
+	$(GIO_CFLAGS) $(GNOMEVFS_CFLAGS)
 
 gda_marshal_built_files = gda-marshal.h gda-marshal.c
 
@@ -175,7 +175,7 @@
 	binreloc/libgda_binreloc-4.0.la \
 	sqlite/libgda-sqlite.la \
 	$(LIBGDA_LIBS) $(FAM_LIBS) \
-	$(BDB_LIBS) $(GNOMEVFS_LIBS) 
+	$(BDB_LIBS) $(GIO_LIBS) $(GNOMEVFS_LIBS) 
 
 gdaincludedir=$(includedir)/libgda-$(GDA_ABI_MAJOR_VERSION).$(GDA_ABI_MINOR_VERSION)/libgda
 gdainclude_HEADERS=$(libgda_built_headers) $(gda_headers)

Modified: trunk/libgda/binreloc/gda-binreloc.c
==============================================================================
--- trunk/libgda/binreloc/gda-binreloc.c	(original)
+++ trunk/libgda/binreloc/gda-binreloc.c	Sun Jun  1 13:49:25 2008
@@ -39,6 +39,8 @@
 
 	return TRUE;
 }
+#elif HAVE_CARBON
+#include <Carbon/Carbon.h>
 #endif
 
 
@@ -49,6 +51,9 @@
 gda_gbr_init (void)
 {
 #ifdef G_OS_WIN32
+	/* nothing */
+#elif HAVE_CARBON
+	/* nothing */
 #else
 	_gda_gbr_init_lib (NULL);
 #endif
@@ -60,7 +65,7 @@
 gchar *
 gda_gbr_get_file_path (GdaPrefixDir where, ...)
 {
-	gchar *prefix;
+	gchar *prefix = NULL;
 	gchar *tmp, *file_part;
 	va_list ap;
 	gchar **parts;
@@ -71,7 +76,6 @@
 	wchar_t path[MAX_PATH];
 	gchar* p;
 #endif
-
 	switch (where) {
 	default:
 	case GDA_NO_DIR:
@@ -110,11 +114,23 @@
 	prefix = g_utf16_to_utf8 (path, -1, NULL, NULL, NULL);
 	if ((p = strrchr (prefix, G_DIR_SEPARATOR)) != NULL)
 		*p = '\0';
-
+	
 	p = strrchr (prefix, G_DIR_SEPARATOR);
-	if(p && (g_ascii_strcasecmp (p + 1, "bin") == 0 ||
-	         g_ascii_strcasecmp (p + 1, "lib") == 0))
+	if (p && (g_ascii_strcasecmp (p + 1, "bin") == 0 ||
+		  g_ascii_strcasecmp (p + 1, "lib") == 0))
 		*p = '\0';	
+#elif HAVE_CARBON
+#define MAXLEN 500
+	ProcessSerialNumber myProcess;
+	FSRef bundleLocation;
+	unsigned char bundlePath[MAXLEN];
+
+	if ((GetCurrentProcess (&myProcess) == noErr) &&
+	    (GetProcessBundleLocation (&myProcess, &bundleLocation) == noErr) &&
+	    (FSRefMakePath (&bundleLocation, bundlePath, MAXLEN) == noErr))
+		prefix = g_path_get_dirname ((const char*) bundlePath);
+	else
+		g_warning ("Could not get PREFIX (using Mac OS X Carbon)");
 #else
 	prefix = _gda_gbr_find_prefix (LIBGDAPREFIX);
 #endif

Modified: trunk/libgda/gda-data-model-dir.c
==============================================================================
--- trunk/libgda/gda-data-model-dir.c	(original)
+++ trunk/libgda/gda-data-model-dir.c	Sun Jun  1 13:49:25 2008
@@ -27,8 +27,12 @@
 #include <libgda/gda-data-model-dir.h>
 #include <libgda/gda-data-model-extra.h>
 
-#ifdef HAVE_GNOMEVFS
-#include <libgnomevfs/gnome-vfs-mime.h>
+#ifdef HAVE_GIO
+#include <gio/gio.h>
+#else
+  #ifdef HAVE_GNOMEVFS
+  #include <libgnomevfs/gnome-vfs-mime.h>
+  #endif
 #endif
 
 /* Use the RSA reference implementation included in the RFC-1321, http://www.freesoft.org/CIE/RFC/1321/ */
@@ -566,8 +570,23 @@
 {
 	gboolean changed = TRUE;
 	GValue *value = NULL;
-
-#ifdef HAVE_GNOMEVFS
+#ifdef HAVE_GIO
+	GFile *file;
+	GFileInfo *info;
+	file = g_file_new_for_path (complete_filename);
+	info = g_file_query_info (file,
+				  G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
+				  G_FILE_QUERY_INFO_NONE, NULL, NULL);
+	if (info) {
+		value = gda_value_new (G_TYPE_STRING);
+                g_value_set_string (value, g_file_info_get_content_type (info));
+		g_object_unref (info);
+	}
+	else
+		value = gda_value_new_null ();
+	g_object_unref (file);
+#else
+  #ifdef HAVE_GNOMEVFS
 	const gchar *mime;
 	
 	mime = gnome_vfs_get_file_mime_type (complete_filename, NULL, FALSE);
@@ -577,8 +596,9 @@
 	}
 	else 
 		value = gda_value_new_null ();
-#else
+  #else
 	value = gda_value_new_null ();
+  #endif
 #endif
 
 	if (value) {

Modified: trunk/libgda/gda-server-operation.c
==============================================================================
--- trunk/libgda/gda-server-operation.c	(original)
+++ trunk/libgda/gda-server-operation.c	Sun Jun  1 13:49:25 2008
@@ -412,6 +412,7 @@
 				node = NULL;
 				break;
 		}
+		g_free(cpath);
 	}
 
 	/*g_print ("# %s (%s) => %p\n", __FUNCTION__, path, node);*/

Modified: trunk/libgda/gda-util.c
==============================================================================
--- trunk/libgda/gda-util.c	(original)
+++ trunk/libgda/gda-util.c	Sun Jun  1 13:49:25 2008
@@ -735,7 +735,7 @@
  */
 gboolean
 gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gboolean require_pk, 
-			    GdaStatement **insert, GdaStatement **update, GdaStatement **delete, GError **error)
+                            GdaStatement **insert_stmt, GdaStatement **update_stmt, GdaStatement **delete_stmt, GError **error)
 {
 	GdaSqlStatement *sel_struct;
 	GdaSqlStatementSelect *stsel;
@@ -776,14 +776,14 @@
 	target = (GdaSqlSelectTarget*) stsel->from->targets->data;
 	
 	/* actual statement structure's computation */        
-	if (insert) {
+	if (insert_stmt) {
 		ist = g_new0 (GdaSqlStatementInsert, 1);
 		GDA_SQL_ANY_PART (ist)->type = GDA_SQL_ANY_STMT_INSERT;
 		ist->table = gda_sql_table_new (GDA_SQL_ANY_PART (ist));
 		ist->table->table_name = g_strdup ((gchar *) target->table_name);
 	}
 	
-	if (update) {
+	if (update_stmt) {
 		ust = g_new0 (GdaSqlStatementUpdate, 1);
 		GDA_SQL_ANY_PART (ust)->type = GDA_SQL_ANY_STMT_UPDATE;
 		ust->table = gda_sql_table_new (GDA_SQL_ANY_PART (ust));
@@ -798,7 +798,7 @@
 		GDA_SQL_ANY_PART (ust->cond)->parent = GDA_SQL_ANY_PART (ust);
 	}
         
-	if (delete) {
+	if (delete_stmt) {
 		dst = g_new0 (GdaSqlStatementDelete, 1);
 		GDA_SQL_ANY_PART (dst)->type = GDA_SQL_ANY_STMT_DELETE;
 		dst->table = gda_sql_table_new (GDA_SQL_ANY_PART (dst));
@@ -830,13 +830,13 @@
 		if (g_hash_table_lookup (fields_hash, selfield->field_name))
 			continue;
 		g_hash_table_insert (fields_hash, selfield->field_name, GINT_TO_POINTER (1));
-		if (insert) {
+		if (insert_stmt) {
 			GdaSqlField *field;
 			field = gda_sql_field_new (GDA_SQL_ANY_PART (ist));
 			field->field_name = g_strdup (selfield->field_name);
 			ist->fields_list = g_slist_append (ist->fields_list, field);
 		}
-		if (update) {
+		if (update_stmt) {
 			GdaSqlField *field;
 			field = gda_sql_field_new (GDA_SQL_ANY_PART (ust));
 			field->field_name = g_strdup (selfield->field_name);
@@ -848,7 +848,7 @@
 		GdaMetaTableColumn *tcol;
 
 		tcol = selfield->validity_meta_table_column;
-		if (insert) {
+		if (insert_stmt) {
 			GdaSqlParamSpec *pspec = g_new0 (GdaSqlParamSpec, 1);
 			pspec->name = g_strdup_printf ("+%d", colindex);
 			pspec->g_type = tcol->gtype != G_TYPE_INVALID ? tcol->gtype: G_TYPE_STRING;
@@ -858,7 +858,7 @@
 			expr->param_spec = pspec;
 			insert_values_list = g_slist_append (insert_values_list, expr);
 		}
-		if (update) {
+		if (update_stmt) {
 			GdaSqlParamSpec *pspec = g_new0 (GdaSqlParamSpec, 1);
 			pspec->name = g_strdup_printf ("+%d", colindex);
 			pspec->g_type = tcol->gtype != G_TYPE_INVALID ? tcol->gtype: G_TYPE_STRING;
@@ -872,7 +872,7 @@
 	g_hash_table_destroy (fields_hash);
 
 	/* finish the statements */
-	if (insert) {
+	if (insert_stmt) {
 		GdaSqlStatement *st;
 
 		if (!ist->fields_list) {
@@ -889,7 +889,7 @@
 		ret_insert = g_object_new (GDA_TYPE_STATEMENT, "structure", st, NULL);
 		gda_sql_statement_free (st);
 	}
-	if (update) {
+	if (update_stmt) {
 		GdaSqlStatement *st;
 		st = gda_sql_statement_new (GDA_SQL_STATEMENT_UPDATE);
 		st->contents = ust;
@@ -897,7 +897,7 @@
 		ret_update = g_object_new (GDA_TYPE_STATEMENT, "structure", st, NULL);
 		gda_sql_statement_free (st);
 	}
-	if (delete) {
+  	if (delete_stmt) {
 		GdaSqlStatement *st;
 		st = gda_sql_statement_new (GDA_SQL_STATEMENT_DELETE);
 		st->contents = dst;
@@ -924,12 +924,12 @@
 		cinfo->free (dst);
 	}
 		
-	if (insert)
-		*insert = ret_insert;
-	if (update)
-		*update = ret_update;
-	if (delete)
-		*delete = ret_delete;
+	if (insert_stmt)
+		*insert_stmt = ret_insert;
+	if (update_stmt)
+		*update_stmt = ret_update;
+	if (delete_stmt)
+		*delete_stmt = ret_delete;
 	return retval;
 }
 

Modified: trunk/libgda/gda-util.h
==============================================================================
--- trunk/libgda/gda-util.h	(original)
+++ trunk/libgda/gda-util.h	Sun Jun  1 13:49:25 2008
@@ -66,7 +66,7 @@
  * Statement computation from meta store 
  */
 gboolean     gda_compute_dml_statements (GdaConnection *cnc, GdaStatement *select_stmt, gboolean require_pk, 
-					 GdaStatement **insert, GdaStatement **update, GdaStatement **delete, 
+					 GdaStatement **insert_stmt, GdaStatement **update_stmt, GdaStatement **delete_stmt, 
 					 GError **error);
 
 /*

Modified: trunk/libgda/sqlite/gda-sqlite-provider.c
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-provider.c	(original)
+++ trunk/libgda/sqlite/gda-sqlite-provider.c	Sun Jun  1 13:49:25 2008
@@ -1771,6 +1771,7 @@
 {
 	GdaSqlitePStmt *ps;
 	SqliteConnectionData *cdata;
+	gboolean new_ps = FALSE;
 
 	g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
 	g_return_val_if_fail (gda_connection_get_provider_obj (cnc) == provider, NULL);
@@ -1831,6 +1832,7 @@
 			/* create a SQLitePreparedStatement */
 			ps = gda_sqlite_pstmt_new (sqlite_stmt);
 			_GDA_PSTMT (ps)->sql = sql;
+			new_ps = TRUE;
 		}
 		else
 			ps = gda_connection_get_prepared_statement (cnc, stmt);
@@ -1839,10 +1841,11 @@
 		/* Don't use @ps => prepare stmt again */
 		GdaSqlitePStmt *nps;
 		nps = real_prepare (provider, cnc, stmt, error);
-		gda_pstmt_copy_contents ((GdaPStmt *) ps, (GdaPStmt *) nps);
 		if (!nps)
 			return NULL;
+		gda_pstmt_copy_contents ((GdaPStmt *) ps, (GdaPStmt *) nps);
 		ps = nps;
+		new_ps = TRUE;
 	}
 
 	/* check that prepared stmt is not NULL, to avoid a crash */
@@ -1857,6 +1860,8 @@
 		gda_connection_del_prepared_statement (cnc, stmt);
 		g_set_error (error, GDA_SERVER_PROVIDER_ERROR, GDA_SERVER_PROVIDER_EMPTY_STMT_ERROR,
 			     errmsg);
+		if (new_ps)
+			g_object_unref (ps);
 		return NULL;
 	}
 
@@ -1873,6 +1878,8 @@
 		gda_connection_del_prepared_statement (cnc, stmt);
 		g_set_error (error, GDA_SERVER_PROVIDER_ERROR, GDA_SERVER_PROVIDER_PREPARE_STMT_ERROR,
 			     errmsg);
+		if (new_ps)
+			g_object_unref (ps);
 		return NULL;
 	}
 	
@@ -2002,6 +2009,8 @@
 		
 	if (event) {
 		gda_connection_add_event (cnc, event);
+		if (new_ps)
+			g_object_unref (ps);
 		return NULL;
 	}
 	
@@ -2024,6 +2033,8 @@
 
                 data_model = (GObject *) gda_sqlite_recordset_new (cnc, ps, flags, col_types);
 		gda_connection_internal_statement_executed (cnc, stmt, params, NULL);
+		if (new_ps)
+			g_object_unref (ps);
 		return data_model;
         }
 	else {
@@ -2044,12 +2055,16 @@
 				g_set_error (error, GDA_SERVER_PROVIDER_ERROR,
 					     GDA_SERVER_PROVIDER_STATEMENT_EXEC_ERROR, errmsg);
 				gda_connection_internal_statement_executed (cnc, stmt, params, event);
+				if (new_ps)
+					g_object_unref (ps);
 				return NULL;
                         }
 			else {
 				/* could be SQLITE_SCHEMA if database schema has changed and
 				 * changes are incompatible with statement */
 				TO_IMPLEMENT;
+				if (new_ps)
+					g_object_unref (ps);
 				return NULL;
 			}
                 }
@@ -2097,6 +2112,8 @@
                                 gda_connection_add_event (cnc, event);
                         }
 			gda_connection_internal_statement_executed (cnc, stmt, params, event);
+			if (new_ps)
+				g_object_unref (ps);
 			return set;
 		}
 	}

Modified: trunk/providers/mysql/mysql_specs_create_table.xml.in
==============================================================================
--- trunk/providers/mysql/mysql_specs_create_table.xml.in	(original)
+++ trunk/providers/mysql/mysql_specs_create_table.xml.in	Sun Jun  1 13:49:25 2008
@@ -30,14 +30,14 @@
         <gda_array_row>
             <gda_value>id</gda_value>
             <gda_value>int</gda_value>
-            <gda_value></gda_value>
-            <gda_value></gda_value>
+            <gda_value isnull="t"></gda_value>
+            <gda_value isnull="t"></gda_value>
             <gda_value>FALSE</gda_value>
             <gda_value>TRUE</gda_value>
             <gda_value>FALSE</gda_value>
             <gda_value>TRUE</gda_value>
-            <gda_value></gda_value>
-            <gda_value></gda_value>
+            <gda_value isnull="t"></gda_value>
+            <gda_value isnull="t"></gda_value>
             <gda_value>Primary key</gda_value>
         </gda_array_row>
     </gda_array_data>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]