anjuta r3801 - in branches/anjuta-symbol-db: . libanjuta/interfaces plugins/symbol-browser plugins/symbol-db plugins/symbol-db/test



Author: jhs
Date: Thu Mar 27 22:19:35 2008
New Revision: 3801
URL: http://svn.gnome.org/viewvc/anjuta?rev=3801&view=rev

Log:
2008-03-22  Massimo Cora\'  <maxcvs email it>

	* configure.in:
	added dependence for libgda 3.99.1 (v4.x).

	* libanjuta/interfaces/libanjuta.idl:
	added a method.

	* plugins/symbol-browser/plugin.c:
	* plugins/symbol-db/Makefile.am:
	* plugins/symbol-db/anjuta-symbol-db.glade:
	* plugins/symbol-db/anjuta-symbol-db.schemas:
	* plugins/symbol-db/plugin.c:
	(on_editor_buffer_symbols_update_timeout), (on_editor_saved),
	(value_added_current_editor), (goto_local_tree_iter),
	(goto_global_tree_iter), (on_global_treeview_row_expanded),
	(on_global_treeview_row_collapsed), (on_project_element_added),
	(on_project_element_removed), (on_importing_project_end),
	(do_import_sources_after_abort), (do_import_sources),
	(project_root_added), (project_root_removed), (symbol_db_activate),
	(symbol_db_deactivate), (isymbol_manager_search),
	(isymbol_manager_get_members), (isymbol_manager_get_class_parents),
	(ipreferences_merge), (ipreferences_unmerge):
	* plugins/symbol-db/plugin.h:
	* plugins/symbol-db/symbol-db-engine-iterator-node.c:
	(symbol_db_engine_iterator_node_get_symbol_id),
	(symbol_db_engine_iterator_node_get_symbol_name),
	(symbol_db_engine_iterator_node_get_symbol_file_pos),
	(symbol_db_engine_iterator_node_get_symbol_is_file_scope),
	(symbol_db_engine_iterator_node_get_symbol_signature),
	(symbol_db_engine_iterator_node_get_symbol_extra_string):
	* plugins/symbol-db/symbol-db-engine-iterator.c:
	(symbol_db_engine_iterator_new):
	* plugins/symbol-db/symbol-db-engine.c:
	(sdb_engine_execute_unknown_sql), (sdb_engine_execute_select_sql),
	(sdb_engine_execute_non_select_sql), (sdb_engine_get_query_by_id),
	(sdb_engine_free_cached_queries), (sdb_engine_disconnect_from_db),
	(sdb_engine_populate_db_by_tags), (sdb_engine_ctags_output_thread),
	(sdb_engine_init), (sdb_engine_finalize),
	(sdb_engine_set_defaults_db_parameters),
	(sdb_engine_connect_to_db), (sdb_engine_create_db_tables),
	(symbol_db_engine_close_db), (symbol_db_engine_open_db),
	(sdb_engine_get_tuple_id_by_unique_name),
	(sdb_engine_get_tuple_id_by_unique_name2),
	(sdb_engine_get_tuple_id_by_unique_name3),
	(symbol_db_engine_add_new_workspace),
	(symbol_db_engine_project_exists),
	(symbol_db_engine_add_new_project), (sdb_engine_add_new_language),
	(sdb_engine_add_new_file), (symbol_db_engine_add_new_files),
	(sdb_engine_add_new_sym_type), (sdb_engine_add_new_sym_kind),
	(sdb_engine_add_new_sym_access),
	(sdb_engine_add_new_sym_implementation),
	(sdb_engine_add_new_heritage),
	(sdb_engine_add_new_scope_definition),
	(sdb_engine_add_new_tmp_heritage_scope),
	(sdb_engine_second_pass_update_scope_1),
	(sdb_engine_second_pass_update_heritage),
	(sdb_engine_second_pass_do), (sdb_engine_add_new_symbol),
	(sdb_engine_detects_removed_ids), (sdb_engine_update_file),
	(on_scan_update_files_symbols_end),
	(symbol_db_engine_update_files_symbols),
	(symbol_db_engine_update_project_symbols),
	(symbol_db_engine_remove_file), (on_scan_update_buffer_end),
	(symbol_db_engine_update_buffer_symbols),
	(symbol_db_engine_get_files_with_zero_symbols),
	(symbol_db_engine_get_file_symbols),
	(symbol_db_engine_get_full_local_path),
	(symbol_db_engine_get_file_db_path):
	* plugins/symbol-db/symbol-db-engine.h:
	* plugins/symbol-db/symbol-db-prefs.c:
	(on_prefs_executable_changed), (on_gconf_notify_prefs),
	(pkg_list_compare), (on_cflags_output), (on_cflags_exit),
	(on_listall_output), (on_listall_exit), (files_visit_dir),
	(on_tag_load_toggled), (symbol_db_prefs_init),
	(symbol_db_prefs_finalize):
	* plugins/symbol-db/symbol-db-prefs.h:
	* plugins/symbol-db/symbol-db.glade:
	* plugins/symbol-db/test/Makefile.am:
	* plugins/symbol-db/test/benchmark.c: (on_single_file_scan_end),
	(main):
	* plugins/symbol-db/test/main.c: (main), (packages_foreach),
	(files_visit_dir):
	* plugins/symbol-db/test/parse.c: (read_one_line), (trim_string),
	(trim_and_sub), (parse_name), (parse_version), (parse_description),
	(split_module_list), (parse_module_list), (parse_requires),
	(parse_requires_private), (parse_conflicts), (_do_parse_libs),
	(parse_libs), (parse_libs_private), (parse_cflags), (parse_url),
	(parse_line), (parse_package_file), (backticks), (try_command),
	(get_compat_package):
	* plugins/symbol-db/test/parse.h:
	* plugins/symbol-db/test/pkg.c: (debug_spew), (verbose_error),
	(add_search_dir), (add_search_dirs), (ends_in_dotpc),
	(name_ends_in_uninstalled), (scan_dir),
	(add_virtual_pkgconfig_package), (package_init), (file_readable),
	(internal_get_package), (get_package), (get_package_quiet),
	(string_list_strip_duplicates),
	(string_list_strip_duplicates_from_back), (string_list_to_string),
	(get_l_libs), (get_L_libs), (get_other_libs), (get_I_cflags),
	(get_other_cflags), (get_conflicts), (get_requires),
	(get_requires_private), (pathposcmp), (spew_package_list),
	(spew_string_list), (packages_sort_by_path_position),
	(fill_one_level), (recursive_fill_list),
	(fill_list_single_package), (fill_list),
	(compare_req_version_names), (compare_package_keys),
	(add_env_variable_to_list), (verify_package), (get_merged),
	(get_merged_from_back), (get_multi_merged),
	(get_multi_merged_from_back), (package_get_l_libs),
	(packages_get_l_libs), (package_get_L_libs), (packages_get_L_libs),
	(package_get_other_libs), (packages_get_other_libs),
	(packages_get_all_libs), (package_get_I_cflags),
	(packages_get_I_cflags), (package_get_other_cflags),
	(packages_get_other_cflags), (package_get_cflags),
	(packages_get_all_cflags), (define_global_variable),
	(package_get_var), (packages_get_var), (rpmvercmp),
	(compare_versions), (version_test), (comparison_to_str),
	(max_len_foreach), (packages_foreach), (print_package_list),
	(enable_private_libs), (disable_private_libs),
	(get_packages_locations):
	* plugins/symbol-db/test/pkg.h:
	Added prefs page and a global tags logic. It\'s not fully working anyway.
	Porting the engine to libgda 4.x apis. 

Modified:
   branches/anjuta-symbol-db/ChangeLog
   branches/anjuta-symbol-db/configure.in
   branches/anjuta-symbol-db/libanjuta/interfaces/libanjuta.idl
   branches/anjuta-symbol-db/plugins/symbol-browser/plugin.c
   branches/anjuta-symbol-db/plugins/symbol-db/Makefile.am
   branches/anjuta-symbol-db/plugins/symbol-db/plugin.c
   branches/anjuta-symbol-db/plugins/symbol-db/plugin.h
   branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator-node.c
   branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator.c
   branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.c
   branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.h
   branches/anjuta-symbol-db/plugins/symbol-db/symbol-db.glade
   branches/anjuta-symbol-db/plugins/symbol-db/test/Makefile.am
   branches/anjuta-symbol-db/plugins/symbol-db/test/benchmark.c
   branches/anjuta-symbol-db/plugins/symbol-db/test/main.c

Modified: branches/anjuta-symbol-db/configure.in
==============================================================================
--- branches/anjuta-symbol-db/configure.in	(original)
+++ branches/anjuta-symbol-db/configure.in	Thu Mar 27 22:19:35 2008
@@ -51,7 +51,7 @@
 GTKSOURCEVIEW_GTK_REQUIRED=2.10
 BINUTILS_REQUIRED=2.15.92
 LIBWNCK_REQUIRED=2.12
-GDA_REQUIRED=3.1.3
+GDA_REQUIRED=3.99.1
 
 dnl LIBGTODO_REQUIRED=0.15
 
@@ -485,7 +485,7 @@
 	AC_MSG_RESULT(no)
 	
 	PKG_CHECK_MODULES(PLUGIN_SYMBOL_DB,
-		[libgda-3.0 >= $GDA_REQUIRED],
+		[libgda-4.0 >= $GDA_REQUIRED],
 		[symboldb="yes"],
 		[symboldb="no"])
 	AC_SUBST(PLUGIN_SYMBOL_DB_CFLAGS)

Modified: branches/anjuta-symbol-db/libanjuta/interfaces/libanjuta.idl
==============================================================================
--- branches/anjuta-symbol-db/libanjuta/interfaces/libanjuta.idl	(original)
+++ branches/anjuta-symbol-db/libanjuta/interfaces/libanjuta.idl	Thu Mar 27 22:19:35 2008
@@ -4443,12 +4443,7 @@
 	* 
 	* Returns: fixme
 	*/
-	IAnjutaIterable* get_class_parents (IAnjutaSymbol *symbol, IAnjutaSymbolField info_fields);
-	
-	/**
-	* DEPRECATED - to be removed.
-	*/
-	IAnjutaIterable* get_completions_at_position (const gchar* file_uri, const gchar *text_buffer, const gint text_length, const gint text_pos);
+	IAnjutaIterable* get_class_parents (IAnjutaSymbol *symbol, IAnjutaSymbolField info_fields);	
 }
 
 /**

Modified: branches/anjuta-symbol-db/plugins/symbol-browser/plugin.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-browser/plugin.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-browser/plugin.c	Thu Mar 27 22:19:35 2008
@@ -1205,90 +1205,6 @@
 	return NULL;
 }
 
-/* DEPRECATED */
-static IAnjutaIterable*
-isymbol_manager_get_completions_at_position (IAnjutaSymbolManager *sm,
-											const gchar *file_uri,
-							 				const gchar *text_buffer, 
-											gint text_length, 
-											gint text_pos,
-							 				GError **err)
-{
-	DEBUG_PRINT ("deprecated");
-	return NULL;
-#if 0	
-	SymbolBrowserPlugin *sv_plugin;
-	const TMTag *func_scope_tag;
-	TMSourceFile *tm_file;
-	IAnjutaEditor *ed;
-	AnjutaSymbolView *symbol_view;
-	gulong line;
-	gulong scope_position;
-	gchar *needed_text = NULL;
-	gint access_method;
-	GPtrArray * completable_tags_array;
-	AnjutaSymbolIter *iter = NULL;
-	
-	sv_plugin = ANJUTA_PLUGIN_SYMBOL_BROWSER (sm);
-	ed = IANJUTA_EDITOR (sv_plugin->current_editor);	
-	symbol_view = ANJUTA_SYMBOL_VIEW (sv_plugin->sv_tree);
-	
-	line = ianjuta_editor_get_line_from_position (ed, text_pos, NULL);
-	
-	/* get the function scope */
-	tm_file = anjuta_symbol_view_get_tm_file (symbol_view, file_uri);
-	
-	/* check whether the current file_uri is listed in the tm_workspace or not... */	
-	if (tm_file == NULL)
-		return 	NULL;
-		
-	func_scope_tag = tm_get_current_function (tm_file->work_object.tags_array, line);
-		
-	if (func_scope_tag == NULL) {
-		DEBUG_PRINT ("func_scope_tag is NULL, seems like it's a completion on a global scope");
-		return NULL;
-	}
-	
-	DEBUG_PRINT ("current expression scope: %s", func_scope_tag->name);
-	
-	
-	scope_position = ianjuta_editor_get_line_begin_position (ed, func_scope_tag->atts.entry.line, NULL);
-	needed_text = ianjuta_editor_get_text (ed, scope_position,
-										   text_pos - scope_position, NULL);
-
-	if (needed_text == NULL)
-		DEBUG_PRINT ("needed_text is null");
-	DEBUG_PRINT ("text needed is %s", needed_text );
-	
-
-	/* we'll pass only the text of the current scope: i.e. only the current function
-	 * in which we request the completion. */
-	TMTag * found_type = anjuta_symbol_view_get_type_of_expression (symbol_view, 
-				needed_text, text_pos - scope_position, func_scope_tag, &access_method);
-
-				
-	if (found_type == NULL) {
-		DEBUG_PRINT ("type not found.");
-		return NULL;	
-	}
-	
-	/* get the completable memebers. If the access is COMPLETION_ACCESS_STATIC we don't
-	 * want to know the parents members of the class.
-	 */
-	if (access_method == COMPLETION_ACCESS_STATIC)
-		completable_tags_array = anjuta_symbol_view_get_completable_members (found_type, FALSE);
-	else
-		completable_tags_array = anjuta_symbol_view_get_completable_members (found_type, TRUE);
-	
-	if (completable_tags_array && completable_tags_array->len)
-	{
-		iter = anjuta_symbol_iter_new (completable_tags_array);
-		return IANJUTA_ITERABLE (iter);
-	}
-	return NULL;
-#endif	
-}
-
 static void
 isymbol_manager_iface_init (IAnjutaSymbolManagerIface *iface)
 {

Modified: branches/anjuta-symbol-db/plugins/symbol-db/Makefile.am
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/Makefile.am	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/Makefile.am	Thu Mar 27 22:19:35 2008
@@ -1,6 +1,6 @@
 if HAVE_PLUGIN_SYMBOL_DB
 
-#SUBDIRS = test
+SUBDIRS = test
 
 symbol_db_datadir = $(anjuta_data_dir)
 symbol_db_data_DATA = tables.sql
@@ -55,7 +55,9 @@
 	symbol-db-view-search.h \
 	symbol-db-view-search.c \
     symbol-db-engine-iterator-node.h \
-	symbol-db-engine-iterator-node.c
+	symbol-db-engine-iterator-node.c \
+	symbol-db-prefs.c \
+	symbol-db-prefs.h
 
 libanjuta_symbol_db_la_LDFLAGS = $(ANJUTA_PLUGIN_LDFLAGS)
 

Modified: branches/anjuta-symbol-db/plugins/symbol-db/plugin.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/plugin.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/plugin.c	Thu Mar 27 22:19:35 2008
@@ -1,7 +1,7 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 /*
  * plugin.c
- * Copyright (C) Massimo Cora' 2007 <maxcvs email it>
+ * Copyright (C) Massimo Cora' 2007-2008 <maxcvs email it>
  * 
  * plugin.c is free software.
  * 
@@ -47,9 +47,8 @@
 #include "symbol-db-view-search.h"
 #include "symbol-db-engine.h"
 #include "symbol-db-engine-iterator.h"
+#include "symbol-db-prefs.h"
 
-#define GLADE_FILE PACKAGE_DATA_DIR"/glade/anjuta-symbol-db.glade"
-#define GLADE_ROOT "symbol_prefs"
 #define ICON_FILE "anjuta-symbol-db-plugin-48.png"
 
 #define TIMEOUT_INTERVAL_SYMBOLS_UPDATE		10000
@@ -59,6 +58,9 @@
 #define CTAGS_PATH			"/usr/bin/ctags"
 #define CHOOSER_WIDGET		"preferences_folder:text:/:0:symboldb.root"
 
+#define LOCAL_ANJUTA_GLOBAL_DB_DIRECTORY 	"/.anjuta"
+
+
 static gpointer parent_class;
 static gboolean need_symbols_update = FALSE;
 static gchar prev_char_added = ' ';
@@ -136,7 +138,6 @@
 		GPtrArray *real_files_list;
 		GPtrArray *text_buffers;
 		GPtrArray *buffer_sizes;
-		gchar *project_name;
 								
 		gchar * local_path = gnome_vfs_get_local_path_from_uri (uri);
 
@@ -149,14 +150,11 @@
 		buffer_sizes = g_ptr_array_new ();
 		g_ptr_array_add (buffer_sizes, (gpointer)buffer_size);	
 
-		project_name = symbol_db_engine_get_opened_project_name (sdb_plugin->sdbe);
-
-		symbol_db_engine_update_buffer_symbols (sdb_plugin->sdbe,
-												project_name,
+		symbol_db_engine_update_buffer_symbols (sdb_plugin->sdbe_project,
+												sdb_plugin->project_opened,
 												real_files_list,
 												text_buffers,
 												buffer_sizes);
-		g_free (project_name);
 												
 		g_free (uri);
 	}
@@ -293,7 +291,7 @@
 			old_uri = NULL;
 
 		/* files_array will be freed once updating has taken place */
-		symbol_db_engine_update_files_symbols (sdb_plugin->sdbe, 
+		symbol_db_engine_update_files_symbols (sdb_plugin->sdbe_project, 
 				sdb_plugin->project_root_dir, files_array, TRUE);
 		g_hash_table_insert (sdb_plugin->editor_connected, editor,
 							 g_strdup (saved_uri));
@@ -349,7 +347,7 @@
 	 
 	symbol_db_view_locals_update_list (
 				SYMBOL_DB_VIEW_LOCALS (sdb_plugin->dbv_view_tree_locals),
-				 sdb_plugin->sdbe, local_path);
+				 sdb_plugin->sdbe_project, local_path);
 				 
 	if (g_hash_table_lookup (sdb_plugin->editor_connected, editor) == NULL)
 	{
@@ -429,7 +427,7 @@
 
 	line = symbol_db_view_locals_get_line (SYMBOL_DB_VIEW_LOCALS (
 									sdb_plugin->dbv_view_tree_locals), 
-										   sdb_plugin->sdbe,
+										   sdb_plugin->sdbe_project,
 										   iter);
 
 	DEBUG_PRINT ("got line %d", line);
@@ -458,7 +456,7 @@
 	gchar *file;
 
 	if (symbol_db_view_get_file_and_line (
-			SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), sdb_plugin->sdbe,
+			SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), sdb_plugin->sdbe_project,
 							iter, &line, &file) == FALSE)
 	{
 		g_warning ("goto_global_tree_iter (): error while trying to get file/line");
@@ -546,7 +544,7 @@
 	DEBUG_PRINT ("on_global_treeview_row_expanded ()");
 
 	symbol_db_view_row_expanded (SYMBOL_DB_VIEW (user_data->dbv_view_tree),
-								user_data->sdbe, iter);
+								user_data->sdbe_project, iter);
 }
 
 static void
@@ -558,7 +556,7 @@
 	DEBUG_PRINT ("on_global_treeview_row_collapsed ()");
 	
 	symbol_db_view_row_collapsed (SYMBOL_DB_VIEW (user_data->dbv_view_tree),
-								user_data->sdbe, iter);
+								user_data->sdbe_project, iter);
 	
 }
 
@@ -629,8 +627,8 @@
 					 filename + strlen(sdb_plugin->project_root_dir) );
 		DEBUG_PRINT ("project_root_dir %s", sdb_plugin->project_root_dir );
 		
-		symbol_db_engine_add_new_files (sdb_plugin->sdbe, 
-			sdb_plugin->project_root_dir, files_array, languages_array, TRUE);
+		symbol_db_engine_add_new_files (sdb_plugin->sdbe_project, 
+			sdb_plugin->project_opened, files_array, languages_array, TRUE);
 		
 		g_free (filename);
 		g_ptr_array_free (files_array, TRUE);
@@ -657,7 +655,7 @@
 		DEBUG_PRINT ("gonna removing %s", 
 					 filename + strlen(sv_plugin->project_root_dir));
 		DEBUG_PRINT ("project_root_dir %s", sv_plugin->project_root_dir );
-		symbol_db_engine_remove_file (sv_plugin->sdbe, 
+		symbol_db_engine_remove_file (sv_plugin->sdbe_project, 
 			sv_plugin->project_root_dir, filename);
 		
 		g_free (filename);
@@ -717,14 +715,14 @@
 	/* re-enable signals receiving on local-view */
 	symbol_db_view_locals_recv_signals_from_engine (
 						SYMBOL_DB_VIEW_LOCALS (sdb_plugin->dbv_view_tree_locals), 
-								 sdb_plugin->sdbe, TRUE);
+								 sdb_plugin->sdbe_project, TRUE);
 
 	/* and on global view */
 	symbol_db_view_recv_signals_from_engine (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), 
-								 sdb_plugin->sdbe, TRUE);
+								 sdb_plugin->sdbe_project, TRUE);
 	
 	/* re-active global symbols */
-	symbol_db_view_open (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), sdb_plugin->sdbe);
+	symbol_db_view_open (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), sdb_plugin->sdbe_project);
 	
 	/* disconnect this coz it's not important after the process of importing */
 	g_signal_handlers_disconnect_by_func (dbe, on_single_file_scan_end, data);																 
@@ -754,13 +752,13 @@
 	 */
 	symbol_db_view_locals_recv_signals_from_engine (																
 				SYMBOL_DB_VIEW_LOCALS (sdb_plugin->dbv_view_tree_locals), 
-								 sdb_plugin->sdbe, FALSE);
+								 sdb_plugin->sdbe_project, FALSE);
 
 	symbol_db_view_recv_signals_from_engine (																
 				SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), 
-								 sdb_plugin->sdbe, FALSE);
+								 sdb_plugin->sdbe_project, FALSE);
 				
-	g_signal_connect (G_OBJECT (sdb_plugin->sdbe), "scan-end",
+	g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "scan-end",
 		  G_CALLBACK (on_importing_project_end), plugin);				
 
 	lang_manager =	anjuta_shell_get_interface (plugin->shell, IAnjutaLanguage, 
@@ -813,10 +811,10 @@
 	/* connect to receive signals on single file scan complete. We'll
 	 * update a status bar notifying the user about the status
 	 */
-	g_signal_connect (G_OBJECT (sdb_plugin->sdbe), "single-file-scan-end",
+	g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "single-file-scan-end",
 		  G_CALLBACK (on_single_file_scan_end), plugin);
 	
-	symbol_db_engine_add_new_files (sdb_plugin->sdbe, root_dir,
+	symbol_db_engine_add_new_files (sdb_plugin->sdbe_project, sdb_plugin->project_opened,
 					sources_array, languages_array, TRUE);
 			
 	g_ptr_array_foreach (languages_array, (GFunc)g_free, NULL);
@@ -845,13 +843,13 @@
 	 */
 	symbol_db_view_locals_recv_signals_from_engine (																
 				SYMBOL_DB_VIEW_LOCALS (sdb_plugin->dbv_view_tree_locals), 
-								 sdb_plugin->sdbe, FALSE);
+								 sdb_plugin->sdbe_project, FALSE);
 
 	symbol_db_view_recv_signals_from_engine (																
 				SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), 
-								 sdb_plugin->sdbe, FALSE);
+								 sdb_plugin->sdbe_project, FALSE);
 				
-	g_signal_connect (G_OBJECT (sdb_plugin->sdbe), "scan-end",
+	g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "scan-end",
 		  G_CALLBACK (on_importing_project_end), plugin);				
 				
 	lang_manager =	anjuta_shell_get_interface (plugin->shell, IAnjutaLanguage, 
@@ -889,7 +887,7 @@
 		if (local_filename == NULL)
 			continue;
 					
-		/* check if it's already present in the list. This to avoid
+		/* check if it's already present in the list. This avoids
 		 * duplicates.
 		 */
 		if (g_hash_table_lookup (check_unique_file, 
@@ -943,10 +941,10 @@
 	/* connect to receive signals on single file scan complete. We'll
 	 * update a status bar notifying the user about the status
 	 */
-	g_signal_connect (G_OBJECT (sdb_plugin->sdbe), "single-file-scan-end",
+	g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "single-file-scan-end",
 		  G_CALLBACK (on_single_file_scan_end), plugin);
 	
-	symbol_db_engine_add_new_files (sdb_plugin->sdbe, root_dir,
+	symbol_db_engine_add_new_files (sdb_plugin->sdbe_project, sdb_plugin->project_opened,
 					sources_array, languages_array, TRUE);
 				
 	g_hash_table_unref (check_unique_file);
@@ -973,13 +971,20 @@
 	pm = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell,
 									 IAnjutaProjectManager, NULL);
 	
+		
 	g_free (sdb_plugin->project_root_uri);
 	sdb_plugin->project_root_uri = NULL;
 	root_uri = g_value_get_string (value);
+	
 	if (root_uri)
 	{
 		gchar *root_dir = gnome_vfs_get_local_path_from_uri (root_uri);
-		DEBUG_PRINT ("Symbol-DB: added project %s", root_dir);
+		DEBUG_PRINT ("Symbol-DB: added project root_dir %s, name %s", root_dir, name);
+		
+		/* FIXME: where's the project name itself? */
+		DEBUG_PRINT ("FIXME: where's the project name itself? ");
+		sdb_plugin->project_opened = g_strdup (root_dir);
+		
 		if (root_dir)
 		{
 			gboolean needs_sources_scan = FALSE;
@@ -995,7 +1000,7 @@
 			/* is it a fresh-new project? is it an imported project with 
 			 * no 'new' symbol-db database but the 'old' one symbol-browser? 
 			 */
-			if (symbol_db_engine_db_exists (sdb_plugin->sdbe, root_dir) == FALSE)
+			if (symbol_db_engine_db_exists (sdb_plugin->sdbe_project, root_dir) == FALSE)
 			{
 				DEBUG_PRINT ("Symbol-DB: project did not exist");
 				needs_sources_scan = TRUE;
@@ -1006,38 +1011,36 @@
 				project_exist = TRUE;
 			}
 
-			if (symbol_db_engine_open_db (sdb_plugin->sdbe, root_dir) == FALSE)
+			/* we'll use the same values for db_directory and project_directory */
+			DEBUG_PRINT ("opening db %s and project_dir %s", root_dir, root_dir);
+			if (symbol_db_engine_open_db (sdb_plugin->sdbe_project, root_dir, root_dir) == FALSE)
 				g_error ("Symbol-DB: error in opening db");
 
 			/* if project did not exist add a new project */
 			if (project_exist == FALSE)
 			{
 				DEBUG_PRINT ("Symbol-DB: creating new project.");
-				symbol_db_engine_add_new_project (sdb_plugin->sdbe,
-												  NULL,	/* still no workspace */
-												  root_dir);
-			}			
-
-			/* open the project. we can do this only if the db was loaded */
-			if (symbol_db_engine_open_project (sdb_plugin->sdbe, root_dir) == FALSE)
-			{
-				g_error ("Symbol-DB: error in opening project");
+				symbol_db_engine_add_new_project (sdb_plugin->sdbe_project,
+												  NULL,	/* still no workspace logic */
+												  sdb_plugin->project_opened);
 			}
 
 			/* we need an import */
 			if (needs_sources_scan == TRUE)
 			{
-				do_import_sources (plugin, pm, root_dir);
+				DEBUG_PRINT ("Symbol-DB: importing sources...");
+				do_import_sources (plugin, pm, root_dir);				
 			}
 			else	/* no import needed. */
 			{								
 				/* we may have aborted the scan of sources ..*/
 				GPtrArray *sources_array = NULL;
 				
-				sources_array = symbol_db_engine_get_files_with_zero_symbols (sdb_plugin->sdbe);
+				sources_array = symbol_db_engine_get_files_with_zero_symbols (sdb_plugin->sdbe_project);
 
 				if (sources_array != NULL && sources_array->len > 0) 
 				{
+					DEBUG_PRINT ("do_import_sources_after_abort ");
 					do_import_sources_after_abort (plugin, root_dir, sources_array);
 					
 					g_ptr_array_foreach (sources_array, (GFunc)g_free, NULL);
@@ -1045,13 +1048,13 @@
 				}
 
 				/* Update the symbols */
-				symbol_db_engine_update_project_symbols (sdb_plugin->sdbe, root_dir);
+				symbol_db_engine_update_project_symbols (sdb_plugin->sdbe_project, root_dir);
 			}
 			anjuta_status_progress_tick (status, NULL, _("Populating symbols' db..."));
 			anjuta_status_progress_add_ticks (status, sdb_plugin->files_count);
 			
 			symbol_db_view_open (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree),
-								 sdb_plugin->sdbe);
+								 sdb_plugin->sdbe_project);
 
 			/* root dir */
 			sdb_plugin->project_root_dir = root_dir;
@@ -1099,30 +1102,48 @@
 	symbol_db_view_clear_cache (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree));
 	
 	/* don't forget to close the project */
-	symbol_db_engine_close_project (sdb_plugin->sdbe, 
-									sdb_plugin->project_root_dir);
+	symbol_db_engine_close_db (sdb_plugin->sdbe_project);
 
 	g_free (sdb_plugin->project_root_uri);
 	g_free (sdb_plugin->project_root_dir);
+	g_free (sdb_plugin->project_opened);
 	sdb_plugin->project_root_uri = NULL;
-	sdb_plugin->project_root_dir = NULL;
+	sdb_plugin->project_root_dir = NULL;	
+	sdb_plugin->project_opened = NULL;
 }
 
 static gboolean
 symbol_db_activate (AnjutaPlugin *plugin)
 {
 	SymbolDBPlugin *symbol_db;
+	gchar *home_anjuta_dir;
 	
 	DEBUG_PRINT ("SymbolDBPlugin: Activating SymbolDBPlugin plugin ...");
+	
+	/* Initialize gda library. */
+	gda_init ("AnjutaGda", NULL, 0, NULL);
 
 	register_stock_icons (plugin);
 
 	symbol_db = ANJUTA_PLUGIN_SYMBOL_DB (plugin);
 	symbol_db->ui = anjuta_shell_get_ui (plugin->shell, NULL);
 	symbol_db->prefs = anjuta_shell_get_preferences (plugin->shell, NULL);
+	symbol_db->prefs_list_store = NULL;
+	symbol_db->pkg_config_launcher = NULL;
+	symbol_db->project_opened = NULL;
+	
+	/* create SymbolDBEngine(s) */
+	symbol_db->sdbe_project = symbol_db_engine_new ();
+	
+	/* the globals one too */
+	symbol_db->sdbe_globals = symbol_db_engine_new ();
+	/* open it */
+	home_anjuta_dir = g_strdup_printf ("%s%s", g_get_home_dir(),
+									   LOCAL_ANJUTA_GLOBAL_DB_DIRECTORY);
+	symbol_db_engine_open_db (symbol_db->sdbe_globals, 
+							  home_anjuta_dir, "/");
+	g_free (home_anjuta_dir);
 	
-	/* create SymbolDBEngine */
-	symbol_db->sdbe = symbol_db_engine_new ();
 	
 	/* Create widgets */
 	symbol_db->dbv_notebook = gtk_notebook_new();
@@ -1140,7 +1161,7 @@
 	/* activate signals receiving by default */
 	symbol_db_view_locals_recv_signals_from_engine (
 					SYMBOL_DB_VIEW_LOCALS (symbol_db->dbv_view_tree_locals), 
-											 symbol_db->sdbe, TRUE);										 
+											 symbol_db->sdbe_project, TRUE);										 
 
 	g_object_add_weak_pointer (G_OBJECT (symbol_db->dbv_view_tree_locals),
 							   (gpointer)&symbol_db->dbv_view_tree_locals);
@@ -1167,7 +1188,7 @@
 	/* activate signals receiving by default */
 	symbol_db_view_recv_signals_from_engine (
 					SYMBOL_DB_VIEW (symbol_db->dbv_view_tree), 
-											 symbol_db->sdbe, TRUE);										 
+											 symbol_db->sdbe_project, TRUE);										 
 
 	g_signal_connect (G_OBJECT (symbol_db->dbv_view_tree), "row-activated",
 					  G_CALLBACK (on_global_treeview_row_activated), plugin);
@@ -1183,7 +1204,7 @@
 	
 	/* Search symbols */
 	symbol_db->dbv_view_tree_search =
-		(GtkWidget*) symbol_db_view_search_new (symbol_db->sdbe);
+		(GtkWidget*) symbol_db_view_search_new (symbol_db->sdbe_project);
 	symbol_db->dbv_view_search_tab_label = gtk_label_new (_("Search" ));
 
 	g_signal_connect (G_OBJECT (symbol_db->dbv_view_tree_search), "symbol-selected",
@@ -1240,8 +1261,14 @@
 
 	DEBUG_PRINT ("SymbolDBPlugin: Dectivating SymbolDBPlugin plugin ...");
 	DEBUG_PRINT ("SymbolDBPlugin: destroying engine ...");
-	g_object_unref (sdb_plugin->sdbe);
-	sdb_plugin->sdbe = NULL;
+	g_object_unref (sdb_plugin->sdbe_project);
+	sdb_plugin->sdbe_project = NULL;
+	
+	g_object_unref (sdb_plugin->sdbe_globals);
+	sdb_plugin->sdbe_globals = NULL;
+	
+	g_free (sdb_plugin->project_opened);
+	sdb_plugin->project_opened = NULL;
 
 	/* disconnect some signals */
 	g_signal_handlers_disconnect_by_func (G_OBJECT (sdb_plugin->dbv_view_tree_locals),
@@ -1261,6 +1288,18 @@
 		sdb_plugin->editor_connected = NULL;
 	}
 	
+	if (sdb_plugin->pkg_config_launcher) 
+	{
+		g_object_unref (sdb_plugin->pkg_config_launcher);
+		sdb_plugin->pkg_config_launcher = NULL;
+	}
+		
+	if (sdb_plugin->prefs_list_store)
+	{
+		g_object_unref (sdb_plugin->prefs_list_store);
+		sdb_plugin->prefs_list_store = NULL;
+	}
+	
 	/* Remove watches */
 	anjuta_plugin_remove_watch (plugin, sdb_plugin->root_watch_id, FALSE);
 	anjuta_plugin_remove_watch (plugin, sdb_plugin->editor_watch_id, TRUE);
@@ -1335,7 +1374,7 @@
 	GPtrArray *filter_array;
 
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (sm);
-	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe);
+	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe_project);
 	
 	if (global_search == FALSE)
 	{
@@ -1378,7 +1417,7 @@
 	SymbolDBEngineIterator *iterator;
 
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (sm);
-	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe);
+	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe_project);
 	
 	node = SYMBOL_DB_ENGINE_ITERATOR_NODE (symbol);
 	
@@ -1405,7 +1444,7 @@
 	SymbolDBEngineIterator *iterator;
 
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (sm);
-	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe);
+	dbe = SYMBOL_DB_ENGINE (sdb_plugin->sdbe_project);
 	
 	node = SYMBOL_DB_ENGINE_ITERATOR_NODE (symbol);
 	
@@ -1425,78 +1464,18 @@
 	iface->get_class_parents = isymbol_manager_get_class_parents;
 }
 
-static void 
-on_prefs_executable_changed (GtkFileChooser *chooser,
-                             gpointer user_data)
-{
-	gchar *new_file;
-	
-	new_file = gtk_file_chooser_get_filename (chooser);
-	DEBUG_PRINT ("on_prefs_executable_changed ()");
-	DEBUG_PRINT ("new file selected %s", new_file);
-	anjuta_preferences_set (ANJUTA_PREFERENCES (user_data), CTAGS_PREFS_KEY,
-							new_file);
-	
-	g_free (new_file);
-}
-
-static void
-on_gconf_notify_prefs (GConfClient *gclient, guint cnxn_id,
-					   GConfEntry *entry, gpointer user_data)
-{
-	DEBUG_PRINT ("on_gconf_notify_prefs ()");
-}
 
 static void
 ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences* prefs, GError** e)
 {
-	GladeXML *gxml;
-	GtkWidget *fchooser;
-	SymbolDBPlugin *sdb_plugin;	
-	gchar *ctags_value;
-	
 	DEBUG_PRINT ("SymbolDB: ipreferences_merge");	
-	
-	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (ipref);
-	
-	/* Create the preferences page */
-	gxml = glade_xml_new (GLADE_FILE, GLADE_ROOT, NULL);	
-		
-	fchooser = 	glade_xml_get_widget (gxml, CHOOSER_WIDGET);
-			
-	anjuta_preferences_add_page (prefs, gxml, GLADE_ROOT, _("Symbol Database"),  
-								 ICON_FILE);
-	ctags_value = anjuta_preferences_get (prefs, CTAGS_PREFS_KEY);
-	
-	if (ctags_value == NULL) 
-	{
-		ctags_value = g_strdup (CTAGS_PATH);
-	}
-	
-	if (gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fchooser), ctags_value) 
-						== FALSE )
-	{
-		DEBUG_PRINT ("error: could not select file uri with gtk_file_chooser_select_filename ()");
-	}
-	
-	g_signal_connect (G_OBJECT (fchooser), "selection-changed",
-					  G_CALLBACK (on_prefs_executable_changed ), prefs);
-	
-	sdb_plugin->prefs_notify_id = anjuta_preferences_notify_add (prefs, CTAGS_PREFS_KEY, 
-											   on_gconf_notify_prefs, prefs, NULL);	
-	g_object_unref (gxml);
-	g_free (ctags_value);
+	symbol_db_prefs_init (ANJUTA_PLUGIN_SYMBOL_DB (ipref), prefs);
 }
 
 static void
 ipreferences_unmerge(IAnjutaPreferences* ipref, AnjutaPreferences* prefs, GError** e)
 {
-	SymbolDBPlugin *sdb_plugin;	
-
-	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (ipref);
-	
-	anjuta_preferences_notify_remove(prefs, sdb_plugin->prefs_notify_id);
-	anjuta_preferences_remove_page(prefs, _("Symbol Database"));
+	symbol_db_prefs_finalize (ANJUTA_PLUGIN_SYMBOL_DB (ipref), prefs);
 }
 
 static void

Modified: branches/anjuta-symbol-db/plugins/symbol-db/plugin.h
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/plugin.h	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/plugin.h	Thu Mar 27 22:19:35 2008
@@ -26,6 +26,7 @@
 #define _SYMBOL_DB_H_
 
 #include <libanjuta/anjuta-plugin.h>
+#include <libanjuta/anjuta-launcher.h>
 #include "symbol-db-engine.h"
 #include "symbol-db-engine-iterator.h"
 
@@ -47,6 +48,9 @@
 	AnjutaPlugin parent;
 	AnjutaUI *ui;
 	AnjutaPreferences *prefs;
+	GtkListStore *prefs_list_store;
+	AnjutaLauncher *pkg_config_launcher;
+//	AnjutaLauncher *cflags_launcher;
 	
 	gint prefs_notify_id;
 	
@@ -57,9 +61,13 @@
 	guint editor_watch_id;
 	gchar *project_root_uri;
 	gchar *project_root_dir;
+	gchar *project_opened;
 	
-	/* Symbol's engine connection to database. */
-	SymbolDBEngine *sdbe;
+	/* Symbol's engine connection to database. Instance for local project */
+	SymbolDBEngine *sdbe_project;
+	
+	/* global's one */
+	SymbolDBEngine *sdbe_globals;
 	
 	GtkWidget *dbv_notebook;          	/* symbol main window [gtk_notebook] */	
 	GtkWidget *scrolled_global; 		/* symbol view scrolledwindow for global

Modified: branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator-node.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator-node.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator-node.c	Thu Mar 27 22:19:35 2008
@@ -91,13 +91,11 @@
 {
 	SymbolDBEngineIteratorNodePriv *priv;
 	const GValue* value;
-	GdaParameter *par;
 	
 	g_return_val_if_fail (dbin != NULL, -1);
 	priv = dbin->priv;
 	
-	par = gda_data_model_iter_get_param_for_column (priv->data_iter, 0);
-	value = gda_parameter_get_value (par);	
+	value = gda_data_model_iter_get_value_at (priv->data_iter, 0);
 	
 	return value != NULL && G_VALUE_HOLDS_INT (value)
 		? g_value_get_int (value) : -1;
@@ -111,13 +109,11 @@
 {
 	SymbolDBEngineIteratorNodePriv *priv;
 	const GValue* value;
-	GdaParameter *par;
 	
 	g_return_val_if_fail (dbin != NULL, NULL);
 	priv = dbin->priv;
 	
-	par = gda_data_model_iter_get_param_for_column (priv->data_iter, 1);
-	value = gda_parameter_get_value (par);	
+	value = gda_data_model_iter_get_value_at (priv->data_iter, 1);
 	
 	return value != NULL && G_VALUE_HOLDS_STRING (value)
 		? g_value_get_string (value) : NULL;
@@ -131,13 +127,11 @@
 {
 	SymbolDBEngineIteratorNodePriv *priv;
 	const GValue* value;
-	GdaParameter *par;
 	
 	g_return_val_if_fail (dbin != NULL, -1);
 	priv = dbin->priv;
 	
-	par = gda_data_model_iter_get_param_for_column (priv->data_iter, 2);
-	value = gda_parameter_get_value (par);	
+	value = gda_data_model_iter_get_value_at (priv->data_iter, 2);
 	
 	return value != NULL && G_VALUE_HOLDS_INT (value)
 		? g_value_get_int (value) : -1;
@@ -152,15 +146,12 @@
 	SymbolDBEngineIteratorNodePriv *priv;
 	const GValue* value;
 	
-	GdaParameter *par;
-	
 	g_return_val_if_fail (dbin != NULL, FALSE);
 	priv = dbin->priv;
 	
-	par = gda_data_model_iter_get_param_for_column (priv->data_iter, 3);
-	value = gda_parameter_get_value (par);	
+	value = gda_data_model_iter_get_value_at (priv->data_iter, 3);
 	
-	if (value != NULL)
+	if (value != NULL && G_VALUE_HOLDS_INT (value))
 		return g_value_get_int (value) == 1 ? TRUE : FALSE;
 	
 	return FALSE;
@@ -174,13 +165,11 @@
 {
 	SymbolDBEngineIteratorNodePriv *priv;
 	const GValue* value;
-	GdaParameter *par;
 	
 	g_return_val_if_fail (dbin != NULL, NULL);
 	priv = dbin->priv;
 	
-	par = gda_data_model_iter_get_param_for_column (priv->data_iter, 4);
-	value = gda_parameter_get_value (par);	
+	value = gda_data_model_iter_get_value_at (priv->data_iter, 4);
 	
 	return value != NULL && G_VALUE_HOLDS_STRING (value)
 		? g_value_get_string (value) : NULL;
@@ -191,72 +180,64 @@
 												   gint sym_info)
 {
 	SymbolDBEngineIteratorNodePriv *priv;
-	GdaParameter *par = NULL;
-	GdaParameter *res = NULL;
-	gint column = -1;
+	const GValue *value = NULL;
 	
 	g_return_val_if_fail (dbin != NULL, NULL);
 	priv = dbin->priv;
 	
 	if (sym_info & SYMINFO_FILE_PATH)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "file_path");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "file_path");
 	}	
 	else if (sym_info & SYMINFO_LANGUAGE)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "language_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "language_name");		
 	}
 	else if (sym_info & SYMINFO_IMPLEMENTATION)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "implementation_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "implementation_name");
 	}
 	else if (sym_info & SYMINFO_ACCESS)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "access_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "access_name");
 	}
 	else if (sym_info & SYMINFO_KIND)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "kind_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "kind_name");
 	}
 	else if (sym_info & SYMINFO_TYPE)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "type");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "type");
 	}
 	else if (sym_info & SYMINFO_TYPE_NAME)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "type_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "type_name");
 	}
 	else if (sym_info & SYMINFO_PROJECT_NAME)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "project_name");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "project_name");
 	}	
 	else if (sym_info & SYMINFO_FILE_IGNORE)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "file_ignore_type");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "file_ignore_type");
 	}
 	else if (sym_info & SYMINFO_FILE_INCLUDE)
 	{
-		par = gda_parameter_list_find_param (GDA_PARAMETER_LIST(priv->data_iter),
-											 "file_include_type");
+		value = gda_data_model_iter_get_value_for_field (priv->data_iter, 
+														 "file_include_type");
 	}
 
-	if (par != NULL) 
-	{
-		column = gda_data_model_iter_get_column_for_param (priv->data_iter, par);
-		res = gda_data_model_iter_get_param_for_column (priv->data_iter, column);
-		return gda_parameter_get_value_str (res);
-	}
-	else
-		return NULL;	
+	return value != NULL && G_VALUE_HOLDS_STRING (value)
+		? g_value_get_string (value) : NULL;
 }
 
 void

Modified: branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine-iterator.c	Thu Mar 27 22:19:35 2008
@@ -92,7 +92,7 @@
 	priv = dbi->priv;
 	
 	priv->data_model = model;
-	priv->data_iter = gda_data_model_iter_new (model);
+	priv->data_iter = gda_data_model_create_iter (model);
 	
 	/* because gda_data_model_get_n_rows () could be cpu-intensive, we'll 
 	 * proxy this value, e.g. it's calculated if it is really needed */

Modified: branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.c	Thu Mar 27 22:19:35 2008
@@ -114,6 +114,7 @@
 #include <libanjuta/anjuta-debug.h>
 #include <libanjuta/anjuta-launcher.h>
 #include <libgda/libgda.h>
+#include <sql-parser/gda-sql-parser.h>
 #include "readtags.h"
 #include "symbol-db-engine.h"
 #include "symbol-db-engine-iterator.h"
@@ -131,7 +132,7 @@
 // FIXME: detect it by prefs
 #define CTAGS_PATH		"/usr/bin/ctags"
 
-#define THREADS_MONITOR_LAUNCH_DELAY	200
+#define THREADS_MONITOR_LAUNCH_DELAY	10
 #define THREADS_MAX_CONCURRENT			15
 #define TRIGGER_SIGNALS_DELAY			500
 #define	TRIGGER_MAX_CLOSURE_RETRIES		30
@@ -183,6 +184,8 @@
 	PREP_QUERY_UPDATE_SYMBOL_SCOPE_ID,
 	PREP_QUERY_GET_SYMBOL_ID_BY_UNIQUE_INDEX_KEY,
 	PREP_QUERY_UPDATE_SYMBOL_ALL,
+	PREP_QUERY_REMOVE_NON_UPDATED_SYMBOLS,
+	PREP_QUERY_RESET_UPDATE_FLAG_SYMBOLS,
 	PREP_QUERY_GET_REMOVED_IDS,
 	PREP_QUERY_TMP_REMOVED_DELETE_ALL,
 	PREP_QUERY_COUNT
@@ -193,7 +196,7 @@
 {
 	query_type query_id;
 	gchar *query_str;
-	GdaQuery *query;
+	GdaStatement *stmt;
 
 } query_node;
 
@@ -461,6 +464,20 @@
 	 "gint */",
 	 NULL
 	},
+	{
+	 PREP_QUERY_REMOVE_NON_UPDATED_SYMBOLS,
+	 "DELETE FROM symbol WHERE file_defined_id = (SELECT file_id FROM file "
+	 "WHERE file_path = ## /* name:'filepath' type:gchararray */) "
+	 "AND update_flag = 0",
+	 NULL
+	},
+	{
+	 PREP_QUERY_RESET_UPDATE_FLAG_SYMBOLS,
+	 "UPDATE symbol SET update_flag = 0 "
+	 "WHERE file_defined_id = (SELECT file_id FROM file WHERE "
+	 "file_path = ## /* name:'filepath' type:gchararray */)",
+	 NULL
+	},
 	/* -- tmp_removed -- */
 	{
 	 PREP_QUERY_GET_REMOVED_IDS,
@@ -493,10 +510,9 @@
 struct _SymbolDBEnginePriv
 {
 	GdaConnection *db_connection;
-	GdaClient *gda_client;
-	gchar *dsn_name;
-	gchar *project_name;
-	gchar *data_source;
+	GdaSqlParser *sql_parser;
+	gchar *db_directory;
+	gchar *project_directory;
 
 	GAsyncQueue *scan_queue;	
 	GAsyncQueue *updated_symbols_id;
@@ -532,9 +548,8 @@
 	
 } ThreadDataOutput;
 
-typedef struct _UpdateFileSymbolsData {
-
-	
+typedef struct _UpdateFileSymbolsData {	
+	gchar *project;
 	gboolean update_prj_analyse_time;
 	GPtrArray * files_path;
 	
@@ -551,91 +566,103 @@
 						   gboolean sym_update);
 
 
-/**
- * Malerba here http://bugzilla.gnome.org/show_bug.cgi?id=488860 says that
- * GdaQueries can be seen by a provider as prepared queries. I'm not 100% sure
- * about this but anyway give it a try.
- */
-static void inline
-sdb_engine_execute_non_select_sql (SymbolDBEngine * dbe, const gchar * buffer)
+static gboolean 
+sdb_engine_execute_unknown_sql (SymbolDBEngine *dbe, const gchar *sql)
 {
+	GdaStatement *stmt;
+	GObject *res;
 	SymbolDBEnginePriv *priv;
-	GdaQuery *query;
-	GdaObject *obj;
-
-	priv = dbe->priv;
-
-	query = gda_query_new_from_sql (NULL, buffer, NULL);
-	obj = gda_query_execute (query, NULL, FALSE, NULL);
+	
+	priv = dbe->priv;	
+	
+	stmt = gda_sql_parser_parse_string (priv->sql_parser, sql, NULL, NULL);	
 
-	if (obj != NULL)
-	{
-		g_object_unref (obj);
-	}	
+	if (stmt == NULL)
+		return FALSE;
 	
-	if (query != NULL)
+    if ((res = gda_connection_statement_execute (priv->db_connection, 
+												   (GdaStatement*)stmt, 
+												 	NULL,
+													GDA_STATEMENT_MODEL_RANDOM_ACCESS, 
+													NULL, NULL)) == NULL)
 	{
-		g_object_unref (query);
-	}		
+		g_object_unref (stmt);
+		return FALSE;
+	}
+	else 
+	{
+		g_object_unref (res);
+		g_object_unref (stmt);
+		return TRUE;		
+	}
 }
 
-/**
- * User must care to g_object_unref () the returned data_model.
- */
 static GdaDataModel *
-sdb_engine_execute_select_sql (SymbolDBEngine * dbe, const gchar * buffer)
+sdb_engine_execute_select_sql (SymbolDBEngine * dbe, const gchar *sql)
 {
+	GdaStatement *stmt;
+	GdaDataModel *res;
 	SymbolDBEnginePriv *priv;
-	GdaQuery *query;
-	GdaObject *obj;
-
-	priv = dbe->priv;
-
-	query = gda_query_new_from_sql (NULL, buffer, NULL);
+	const gchar *remain;
+	
+	priv = dbe->priv;	
+	
+	stmt = gda_sql_parser_parse_string (priv->sql_parser, sql, &remain, NULL);	
 
-	obj = gda_query_execute (query, NULL, FALSE, NULL);
+	if (stmt == NULL)
+		return NULL;
 	
-	if (query != NULL)
-	{
-		g_object_unref (query);
-	}
+    res = gda_connection_statement_execute_select (priv->db_connection, 
+												   (GdaStatement*)stmt, NULL, NULL);
+	if (!res) 
+		DEBUG_PRINT ("Could not execute query: %s\n", sql);
 	
-	if (GDA_DATA_MODEL (obj) == FALSE)
+	if (remain != NULL)
 	{
-		DEBUG_PRINT ("sdb_engine_execute_select_sql (): returning NULL");
-		if (obj)
-			g_object_unref (obj);
-		return NULL;
-	}
+		/* this shouldn't never happen */		
+		sdb_engine_execute_select_sql (dbe, remain);
+	}	
+	
+    g_object_unref (stmt);
 	
-	return GDA_DATA_MODEL (obj);
+	return res;
 }
 
-
-/**
- * Test the opened project within the dbe plugin and the passed one.
- */
-gboolean inline
-symbol_db_engine_is_project_opened (SymbolDBEngine *dbe, const gchar* project_name)
+static gint
+sdb_engine_execute_non_select_sql (SymbolDBEngine * dbe, const gchar *sql)
 {
+	GdaStatement *stmt;
+    gint nrows;
 	SymbolDBEnginePriv *priv;
-
-	g_return_val_if_fail (dbe != NULL, FALSE);
+	const gchar *remain;	
+	
 	priv = dbe->priv;
+	stmt = gda_sql_parser_parse_string (priv->sql_parser, 
+										sql, &remain, NULL);
+
+	if (stmt == NULL)
+		return -1;
 	
-	if (priv->project_name == NULL)
-		return FALSE;
+	nrows = gda_connection_statement_execute_non_select (priv->db_connection, stmt, 
+														 NULL, NULL, NULL);
+	if (nrows == -1) 
+    	DEBUG_PRINT ("NON SELECT error: %s\n", sql);
+
+	if (remain != NULL) {
+		/* may happen for example when sql is a file-content */
+		sdb_engine_execute_non_select_sql (dbe, remain);
+	}
 	
-	return strcmp (project_name, priv->project_name) == 0 ? TRUE : FALSE;
+	g_object_unref (stmt);
+	return nrows;
 }
 
-
 /**
  * Use a proxy to return an already present or a fresh new prepared query 
  * from static 'query_list'. We should perform actions in the fastest way, because
  * these queries are time-critical.
  */
-static inline const GdaQuery *
+static inline const GdaStatement *
 sdb_engine_get_query_by_id (SymbolDBEngine * dbe, query_type query_id)
 {
 	query_node *node;
@@ -649,17 +676,19 @@
 	
 	node = &query_list[query_id];
 
-	if (node->query == NULL)
+	if (node->stmt == NULL)
 	{
-		DEBUG_PRINT ("generating new query.... %d", query_id);
-		/* create a new GdaQuery */
-		node->query =
-			gda_query_new_from_sql (NULL, node->query_str, NULL);
+		DEBUG_PRINT ("generating new statement.... %d", query_id);
+		/* create a new GdaStatement */
+		node->stmt =
+			gda_sql_parser_parse_string (priv->sql_parser, node->query_str, NULL, 
+										 NULL);
 	}
 
-	return node->query;
+	return node->stmt;
 }
 
+/* DEPRECATED, REMOVED.
 static inline gint
 sdb_engine_get_last_insert_id (SymbolDBEngine * dbe)
 {
@@ -673,7 +702,7 @@
 	g_free (res);
 	return table_id;
 }
-
+*/
 /**
  * Clear the static cached queries data. You should call this function when closing/
  * destroying SymbolDBEngine object.
@@ -691,10 +720,10 @@
 	{
 		node = &query_list[i];
 
-		if (node->query != NULL)
+		if (node->stmt != NULL)
 		{
-			g_object_unref ((gpointer) node->query);
-			node->query = NULL;
+			g_object_unref ((gpointer) node->stmt);
+			node->stmt = NULL;
 		}
 	}
 }
@@ -707,42 +736,39 @@
 	g_return_val_if_fail (dbe != NULL, FALSE);
 	priv = dbe->priv;
 
-	if (priv->gda_client)
-	{
-		gda_client_close_all_connections (priv->gda_client);
-		g_object_unref (priv->gda_client);
-	}
-	priv->gda_client = NULL;	
+	gda_connection_close (priv->db_connection);
 	priv->db_connection = NULL;
 
-	g_free (priv->data_source);
-	priv->data_source = NULL;
-
-	g_free (priv->dsn_name);
-	priv->dsn_name = NULL;
-
+	if (priv->sql_parser != NULL)
+		g_object_unref (priv->sql_parser);
+	
+	g_free (priv->db_directory);
+	priv->db_directory = NULL;
+	
+	g_free (priv->project_directory);
+	priv->project_directory = NULL;
+	
 	return TRUE;
 }
 
 static GTimer *sym_timer_DEBUG  = NULL;
-static gint files_scanned_DEBUG = 0;
+/*static gint files_scanned_DEBUG = 0; */
 
 /**
- * If base_prj_path != NULL then fake_file will not be parsed. Else
- * if fake_file is != NULL we claim and assert that tags contents which are
+ * If fake_file is != NULL we claim and assert that tags contents which are
  * scanned belong to the fake_file in the project.
  * More: the fake_file refers to just one single file and cannot be used
  * for multiple fake_files.
  */
 static void
 sdb_engine_populate_db_by_tags (SymbolDBEngine * dbe, FILE* fd,
-								gchar * base_prj_path, gchar * fake_file_on_db,
+								gchar * fake_file_on_db,
 								gboolean force_sym_update)
 {
 	tagFile *tag_file;
 	tagFileInfo tag_file_info;
 	tagEntry tag_entry;
-	GdaCommand *command;
+/*	GdaCommand *command;*/
 	
 	SymbolDBEnginePriv *priv;
 
@@ -778,7 +804,7 @@
 	while (tagsNext (tag_file, &tag_entry) != TagFailure)
 	{
 		sdb_engine_add_new_symbol (dbe, &tag_entry, fake_file_on_db == NULL ?
-								   base_prj_path : NULL, fake_file_on_db,
+								   priv->project_directory : NULL, fake_file_on_db,
 								   force_sym_update);
 		
 		tags_total_DEBUG ++;
@@ -788,7 +814,7 @@
 	DEBUG_PRINT ("elapsed: %f for (%d) [%f per symbol]", elapsed_DEBUG,
 				 tags_total_DEBUG, elapsed_DEBUG / tags_total_DEBUG);
 
-
+/*
 	if (files_scanned_DEBUG++ > 50)
 	{
 		DEBUG_PRINT ("analyzing...");
@@ -800,8 +826,8 @@
 
 		files_scanned_DEBUG = 0;
 	}
-	
-	DEBUG_PRINT ("EMITTING single-file-scan-end: %s", base_prj_path);
+*/	
+	DEBUG_PRINT ("EMITTING single-file-scan-end");
 	/* notify listeners that another file has been scanned */
 	g_async_queue_push (priv->signals_queue, (gpointer)(SINGLE_FILE_SCAN_END +1));
 	
@@ -871,15 +897,13 @@
 				if (scan_flag == DO_UPDATE_SYMS ||
 					scan_flag == DO_UPDATE_SYMS_AND_EXIT)
 				{
-					sdb_engine_populate_db_by_tags (dbe, priv->shared_mem_file, 
-								priv->data_source, 
+					sdb_engine_populate_db_by_tags (dbe, priv->shared_mem_file,
 								(int)real_file == DONT_FAKE_UPDATE_SYMS ? NULL : real_file, 
 								TRUE);
 				}
 				else 
 				{
-					sdb_engine_populate_db_by_tags (dbe, priv->shared_mem_file, 
-								priv->data_source, 
+					sdb_engine_populate_db_by_tags (dbe, priv->shared_mem_file,
 								(int)real_file == DONT_FAKE_UPDATE_SYMS ? NULL : real_file, 
 								FALSE);					
 				}
@@ -1325,12 +1349,11 @@
 	sdbe->priv = g_new0 (SymbolDBEnginePriv, 1);
 
 	/* initialize some priv data */
-	sdbe->priv->gda_client = NULL;
 	sdbe->priv->db_connection = NULL;
-	sdbe->priv->dsn_name = NULL;
-	sdbe->priv->project_name = NULL;
-	sdbe->priv->data_source = NULL;
-
+	sdbe->priv->sql_parser = NULL;
+	sdbe->priv->db_directory = NULL;
+	sdbe->priv->project_directory = NULL;
+	
 	sdbe->priv->scan_queue = NULL;	
 	sdbe->priv->updated_symbols_id = NULL;
 	sdbe->priv->inserted_symbols_id = NULL;
@@ -1423,9 +1446,6 @@
 	sdbe->priv->garbage_shared_mem_files = g_hash_table_new_full (g_str_hash, g_str_equal, 
 													  g_free, NULL);	
 	
-	/* Initialize gda library. */
-	gda_init ("AnjutaGda", NULL, 0, NULL);
-
 	/* create Anjuta Launcher instance. It will be used for tags parsing. */
 	sdbe->priv->ctags_launcher = NULL;
 }
@@ -1448,8 +1468,6 @@
 	sdb_engine_disconnect_from_db (dbe);
 	sdb_engine_free_cached_queries (dbe);
 	
-	g_free (priv->project_name);
-
 	if (priv->scan_queue)
 	{
 		g_async_queue_unref (priv->scan_queue);
@@ -1460,8 +1478,7 @@
 	{
 		g_async_queue_unref (priv->updated_symbols_id);
 		priv->updated_symbols_id = NULL;
-	}
-	
+	}	
 
 	if (priv->inserted_symbols_id)
 	{
@@ -1473,8 +1490,7 @@
 	{
 		fclose (priv->shared_mem_file);
 		priv->shared_mem_file = NULL; 
-	}
-	
+	}	
 	
 	if (priv->shared_mem_str)
 	{
@@ -1631,50 +1647,21 @@
  */
 static void
 sdb_engine_set_defaults_db_parameters (SymbolDBEngine * dbe)
-{
-	GdaCommand *command;
-	SymbolDBEnginePriv *priv;
-	priv = dbe->priv;
-
-	command = gda_command_new ("PRAGMA page_size = 32768", GDA_COMMAND_TYPE_SQL,
-							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
-	gda_connection_execute_non_select_command (priv->db_connection,
-											   command, NULL, NULL);
-	gda_command_free (command);
-	
-	command = gda_command_new ("PRAGMA cache_size = 12288", GDA_COMMAND_TYPE_SQL,
-							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
-	gda_connection_execute_non_select_command (priv->db_connection,
-											   command, NULL, NULL);
-	gda_command_free (command);
-
-	command = gda_command_new ("PRAGMA synchronous = OFF", GDA_COMMAND_TYPE_SQL,
-							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
-	gda_connection_execute_non_select_command (priv->db_connection,
-											   command, NULL, NULL);
-	gda_command_free (command);
-	
-	command = gda_command_new ("PRAGMA temp_store = MEMORY", GDA_COMMAND_TYPE_SQL,
-							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
-	gda_connection_execute_non_select_command (priv->db_connection,
-											   command, NULL, NULL);
-	gda_command_free (command);
-	
-	command = gda_command_new ("PRAGMA case_sensitive_like = 1", GDA_COMMAND_TYPE_SQL,
-							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
-	gda_connection_execute_non_select_command (priv->db_connection,
-											   command, NULL, NULL);
-	gda_command_free (command);
-	
+{	
+	sdb_engine_execute_unknown_sql (dbe, "PRAGMA page_size = 32768");
+	sdb_engine_execute_unknown_sql (dbe, "PRAGMA cache_size = 12288");
+	sdb_engine_execute_unknown_sql (dbe, "PRAGMA synchronous = OFF");
+	sdb_engine_execute_unknown_sql (dbe, "PRAGMA temp_store = MEMORY");
+	sdb_engine_execute_unknown_sql (dbe, "PRAGMA case_sensitive_like = 1");
 }
 
-/* Will create priv->db_connection, priv->gda_client.
- * Connect to database identified by data_source.
- * Usually data_source is defined also into priv. We let it here as parameter 
+/* Will create priv->db_connection.
+ * Connect to database identified by db_directory.
+ * Usually db_directory is defined also into priv. We let it here as parameter 
  * because it is required and cannot be null.
  */
 static gboolean
-sdb_engine_connect_to_db (SymbolDBEngine * dbe, const gchar * data_source)
+sdb_engine_connect_to_db (SymbolDBEngine * dbe, const gchar *cnc_string)
 {
 	SymbolDBEnginePriv *priv;
 
@@ -1694,26 +1681,28 @@
 		return FALSE;
 	}
 
-	/* create new client */
-	priv->gda_client = gda_client_new ();
-
 	/* establish a connection. If the sqlite file does not exist it will 
 	 * be created 
 	 */
 	priv->db_connection
-		= gda_client_open_connection (priv->gda_client, data_source,
-									  NULL, NULL,
-									  GDA_CONNECTION_OPTIONS_DONT_SHARE, NULL);	
+		= gda_connection_open_from_string ("SQLite", cnc_string, NULL, 
+										   GDA_CONNECTION_OPTIONS_NONE, NULL);	
 	
 	if (!GDA_IS_CONNECTION (priv->db_connection))
 	{
-		g_warning ("could not open connection to %s\n", data_source);
+		g_warning ("Could not open connection to %s\n", cnc_string);
 		return FALSE;
 	}
 
-	gda_dict_set_connection (default_dict, priv->db_connection);
+	priv->sql_parser = gda_connection_create_parser (priv->db_connection);
+	
+	if (!GDA_IS_SQL_PARSER (priv->sql_parser)) 
+	{
+		g_warning ("Could not create sql parser. Check your libgda installation");
+		return FALSE;
+	}
 	
-	DEBUG_PRINT ("connected to database %s", data_source);
+	DEBUG_PRINT ("connected to database %s", cnc_string);
 	return TRUE;
 }
 
@@ -1723,10 +1712,9 @@
  * @param tables_sql_file File containing sql code.
  */
 static gboolean
-sdb_engine_create_db_tables (SymbolDBEngine * dbe, gchar * tables_sql_file)
+sdb_engine_create_db_tables (SymbolDBEngine * dbe, const gchar * tables_sql_file)
 {
 	GError *err;
-	GdaCommand *command;
 	SymbolDBEnginePriv *priv;
 	gchar *contents;
 	gsize sizez;
@@ -1748,12 +1736,15 @@
 		return FALSE;
 	}
 
+	sdb_engine_execute_non_select_sql (dbe, contents);
+	
+	/*
 	command = gda_command_new (contents, GDA_COMMAND_TYPE_SQL,
 							   GDA_COMMAND_OPTION_STOP_ON_ERRORS);
 	gda_connection_execute_non_select_command (priv->db_connection, command,
 											   NULL, NULL);
 	gda_command_free (command);
-
+*/
 	g_free (contents);
 	return TRUE;
 }
@@ -1787,24 +1778,36 @@
 	return TRUE;
 }
 
+gboolean 
+symbol_db_engine_close_db (SymbolDBEngine *dbe)
+{
+	SymbolDBEnginePriv *priv;
+
+	g_return_val_if_fail (dbe != NULL, FALSE);
+	
+	priv = dbe->priv;
+	return sdb_engine_disconnect_from_db (dbe);
+}
+
 /**
  * Open or create a new database at given directory.
  */
 gboolean
-symbol_db_engine_open_db (SymbolDBEngine * dbe, const gchar * prj_directory)
+symbol_db_engine_open_db (SymbolDBEngine * dbe, const gchar * base_db_path,
+						  const gchar * prj_directory)
 {
 	SymbolDBEnginePriv *priv;
-	/* Connection data */
-	gchar *dsn_name;
 	gboolean needs_tables_creation = FALSE;
+	gchar *cnc_string;
 
-	g_return_val_if_fail (prj_directory != NULL, FALSE);
+	g_return_val_if_fail (dbe != NULL, FALSE);
+	g_return_val_if_fail (base_db_path != NULL, FALSE);
 
 	priv = dbe->priv;
 
 	/* check whether the db filename already exists. If it's not the case
 	 * create the tables for the database. */
-	gchar *tmp_file = g_strdup_printf ("%s/%s.db", prj_directory,
+	gchar *tmp_file = g_strdup_printf ("%s/%s.db", base_db_path,
 									   ANJUTA_DB_FILE);
 
 	if (g_file_test (tmp_file, G_FILE_TEST_EXISTS) == FALSE)
@@ -1814,24 +1817,25 @@
 	g_free (tmp_file);
 
 
-	priv->data_source = g_strdup (prj_directory);
+	priv->db_directory = g_strdup (base_db_path);
+	
+	/* save the project_directory */
+	priv->project_directory = g_strdup (prj_directory);
 
-	dsn_name = g_strdup_printf ("DB_DIR=%s;DB_NAME=%s", prj_directory,
+	cnc_string = g_strdup_printf ("DB_DIR=%s;DB_NAME=%s", base_db_path,
 								ANJUTA_DB_FILE);
 
-	if (gda_config_save_data_source (priv->data_source, "SQLite",
-									 dsn_name, "Anjuta Project",
+/*	
+	FIXME: do we really need to save the datasource? 
+	if (gda_config_save_data_source (base_db_path, "SQLite",
+									 cnc_string, "Anjuta Project",
 									 "", "", FALSE) == FALSE)
 	{
 		return FALSE;
 	}
-
-	/* store the dsn name into Priv data. We can avoid to free it here coz it will
-	 * used later again. */
-	priv->dsn_name = dsn_name;
-
+*/
 	DEBUG_PRINT ("symbol_db_engine_open_db (): opening/connecting to database...");
-	sdb_engine_connect_to_db (dbe, priv->data_source);
+	sdb_engine_connect_to_db (dbe, cnc_string);
 
 	if (needs_tables_creation == TRUE)
 	{
@@ -1845,154 +1849,153 @@
 }
 
 /**
- * @return -1 on error. Otherwise the id of table
+ * @return -1 on error. Otherwise the id of tuple
  */
 static gint
-sdb_engine_get_table_id_by_unique_name (SymbolDBEngine * dbe, query_type qtype,
+sdb_engine_get_tuple_id_by_unique_name (SymbolDBEngine * dbe, query_type qtype,
 										gchar * param_key,
 										const GValue * param_value)
 {
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaDataModel *data_model;
 	const GValue *num;
 	gint table_id;
+	SymbolDBEnginePriv *priv;
+	
+	priv = dbe->priv;
 
 	/* get prepared query */
-	if ((query = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
-	{
-		g_warning ("query is null");
-		return -1;
-	}
-
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL
-		== gda_query_get_query_type ((GdaQuery *) query))
+	if ((stmt = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
 	{
-		g_warning ("sdb_engine_get_table_id_by_unique_name: non parsed "
-				   "sql error");
+		g_warning ("Query is null");
 		return -1;
 	}
 
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
-		g_warning ("par_list is NULL!\n");
+		g_warning ("Error on getting parameters");
 		return -1;
 	}
-
-	if ((param = gda_parameter_list_find_param (par_list, param_key)) == NULL)
+	
+	if ((param = gda_set_get_holder (plist, param_key)) == NULL)
 	{
-		g_warning ("sdb_engine_get_table_id_by_unique_name: param is NULL "
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
 				   "from pquery!\n");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_parameter_set_value (param, param_value);
-
+	gda_holder_set_value (param, param_value);
+	
 	/* execute the query with parametes just set */
-	query_result = gda_query_execute ((GdaQuery *) query, par_list, FALSE,
-									 NULL);
-
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result)) <= 0)
-	{
-		if (query_result != NULL)
-			g_object_unref (query_result);
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  plist, NULL);
+		
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
+	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		g_object_unref (plist);
 		return -1;
 	}
 
 	/* get and parse the results. */
-	num = gda_data_model_get_value_at (GDA_DATA_MODEL (query_result), 0, 0);
+	num = gda_data_model_get_value_at (GDA_DATA_MODEL (data_model), 0, 0);
 
 	table_id = g_value_get_int (num);
-	g_object_unref (query_result);
+	g_object_unref (data_model);
+	g_object_unref (plist);
 	return table_id;
 }
 
 /**
- * This is the same as sdb_engine_get_table_id_by_unique_name () but for two
+ * This is the same as sdb_engine_get_tuple_id_by_unique_name () but for two
  * unique parameters. This should be the quickest way. Surely quicker than
  * use g_strdup_printf () with a va_list for example.
  * @return -1 on error. Otherwise the id of table
  *
  */
 static gint
-sdb_engine_get_table_id_by_unique_name2 (SymbolDBEngine * dbe, query_type qtype,
+sdb_engine_get_tuple_id_by_unique_name2 (SymbolDBEngine * dbe, query_type qtype,
 										 gchar * param_key1,
 										 const GValue * value1,
 										 gchar * param_key2,
 										 const GValue * value2)
 {
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaDataModel *data_model;
 	const GValue *num;
 	gint table_id;
+	SymbolDBEnginePriv *priv;
+	
+	priv = dbe->priv;
 
 	/* get prepared query */
-	if ((query = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
-	{
-		g_warning ("query is null");
-		return -1;
-	}
-
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL
-		== gda_query_get_query_type ((GdaQuery *) query))
+	if ((stmt = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
 	{
-		g_warning
-			("sdb_engine_get_table_id_by_unique_name2: non parsed sql error");
+		g_warning ("Query is null");
 		return -1;
 	}
 
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
-		g_warning ("par_list is NULL!\n");
+		g_warning ("Error on getting parameters");
 		return -1;
 	}
 
 	/* look for and set the first parameter */
-	if ((param = gda_parameter_list_find_param (par_list, param_key1)) == NULL)
+	if ((param = gda_set_get_holder (plist, param_key1)) == NULL)
 	{
-		g_warning ("sdb_engine_get_table_id_by_unique_name2: "
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name2: "
 				   "param is NULL from pquery! [par1: %s] [par2: %s]\n",
 				   param_key1, param_key2);
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_parameter_set_value (param, value1);
-
+	gda_holder_set_value (param, value1);
+	
 	/* ...and the second one */
-	if ((param = gda_parameter_list_find_param (par_list, param_key2)) == NULL)
+	if ((param = gda_set_get_holder (plist, param_key2)) == NULL)
 	{
-		g_warning ("param is NULL from pquery!\n");
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name2: "
+				   "param is NULL from pquery! [par1: %s] [par2: %s]\n",
+				   param_key1, param_key2);
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_parameter_set_value (param, value2);
+	gda_holder_set_value (param, value2);
 
 	/* execute the query with parametes just set */
-	query_result = gda_query_execute ((GdaQuery *) query, par_list, 
-												  FALSE, NULL);
-
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		((gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result))) <= 0))
-	{
-		if (query_result != NULL)
-			g_object_unref (query_result);
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  plist, NULL);
+		
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
+	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		g_object_unref (plist);
 		return -1;
 	}
 
 	/* get and parse the results. */
-	num = gda_data_model_get_value_at (GDA_DATA_MODEL (query_result), 0, 0);
+	num = gda_data_model_get_value_at (GDA_DATA_MODEL (data_model), 0, 0);
 
 	table_id = g_value_get_int (num);
-	g_object_unref (query_result);
+	g_object_unref (data_model);
+	g_object_unref (plist);
+	
 	return table_id;
 }
 
 static gint
-sdb_engine_get_table_id_by_unique_name3 (SymbolDBEngine * dbe, query_type qtype,
+sdb_engine_get_tuple_id_by_unique_name3 (SymbolDBEngine * dbe, query_type qtype,
 										 gchar * param_key1,
 										 const GValue * value1,
 										 gchar * param_key2,
@@ -2000,82 +2003,81 @@
 										 gchar * param_key3,
 										 const GValue * value3)
 {
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaDataModel *data_model;
 	const GValue *num;
 	gint table_id;
+	SymbolDBEnginePriv *priv;
+	
+	priv = dbe->priv;
 
 	/* get prepared query */
-	if ((query = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
+	if ((stmt = sdb_engine_get_query_by_id (dbe, qtype)) == NULL)
 	{
-		g_warning ("query is null");
+		g_warning ("Query is null");
 		return -1;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL
-		== gda_query_get_query_type ((GdaQuery *) query))
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
-		g_warning
-			("sdb_engine_get_table_id_by_unique_name2: non parsed sql error");
+		g_warning ("Error on getting parameters");
 		return -1;
 	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	
+	if ((param = gda_set_get_holder (plist, param_key1)) == NULL)
 	{
-		g_warning ("par_list is NULL!\n");
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
+				   "from pquery!\n");
+		g_object_unref (plist);
 		return -1;
 	}
+	gda_holder_set_value (param, value1);
+	
 
-	/* look for and set the first parameter */
-	if ((param = gda_parameter_list_find_param (par_list, param_key1)) == NULL)
+	/* ...and the second one */
+	if ((param = gda_set_get_holder (plist, param_key2)) == NULL)
 	{
-		g_warning ("sdb_engine_get_table_id_by_unique_name2: "
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name2: "
 				   "param is NULL from pquery! [par1: %s] [par2: %s]\n",
 				   param_key1, param_key2);
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_parameter_set_value (param, value1);
-
-	/* ...and the second one */
-	if ((param = gda_parameter_list_find_param (par_list, param_key2)) == NULL)
-	{
-		g_warning ("param is NULL from pquery!\n");
-		return -1;
-	}
-
-	gda_parameter_set_value (param, value2);
+	gda_holder_set_value (param, value2);
 
 	/* ...and the third one */
-	if ((param = gda_parameter_list_find_param (par_list, param_key3)) == NULL)
+	if ((param = gda_set_get_holder (plist, param_key3)) == NULL)
 	{
-		g_warning ("param is NULL from pquery!\n");
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name2: "
+				   "param is NULL from pquery! [par1: %s] [par2: %s]\n",
+				   param_key1, param_key3);
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_parameter_set_value (param, value3);
-
-
+	gda_holder_set_value (param, value3);
+		
 	/* execute the query with parametes just set */
-	query_result = gda_query_execute ((GdaQuery *) query, par_list, 
-												 FALSE, NULL);
-
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result)) <= 0)
-	{
-
-		if (query_result != NULL)
-			g_object_unref (query_result);
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  plist, NULL);
+		
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
+	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		g_object_unref (plist);
 		return -1;
 	}
 
 	/* get and parse the results. */
-	num = gda_data_model_get_value_at (GDA_DATA_MODEL (query_result), 0, 0);
+	num = gda_data_model_get_value_at (GDA_DATA_MODEL (data_model), 0, 0);
 
 	table_id = g_value_get_int (num);
-	g_object_unref (query_result);
+	g_object_unref (data_model);
+	g_object_unref (plist);
 	return table_id;
 }
 
@@ -2090,90 +2092,59 @@
                         analyse_time DATE
                         );
 */
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;	
-	GValue *value;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
 	SymbolDBEnginePriv *priv;
 
+	g_return_val_if_fail (dbe != NULL, FALSE);	
 	priv = dbe->priv;
 
 	g_return_val_if_fail (priv->db_connection != NULL, FALSE);
 
-	if ((query =
+	if ((stmt =
 		 sdb_engine_get_query_by_id (dbe, PREP_QUERY_WORKSPACE_NEW)) == NULL)
 	{
 		g_warning ("query is null");
 		return FALSE;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return FALSE;
-	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
-		g_warning ("par_list is NULL!\n");
+		g_warning ("Error on getting parameters");
 		return FALSE;
 	}
+	
 
-	if ((param = gda_parameter_list_find_param (par_list, "wsname")) == NULL)
+	if ((param = gda_set_get_holder (plist, "wsname")) == NULL)
 	{
 		g_warning ("param is NULL from pquery!\n");
+		g_object_unref (plist);
 		return FALSE;
 	}
-
-	value = gda_value_new (G_TYPE_STRING);
-	g_value_set_string (value, workspace_name);
-
-	gda_parameter_set_value (param, value);
-
+	gda_holder_set_value_str (param, NULL, workspace_name);
+	
 	/* execute the query with parametes just set */
 	GError *err = NULL;
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, &err);
-	gda_value_free (value);
-
-		
-	if (query_result != NULL) 
-	{
-		g_object_unref (query_result);
-		return TRUE;
-	}
-	else 
-	{
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  plist, NULL, &err) == -1)
+	{		
 		DEBUG_PRINT ("Error: %s", err->message);
+		g_object_unref (plist);
 		return FALSE;
 	}
-}
 
-/**
- * Return the name of the opened project.
- * NULL on error. Returned string must be freed by caller.
- */
-gchar*
-symbol_db_engine_get_opened_project_name (SymbolDBEngine * dbe)
-{
-	SymbolDBEnginePriv *priv;
-	g_return_val_if_fail (dbe != NULL, NULL);
-	priv = dbe->priv;
-	
-	g_return_val_if_fail (priv->db_connection != NULL, NULL);
-	
-	return g_strdup (priv->project_name);
+	g_object_unref (plist);
+	return TRUE;
 }
 
 /**
- * Open a new project.
- * It will test if project was correctly created. 
+ * Test it project_name is created in the opened database
  */
 gboolean
-symbol_db_engine_open_project (SymbolDBEngine * dbe,	/*gchar* workspace, */
-							   const gchar * project_name)
+symbol_db_engine_project_exists (SymbolDBEngine * dbe,	/*gchar* workspace, */
+							   	const gchar * project_name)
 {
 	GValue *value;
 	SymbolDBEnginePriv *priv;
@@ -2182,18 +2153,11 @@
 	priv = dbe->priv;
 
 	g_return_val_if_fail (priv->db_connection != NULL, FALSE);
-	if (symbol_db_engine_is_project_opened (dbe, project_name) == TRUE) {
-		g_warning ("symbol_db_engine_open_project (): "
-				   "project already opened, %s (priv %s)", project_name, 
-				   priv->project_name);
-		return FALSE;
-	}
-
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, project_name);
 
 	/* test the existence of the project in db */
-	if ((prj_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((prj_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 				PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
 				"prjname",
 				 value)) <= 0)
@@ -2205,27 +2169,11 @@
 
 	gda_value_free (value);
 
-	/* open the project... */
-	priv->project_name = g_strdup (project_name);
-
+	/* we found it */
 	return TRUE;
 }
 
 
-gboolean 
-symbol_db_engine_close_project (SymbolDBEngine *dbe, const gchar* project_name)
-{
-	SymbolDBEnginePriv *priv;
-
-	priv = dbe->priv;
-
-	g_free (priv->project_name);
-	priv->project_name = NULL;				
-
-	return sdb_engine_disconnect_from_db (dbe);
-}
-
-
 /**
  * @param workspace Can be NULL. In that case a default workspace will be created, 
  * 					and project will depend on that.
@@ -2242,34 +2190,26 @@
                       analyse_time DATE
                       );
 */
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
 	GValue *value;
 	const gchar *workspace_name;
 	gint wks_id;
 	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (dbe != NULL, FALSE);
-	
+	g_return_val_if_fail (dbe != NULL, FALSE);	
 	priv = dbe->priv;
 
-	if (symbol_db_engine_is_project_opened (dbe, project) == TRUE) 
-	{
-		g_warning ("You have an already opened project. Cannot continue.");
-		return FALSE;
-	}
-	
-	if (workspace == NULL)
+	if (workspace == NULL)
 	{
 		workspace_name = "anjuta_workspace_default";	
 		
-		DEBUG_PRINT ("adding default workspace... %s", workspace_name);
+		DEBUG_PRINT ("adding default workspace... '%s'", workspace_name);
 		value = gda_value_new (G_TYPE_STRING);
 		g_value_set_string (value, workspace_name);
 		
-		if ((wks_id = sdb_engine_get_table_id_by_unique_name (dbe,
+		if ((wks_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 				 PREP_QUERY_GET_WORKSPACE_ID_BY_UNIQUE_NAME,
 				 "wsname",
 				 value)) <= 0)
@@ -2293,7 +2233,7 @@
 	g_value_set_string (value, workspace_name);
 
 	/* get workspace id */
-	if ((wks_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((wks_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 				 PREP_QUERY_GET_WORKSPACE_ID_BY_UNIQUE_NAME,
 				 "wsname",
 				 value)) <= 0)
@@ -2302,65 +2242,56 @@
 		gda_value_free (value);
 		return FALSE;
 	}
-
+	gda_value_free (value);
+	
 	/* insert new project */
-	if ((query =
+	if ((stmt =
 		 sdb_engine_get_query_by_id (dbe, PREP_QUERY_PROJECT_NEW)) == NULL)
 	{
 		g_warning ("query is null");
-		gda_value_free (value);
 		return FALSE;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
-		g_warning ("non parsed sql error");
-		gda_value_free (value);
+		g_warning ("Error on getting parameters");
 		return FALSE;
 	}
 
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	/* lookup parameters */
+	if ((param = gda_set_get_holder (plist, "prjname")) == NULL)
 	{
-		g_warning ("par_list is NULL!\n");
-		gda_value_free (value);
+		g_warning ("param prjname is NULL from pquery!");
+		g_object_unref (plist);
 		return FALSE;
 	}
-
-	if ((param = gda_parameter_list_find_param (par_list, "prjname")) == NULL)
+	gda_holder_set_value_str (param, NULL, project);
+		
+	if ((param = gda_set_get_holder (plist, "wsid")) == NULL)
 	{
 		g_warning ("param prjname is NULL from pquery!");
-		gda_value_free (value);
+		g_object_unref (plist);
 		return FALSE;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, project);
-	gda_parameter_set_value (param, value);
-
-	if ((param = gda_parameter_list_find_param (par_list, "wsid")) == NULL)
-	{
-		g_warning ("param is NULL from pquery!");
+	value = gda_value_new (G_TYPE_INT);
+	g_value_set_int (value, wks_id);	
+	gda_holder_set_value (param, value);
+		
+	/* execute the query with parametes just set */
+	GError *err = NULL;
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  plist, NULL, &err) == -1)
+	{		
+		DEBUG_PRINT ("Error: %s", err->message);
+		gda_value_free (value);
+		g_object_unref (plist);
 		return FALSE;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_INT);
-	g_value_set_int (value, wks_id);
-
-	gda_parameter_set_value (param, value);
-
-	/* execute the query with parametes just set */
-	query_result =
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-	gda_value_free (value);
+	gda_value_free (value);	
+	g_object_unref (plist);
 	
-	if (query_result != NULL)
-	{
-		g_object_unref (query_result);
-		return TRUE;
-	}
-	else
-		return FALSE;
+	return TRUE;
 }
 
 
@@ -2373,74 +2304,67 @@
 */
 	gint table_id;
 	GValue *value;
-
+	SymbolDBEnginePriv *priv;
+		
 	g_return_val_if_fail (language != NULL, -1);
 
+	priv = dbe->priv;
+	
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, language);
 
 	/* check for an already existing table with language "name". */
-	if ((table_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((table_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 						PREP_QUERY_GET_LANGUAGE_ID_BY_UNIQUE_NAME,
 						"langname",
 						value)) < 0)
 	{
-
 		/* insert a new entry on db */
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
-		GValue *value;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
+		GdaSet *last_inserted;
 
-		if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_LANGUAGE_NEW))
+		if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_LANGUAGE_NEW))
 			== NULL)
 		{
 			g_warning ("query is null");
 			return FALSE;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return FALSE;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			return FALSE;
 		}
 
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "langname")) == NULL)
+		if ((param = gda_set_get_holder (plist, "langname")) == NULL)
 		{
 			g_warning ("param langname is NULL from pquery!");
+			g_object_unref (plist);
 			return FALSE;
 		}
-
-		value = gda_value_new (G_TYPE_STRING);
-		g_value_set_string (value, language);
-
-		gda_parameter_set_value (param, value);
-		gda_value_free (value);
+		gda_holder_set_value_str (param, NULL, language);
+		
+		GError *err = NULL;
 		/* execute the query with parametes just set */
-		query_result =
-			gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-
-		if (query_result != NULL)
-		{
-			table_id = sdb_engine_get_last_insert_id (dbe);
-			g_object_unref (query_result);
-		}
-		else 
-		{
+		if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														 (GdaStatement*)stmt, 
+														 plist, &last_inserted,
+														 &err) == -1)
+		{		
+			DEBUG_PRINT ("Error: %s", err->message);
 			table_id = -1;
 		}
+		else {
+			const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+			table_id = g_value_get_int (value);
+		}
+		
+		g_object_unref (plist);
 	}
-	gda_value_free (value);
+	gda_value_free (value);	
+	
 	return table_id;
 }
 
@@ -2449,11 +2373,17 @@
  * This function requires an opened db, i.e. calling before
  * symbol_db_engine_open_db ()
  * filepath: referes to a full file path.
- * WARNING: we suppose that project is already opened.
+ * project: 
+ * WARNING: we suppose that project_directory is already set.
+ * WARNING2: we suppose that the given local_filepath include the project_directory path.
+ * + correct example: local_filepath: /home/user/projects/foo_project/src/main.c
+ *                    project_directory: /home/user/projects/foo_project
+ * - wrong one: local_filepath: /tmp/foo.c
+ *                    project_directory: /home/user/projects/foo_project
  */
 static gboolean
-sdb_engine_add_new_file (SymbolDBEngine * dbe, const gchar * project,
-						 const gchar * filepath, const gchar * language)
+sdb_engine_add_new_file (SymbolDBEngine * dbe, const gchar * project_name,
+						 const gchar * local_filepath, const gchar * language)
 {
 /*
 CREATE TABLE file (file_id integer PRIMARY KEY AUTOINCREMENT,
@@ -2470,12 +2400,19 @@
 	GValue *value;
 	
 	priv = dbe->priv;
+
+	/* check if the file is a correct one compared to the local_filepath */
+	if (strstr (local_filepath, priv->project_directory) == NULL)
+		return FALSE;
+	
+	DEBUG_PRINT ("sdb_engine_add_new_file project_name %s local_filepath %s language %s",
+				 project_name, local_filepath, language);
 	
 	value = gda_value_new (G_TYPE_STRING);
-	g_value_set_string (value, project);
+	g_value_set_string (value, project_name);
 
 	/* check for an already existing table with project "project". */
-	if ((project_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((project_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 								  PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
 								  "prjname",
 								  value)) < 0)
@@ -2488,96 +2425,93 @@
 	gda_value_free (value);
 	value = gda_value_new (G_TYPE_STRING);
 	/* we're gonna set the file relative to the project folder, not the full one.
-	 * e.g.: we have a file on disk: "/tmp/foo/src/file.c" and a datasource located on
+	 * e.g.: we have a file on disk: "/tmp/foo/src/file.c" and a db_directory located on
 	 * "/tmp/foo/". The entry on db will be "/src/file.c" 
 	 */
-	g_value_set_string (value, filepath + strlen(priv->data_source));
+	g_value_set_string (value, local_filepath + strlen (priv->project_directory));
 
-	if ((file_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((file_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 								   PREP_QUERY_GET_FILE_ID_BY_UNIQUE_NAME,
 								   "filepath",
 								   value)) < 0)
 	{
 		/* insert a new entry on db */
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
 		GValue *value;
 
 		language_id = sdb_engine_add_new_language (dbe, language);
 
-		if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_FILE_NEW))
+		if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_FILE_NEW))
 			== NULL)
 		{
 			g_warning ("query is null");
 			return FALSE;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return FALSE;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			return FALSE;
 		}
-
+		
 		/* filepath parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "filepath")) == NULL)
+		if ((param = gda_set_get_holder (plist, "filepath")) == NULL)
 		{
-			g_warning ("param filepath is NULL from pquery!");
+			g_warning ("param langname is NULL from pquery!");
+			g_object_unref (plist);
 			return FALSE;
 		}
-
-		value = gda_value_new (G_TYPE_STRING);
-		/* relative filepath */
-		g_value_set_string (value, filepath + strlen(priv->data_source));
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value_str (param, NULL, local_filepath + 
+								  strlen(priv->project_directory));
 
 		/* project id parameter */
-		if ((param = gda_parameter_list_find_param (par_list, "prjid")) == NULL)
+		if ((param = gda_set_get_holder (plist, "prjid")) == NULL)
 		{
 			g_warning ("param prjid is NULL from pquery!");
+			g_object_unref (plist);
 			return FALSE;
 		}
-
-		gda_value_reset_with_type (value, G_TYPE_INT);
+		value = gda_value_new (G_TYPE_INT);
 		g_value_set_int (value, project_id);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value (param, value);
 
 		/* language id parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "langid")) == NULL)
+		if ((param = gda_set_get_holder (plist, "langid")) == NULL)
 		{
 			g_warning ("param langid is NULL from pquery!");
+			g_object_unref (plist);
 			return FALSE;
 		}
 
 		gda_value_reset_with_type (value, G_TYPE_INT);
 		g_value_set_int (value, language_id);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value (param, value);
 		gda_value_free (value);
 
 		/* execute the query with parametes just set */
-		query_result = gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
+		GError *err = NULL;
+		if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														 (GdaStatement*)stmt, 
+														 plist, NULL,
+														 &err) == -1)
+		{		
+			DEBUG_PRINT ("Error: %s", err->message);
+			g_object_unref (plist);
+			return FALSE;
+		}	
 		
-		if (query_result != NULL)
-			g_object_unref (query_result);
+		g_object_unref (plist);
 	}
-	gda_value_free (value);
-
+	gda_value_free (value);	
+	
 	return TRUE;
 } 
 
 gboolean
-symbol_db_engine_add_new_files (SymbolDBEngine * dbe, const gchar * project,
+symbol_db_engine_add_new_files (SymbolDBEngine * dbe, 
+								const gchar * project_name,
 								const GPtrArray * files_path, 
 								const GPtrArray * languages,
 								gboolean scan_symbols)
@@ -2589,17 +2523,10 @@
 	priv = dbe->priv;
 
 	g_return_val_if_fail (priv->db_connection != NULL, FALSE);
-	g_return_val_if_fail (project != NULL, FALSE);
+	g_return_val_if_fail (project_name != NULL, FALSE);
 	g_return_val_if_fail (files_path->len > 0, FALSE);
 	g_return_val_if_fail (languages->len > 0, FALSE);
 
-	if (symbol_db_engine_is_project_opened (dbe, project) == FALSE) 
-	{
-		g_warning ("Your project isn't opened, %s (priv %s)", project, 
-				   priv->project_name);
-		return FALSE;
-	}	
-	
 	for (i = 0; i < files_path->len; i++)
 	{
 		gchar *node = (gchar *) g_ptr_array_index (files_path, i);
@@ -2608,13 +2535,16 @@
 		/* test the existance of node file */
 		if (g_file_test (node, G_FILE_TEST_EXISTS) == FALSE)
 		{
-			g_warning ("File %s doesn't exist", node);
+			g_warning ("File %s does NOT exist", node);
 			continue;
 		}
 			
-		if (sdb_engine_add_new_file (dbe, project, node, node_lang) == FALSE)
+		if (sdb_engine_add_new_file (dbe, project_name, node, 
+									 node_lang) == FALSE)
 		{
-			g_warning ("Error processing file %s", node);
+			g_warning ("Error processing file %s, db_directory %s, project_name %s, "
+					   "project_directory %s", node, 
+					   priv->db_directory, project_name, priv->project_directory);
 			return FALSE;
 		}
 	}
@@ -2643,75 +2573,56 @@
 */
 	const gchar *type;
 	const gchar *type_name;
-	gint table_id;
+	gint table_id;	
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaSet *last_inserted;
+	SymbolDBEnginePriv *priv;
 	
-	const GdaQuery *query;
-	GdaObject * query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
-	GValue *value;
-
-	g_return_val_if_fail (tag_entry != NULL, -1);
-
+	priv = dbe->priv;
+	
+	/* we assume that tag_entry is != NULL */
 	type = tag_entry->kind;
 	type_name = tag_entry->name;
 	
 	/* it does not exist. Create a new tuple. */
-	if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYM_TYPE_NEW))
+	if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYM_TYPE_NEW))
 		== NULL)
 	{
 		g_warning ("query is null");
 		return -1;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return -1;
-	}
-
-	if ((par_list =
-		 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-	{
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+	{		
 		g_warning ("par_list is NULL!\n");
 		return -1;
 	}
 
 	/* type parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "type")) == NULL)
+	if ((param = gda_set_get_holder (plist, "type")) == NULL)
 	{
 		g_warning ("param type is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	value = gda_value_new (G_TYPE_STRING);
-	g_value_set_string (value, type);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, type);
 
 	/* type_name parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "typename")) == NULL)
+	if ((param = gda_set_get_holder (plist, "typename")) == NULL)
 	{
 		g_warning ("param typename is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, type_name);
-	gda_parameter_set_value (param, value);
-	gda_value_free (value);
+	gda_holder_set_value_str (param, NULL, type_name);
 
 	/* execute the query with parametes just set */
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-
-	if (query_result != NULL)
-	{				
-		g_object_unref (query_result);
-		table_id = sdb_engine_get_last_insert_id (dbe);
-	}
-	else
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, &last_inserted,
+													 NULL) == -1)
 	{
 		GValue *value1, *value2;
 
@@ -2721,19 +2632,27 @@
 		value2 = gda_value_new (G_TYPE_STRING);
 		g_value_set_string (value2, type_name);
 
-		if ((table_id = sdb_engine_get_table_id_by_unique_name2 (dbe,
+		if ((table_id = sdb_engine_get_tuple_id_by_unique_name2 (dbe,
 													 PREP_QUERY_GET_SYM_TYPE_ID,
 													 "type", value1,
-													 "typename",
-													 value2)) < 0)
+													 "typename", value2)) < 0)
 		{
 			table_id = -1;
 		}
 
 		gda_value_free (value1);
 		gda_value_free (value2);
+		g_object_unref (plist);
 		
-	}
+		return table_id;
+	}	
+	else 
+	{
+		const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+		table_id = g_value_get_int (value);
+	}		
+	
+	g_object_unref (plist);
 	return table_id;
 }
 
@@ -2748,9 +2667,11 @@
 	const gchar *kind_name;
 	gint table_id;
 	GValue *value;
+	SymbolDBEnginePriv *priv;
+	
+	priv = dbe->priv;
 
-	g_return_val_if_fail (tag_entry != NULL, -1);
-
+	/* we assume that tag_entry is != NULL */
 	kind_name = tag_entry->kind;
 
 	/* no kind associated with current tag */
@@ -2760,67 +2681,58 @@
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, kind_name);
 
-	if ((table_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((table_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 										PREP_QUERY_GET_SYM_KIND_BY_UNIQUE_NAME,
 										"kindname",
 										value)) < 0)
 	{
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
-		GValue *value;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
+		GdaSet *last_inserted;
 
 		/* not found. Go on with inserting  */
-		if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYM_KIND_NEW))
+		if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYM_KIND_NEW))
 			== NULL)
 		{
 			g_warning ("query is null");
 			return -1;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return -1;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			return -1;
 		}
-
+		
 		/* kindname parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "kindname")) == NULL)
+		if ((param = gda_set_get_holder (plist, "kindname")) == NULL)
 		{
 			g_warning ("param kindname is NULL from pquery!");
-			return -1;
+			g_object_unref (plist);
+			return FALSE;
 		}
+		gda_holder_set_value_str (param, NULL, kind_name);
 
-		value = gda_value_new (G_TYPE_STRING);
-		g_value_set_string (value, kind_name);
-		gda_parameter_set_value (param, value);
-		gda_value_free (value);
-
+	
 		/* execute the query with parametes just set */
-		query_result = 
-			gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-
-		if (query_result != NULL)
-		{
-			table_id = sdb_engine_get_last_insert_id (dbe);
-			g_object_unref (query_result);
-		}
-		else 
+		GError *err = NULL;
+		if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														 (GdaStatement*)stmt, 
+														 plist, &last_inserted,
+														 &err) == -1)
+		{		
+			table_id = -1;		
+		}			
+		else
 		{
-			table_id = -1;
+			const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+			table_id = g_value_get_int (value);
 		}
+		g_object_unref (plist);
 	}
 	gda_value_free (value);
+	
 	return table_id;
 }
 
@@ -2835,9 +2747,11 @@
 	const gchar *access;
 	gint table_id;
 	GValue *value;
+	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (tag_entry != NULL, -1);
-
+	priv = dbe->priv;
+	
+	/* we assume that tag_entry is != NULL */	
 	if ((access = tagsField (tag_entry, "access")) == NULL)
 	{
 		/* no access associated with current tag */
@@ -2847,71 +2761,63 @@
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, access);
 
-	if ((table_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((table_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 									PREP_QUERY_GET_SYM_ACCESS_BY_UNIQUE_NAME,
 									"accesskind",
 									value)) < 0)
 	{
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
-		GValue *value;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
+		GdaSet *last_inserted;
 
 		/* not found. Go on with inserting  */
-		if ((query =
+		if ((stmt =
 			 sdb_engine_get_query_by_id (dbe,
 										 PREP_QUERY_SYM_ACCESS_NEW)) == NULL)
 		{
  			g_warning ("query is null");
 			return -1;
 		}
-
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return -1;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			return -1;
 		}
-
+		
 		/* accesskind parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "accesskind")) == NULL)
-		{
+		if ((param = gda_set_get_holder (plist, "accesskind")) == NULL)
+		{			
 			g_warning ("param accesskind is NULL from pquery!");
+			g_object_unref (plist);
 			return -1;
 		}
-
-		value = gda_value_new (G_TYPE_STRING);
-		g_value_set_string (value, access);
-		gda_parameter_set_value (param, value);
-		gda_value_free (value);
-
-		/* execute the query with parametes just set */
-		query_result =
-			gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
+		gda_holder_set_value_str (param, NULL, access);
 		
-		if (query_result != NULL)
-		{
-			table_id = sdb_engine_get_last_insert_id (dbe);
-			g_object_unref (query_result);
-		}
+		/* execute the query with parametes just set */
+		GError *err = NULL;
+		if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														 (GdaStatement*)stmt, 
+														 plist, &last_inserted,
+														 &err) == -1)
+		{		
+			table_id = -1;		
+		}			
 		else
 		{
-			table_id = -1;
+			const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+			table_id = g_value_get_int (value);
 		}
+		
+		g_object_unref (plist);
 	}
 	gda_value_free (value);
+		
 	return table_id;
 }
 
+
 static gint
 sdb_engine_add_new_sym_implementation (SymbolDBEngine * dbe,
 									   tagEntry * tag_entry)
@@ -2924,9 +2830,11 @@
 	const gchar *implementation;
 	gint table_id;
 	GValue *value;
+	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (tag_entry != NULL, -1);
-
+	priv = dbe->priv;
+	
+	/* we assume that tag_entry is != NULL */	
 	if ((implementation = tagsField (tag_entry, "implementation")) == NULL)
 	{
 		/* no implementation associated with current tag */
@@ -2936,20 +2844,18 @@
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, implementation);
 
-	if ((table_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((table_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 							PREP_QUERY_GET_SYM_IMPLEMENTATION_BY_UNIQUE_NAME,
 							"implekind",
 							value)) < 0)
 	{
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
-		GValue *value;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
+		GdaSet *last_inserted;
 
 		/* not found. Go on with inserting  */
-		if ((query =
-			 sdb_engine_get_query_by_id (dbe,
+		if ((stmt = sdb_engine_get_query_by_id (dbe,
 										 PREP_QUERY_SYM_IMPLEMENTATION_NEW)) ==
 			NULL)
 		{
@@ -2957,48 +2863,40 @@
 			return -1;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return -1;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			return -1;
 		}
-
+		
 		/* implekind parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "implekind")) == NULL)
-		{
-			g_warning ("param implekind is NULL from pquery!");
+		if ((param = gda_set_get_holder (plist, "implekind")) == NULL)
+		{			
+			g_warning ("param accesskind is NULL from pquery!");
+			g_object_unref (plist);
 			return -1;
 		}
-
-		value = gda_value_new (G_TYPE_STRING);
-		g_value_set_string (value, implementation);
-		gda_parameter_set_value (param, value);
-		gda_value_free (value);
+		gda_holder_set_value_str (param, NULL, implementation);
 
 		/* execute the query with parametes just set */
-		query_result =
-			gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-
-		if (query_result != NULL)
-		{
-			table_id = sdb_engine_get_last_insert_id (dbe);
-			g_object_unref (query_result);
-		}
+		GError *err = NULL;
+		if (gda_connection_statement_execute_non_select (priv->db_connection, 
+														 (GdaStatement*)stmt, 
+														 plist, &last_inserted,
+														 &err) == -1)
+		{		
+			table_id = -1;		
+		}			
 		else
 		{
-			table_id = -1;
+			const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+			table_id = g_value_get_int (value);
 		}
+		g_object_unref (plist);
 	}
 	gda_value_free (value);
+	
+	
 	return table_id;
 }
 
@@ -3013,65 +2911,62 @@
                        PRIMARY KEY (symbol_id_base, symbol_id_derived)
                        );
 */
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
 	GValue *value;
+	SymbolDBEnginePriv *priv;
 
 	g_return_if_fail (base_symbol_id > 0);
 	g_return_if_fail (derived_symbol_id > 0);
 
-	if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_HERITAGE_NEW))
+	priv = dbe->priv;
+	
+	if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_HERITAGE_NEW))
 		== NULL)
 	{
 		g_warning ("query is null");
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-	{
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+	{		
 		g_warning ("par_list is NULL!\n");
 		return;
 	}
-
+		
 	/* symbase parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "symbase")) == NULL)
-	{
-		g_warning ("param symbase is NULL from pquery!");
+	if ((param = gda_set_get_holder (plist, "symbase")) == NULL)
+	{			
+		g_warning ("param accesskind is NULL from pquery!");
+		g_object_unref (plist);
 		return;
 	}
-
 	value = gda_value_new (G_TYPE_INT);
 	g_value_set_int (value, base_symbol_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* symderived id parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "symderived")) == NULL)
+	if ((param = gda_set_get_holder (plist, "symderived")) == NULL)
 	{
 		g_warning ("param symderived is NULL from pquery!");
+		g_object_unref (plist);
 		return;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, derived_symbol_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 	gda_value_free (value);
 
 	/* execute the query with parametes just set */
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-	
-	if (query_result != NULL)
-		g_object_unref (query_result);
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, NULL,
+													 NULL) == -1)
+	{		
+		g_warning ("Error adding heritage");
+	}	
+	g_object_unref (plist);
 }
 
 
@@ -3088,15 +2983,17 @@
 */
 	const gchar *scope;
 	gint table_id;
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaSet *last_inserted;
 	GValue *value;
+	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (tag_entry != NULL, -1);
 	g_return_val_if_fail (tag_entry->kind != NULL, -1);
 
+	priv = dbe->priv;
+	
 	/* This symbol will define a scope which name is tag_entry->name
 	 * For example if we get a tag MyFoo with kind "namespace", it will define 
 	 * the "MyFoo" scope, which type is "namespace MyFoo"
@@ -3110,54 +3007,45 @@
 		return -1;
 	}
 
-	if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SCOPE_NEW))
+	if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SCOPE_NEW))
 		== NULL)
 	{
 		g_warning ("query is null");
 		return -1;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return -1;
-	}
-
-	if ((par_list =
-		 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-	{
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+	{		
 		g_warning ("par_list is NULL!\n");
 		return -1;
 	}
-
+		
 	/* scope parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "scope")) == NULL)
-	{
+	if ((param = gda_set_get_holder (plist, "scope")) == NULL)
+	{			
 		g_warning ("param scope is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	value = gda_value_new (G_TYPE_STRING);
-	g_value_set_string (value, scope);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, scope);
 
 	/* typeid parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "typeid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "typeid")) == NULL)
 	{
 		g_warning ("param typeid is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_INT);
+	value = gda_value_new (G_TYPE_INT);
 	g_value_set_int (value, type_table_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 	gda_value_free (value);
 
 	/* execute the query with parameters just set */
-	query_result = gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-	if (query_result == NULL)  
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, &last_inserted,
+													 NULL) == -1)
 	{
 		GValue *value1, *value2;
 /*		DEBUG_PRINT ("sdb_engine_add_new_scope_definition (): BAD INSERTION "
@@ -3170,7 +3058,7 @@
 		value2 = gda_value_new (G_TYPE_INT);
 		g_value_set_int (value2, type_table_id);
 	
-		if ((table_id = sdb_engine_get_table_id_by_unique_name2 (dbe,
+		if ((table_id = sdb_engine_get_tuple_id_by_unique_name2 (dbe,
 												 PREP_QUERY_GET_SCOPE_ID,
 												 "scope", 
 												 value1,
@@ -3180,15 +3068,15 @@
 			table_id = -1;
 		}
 
-
 		gda_value_free (value1);
 		gda_value_free (value2);
 	}
 	else  {
-		table_id = sdb_engine_get_last_insert_id (dbe);
-		g_object_unref (query_result);
+		const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+		table_id = g_value_get_int (value);
 	}	
 
+	g_object_unref (plist);
 	return table_id;
 }
 
@@ -3217,21 +3105,23 @@
 							field_namespace varchar(256)
 							);
 */
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaSet *last_inserted;
 	gint table_id;
+	SymbolDBEnginePriv *priv;
 	GValue *value;
 	const gchar *field_inherits, *field_struct, *field_typeref,
 		*field_enum, *field_union, *field_class, *field_namespace;
 	gboolean good_tag;
 
-	g_return_val_if_fail (tag_entry != NULL, -1);
-
+	/* we assume that tag_entry is != NULL */
 	/* init the flag */
 	good_tag = FALSE;
 
+	priv = dbe->priv;
+	
 	if ((field_inherits = tagsField (tag_entry, "inherits")) == NULL)
 	{
 		field_inherits = "";
@@ -3285,132 +3175,111 @@
 		return -1;
 
 
-	if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_TMP_HERITAGE_NEW))
-		== NULL)
-	{
-		g_warning ("query is null");
-		return -1;
-	}
-
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
+	if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_TMP_HERITAGE_NEW))
+		== NULL)
 	{
-		g_warning ("non parsed sql error");
+		g_warning ("query is null");
 		return -1;
 	}
 
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-	{
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+	{		
 		g_warning ("par_list is NULL!\n");
 		return -1;
 	}
-
+		
 	/* symreferid parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "symreferid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "symreferid")) == NULL)
 	{
 		g_warning ("param symreferid is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
 
 	value = gda_value_new (G_TYPE_INT);
 	g_value_set_int (value, symbol_referer_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
+	gda_value_free (value);
 
 	/* finherits parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "finherits")) == NULL)
+	if ((param = gda_set_get_holder (plist, "finherits")) == NULL)
 	{
 		g_warning ("param finherits is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_inherits);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, field_inherits);
 
 	/* fstruct parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "fstruct")) == NULL)
+	if ((param = gda_set_get_holder (plist, "fstruct")) == NULL)
 	{
 		g_warning ("param fstruct is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_struct);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, field_struct);
 
 	/* ftyperef parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "ftyperef")) == NULL)
+	if ((param = gda_set_get_holder (plist, "ftyperef")) == NULL)
 	{
 		g_warning ("param ftyperef is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_typeref);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, field_typeref);
 
 	/* fenum parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "fenum")) == NULL)
+	if ((param = gda_set_get_holder (plist, "fenum")) == NULL)
 	{
 		g_warning ("param fenum is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_enum);
-	gda_parameter_set_value (param, value);
-
+	gda_holder_set_value_str (param, NULL, field_enum);
+	
 	/* funion parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "funion")) == NULL)
+	if ((param = gda_set_get_holder (plist, "funion")) == NULL)
 	{
 		g_warning ("param funion is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_union);
-	gda_parameter_set_value (param, value);
-
+	gda_holder_set_value_str (param, NULL, field_union);
+	
 	/* fclass parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "fclass")) == NULL)
+	if ((param = gda_set_get_holder (plist, "fclass")) == NULL)
 	{
 		g_warning ("param fclass is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_class);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, field_class);
 
 	/* fnamespace parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "fnamespace")) == NULL)
+	if ((param = gda_set_get_holder (plist, "fnamespace")) == NULL)
 	{
 		g_warning ("param fnamespace is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, field_namespace);
-	gda_parameter_set_value (param, value);
-	gda_value_free (value);
-
+	gda_holder_set_value_str (param, NULL, field_namespace);
 
 	/* execute the query with parametes just set */
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-
-	if (query_result != NULL)
+	if (gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, &last_inserted,
+													 NULL) == -1)
 	{
-		table_id = sdb_engine_get_last_insert_id (dbe);
-		g_object_unref (query_result);
+		table_id = -1;
 	}
-	else
+	else 
 	{
-		table_id = -1;
+		const GValue *value = gda_set_get_holder_value (last_inserted, 
+														"+0");
+		table_id = g_value_get_int (value);
 	}
 	
+	g_object_unref (plist);
 	return table_id;
 }
 
@@ -3430,12 +3299,11 @@
 	gint tmp_str_splitted_length;
 	gchar *object_name = NULL;
 	gboolean free_token_name = FALSE;
-	const GdaQuery *query;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
 	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (dbe != NULL, FALSE);
 	g_return_val_if_fail (G_VALUE_HOLDS_STRING (token_value), FALSE);
 	
 	priv = dbe->priv;
@@ -3447,9 +3315,6 @@
 		return -1;
 	}
 
-/*	DEBUG_PRINT ("sdb_engine_second_pass_update_scope_1 ()---------------------");
-	DEBUG_PRINT ("sdb_engine_second_pass_update_scope_1 (): %s", tmp_str);*/
-	
 	/* we could have something like "First::Second::Third::Fourth" as tmp_str, so 
 	 * take only the lastscope, in this case 'Fourth'.
 	 */
@@ -3477,16 +3342,13 @@
 
 	g_strfreev (tmp_str_splitted);
 
-/*	DEBUG_PRINT ("sdb_engine_second_pass_update_scope_1(): got %s %s (from %s)", 
-				 token_name, object_name, tmp_str);	*/
-	
 	value1 = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value1, token_name);
 
 	value2 = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value2, object_name);
 
-	if ((scope_id = sdb_engine_get_table_id_by_unique_name2 (dbe,
+	if ((scope_id = sdb_engine_get_tuple_id_by_unique_name2 (dbe,
 									 PREP_QUERY_GET_SYMBOL_SCOPE_DEFINITION_ID,
 									 "tokenname",
 									 value1,
@@ -3514,11 +3376,7 @@
 													  data_row);
 	symbol_referer_id = g_value_get_int (value_id2);
 	
-/*	DEBUG_PRINT ("sdb_engine_second_pass_update_scope_1 () :updating sym %d "
-				 "with %d",  
-				 symbol_referer_id, scope_id);*/
-	
-	if ((query = sdb_engine_get_query_by_id (dbe,
+	if ((stmt = sdb_engine_get_query_by_id (dbe,
 											 PREP_QUERY_UPDATE_SYMBOL_SCOPE_ID))
 		== NULL)
 	{
@@ -3526,44 +3384,43 @@
 		return -1;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL
-		== gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return -1;
-	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-	{
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+	{		
 		g_warning ("par_list is NULL!\n");
 		return -1;
 	}
 
 	/* scopeid parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "scopeid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "scopeid")) == NULL)
 	{
 		g_warning ("param scopeid is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
 
 	value = gda_value_new (G_TYPE_INT);
 	g_value_set_int (value, scope_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* symbolid parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "symbolid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "symbolid")) == NULL)
 	{
 		g_warning ("param symbolid is NULL from pquery!");
+		g_object_unref (plist);
 		return -1;
 	}
 
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, symbol_referer_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 	gda_value_free (value);
 
 	/* execute the query with parametes just set */
-	gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
+	gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, NULL,
+													 NULL);
+
 
 	return symbol_referer_id;
 }
@@ -3777,7 +3634,7 @@
 				g_value_set_string (value1, klass_name);
 
 				if ((base_klass_id =
-					 sdb_engine_get_table_id_by_unique_name (dbe,
+					 sdb_engine_get_tuple_id_by_unique_name (dbe,
 										 PREP_QUERY_GET_SYMBOL_ID_BY_CLASS_NAME,
 										 "klassname",
 										 value1)) < 0)
@@ -3805,7 +3662,7 @@
 
 				DEBUG_PRINT ("value1 : %s value2 : %s", klass_name, namespace_name);
 				if ((base_klass_id =
-					 sdb_engine_get_table_id_by_unique_name2 (dbe,
+					 sdb_engine_get_tuple_id_by_unique_name2 (dbe,
 						  PREP_QUERY_GET_SYMBOL_ID_BY_CLASS_NAME_AND_NAMESPACE,
 						  "klassname",
 						  value1,
@@ -3873,11 +3730,14 @@
 static void
 sdb_engine_second_pass_do (SymbolDBEngine * dbe)
 {
-	GdaObject *query_result;
-	const GdaQuery *query1, *query2, *query3;
+	const GdaStatement *stmt1, *stmt2, *stmt3;
+	GdaDataModel *data_model;
+	SymbolDBEnginePriv *priv;
 
+	priv = dbe->priv;
+	
 	/* prepare for scope second scan */
-	if ((query1 =
+	if ((stmt1 =
 		 sdb_engine_get_query_by_id (dbe,
 									 PREP_QUERY_GET_ALL_FROM_TMP_HERITAGE))
 		== NULL)
@@ -3886,33 +3746,28 @@
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query1))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
-
 	/* execute the query */
-	query_result = gda_query_execute ((GdaQuery *) query1, NULL, FALSE, NULL);
-	
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result)) <= 0)
-	{
-		if (query_result != NULL)
-			g_object_unref (query_result);
-		query_result = NULL;
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt1, 
+														  NULL, NULL);
+	
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
+	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		data_model = NULL;
 	}
 	else
 	{
-		sdb_engine_second_pass_update_scope (dbe, GDA_DATA_MODEL (query_result));
+		sdb_engine_second_pass_update_scope (dbe, data_model);
 	}
 
-	if (query_result != NULL)
-		g_object_unref (query_result);
+	if (data_model != NULL)
+		g_object_unref (data_model);
 
 	/* prepare for heritage second scan */
-	if ((query2 =
+	if ((stmt2 =
 		 sdb_engine_get_query_by_id (dbe,
 						 PREP_QUERY_GET_ALL_FROM_TMP_HERITAGE_WITH_INHERITS))
 		== NULL)
@@ -3921,33 +3776,28 @@
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query2))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
-
 	/* execute the query */
-	query_result = gda_query_execute ((GdaQuery *) query2, NULL, FALSE, NULL);
-
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result)) <= 0)
-	{
-		if (query_result != NULL)
-			g_object_unref (query_result);
-		query_result = NULL;
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt2, 
+														  NULL, NULL);
+
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
+	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		data_model = NULL;
 	}
 	else
 	{
-		sdb_engine_second_pass_update_heritage (dbe, GDA_DATA_MODEL (query_result));
+		sdb_engine_second_pass_update_heritage (dbe, data_model);
 	}
 
-	if (query_result != NULL)
-		g_object_unref (query_result);
+	if (data_model != NULL)
+		g_object_unref (data_model);
 
 	/* clean tmp heritage table */
-	if ((query3 =
+	if ((stmt3 =
 		 sdb_engine_get_query_by_id (dbe,
 									 PREP_QUERY_TMP_HERITAGE_DELETE_ALL))
 		== NULL)
@@ -3956,19 +3806,10 @@
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query3))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
-
 	/* execute the query */
-	query_result =
-		gda_query_execute ((GdaQuery *) query3, NULL, FALSE, NULL);
-	
-	if (query_result != NULL)
-		g_object_unref (query_result);
+	gda_connection_statement_execute_non_select (priv->db_connection, 
+														  (GdaStatement*)stmt3, 
+														  NULL, NULL, NULL);	
 }
 
 /* base_prj_path can be NULL. In that case path info tag_entry will be taken
@@ -3999,10 +3840,10 @@
                      );
 */
 	SymbolDBEnginePriv *priv;
-	const GdaQuery *query;
-	GdaObject *query_result;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaSet *last_inserted;
 	const gchar *tmp_str;
 	gint table_id, symbol_id;
 	gint file_defined_id = 0;
@@ -4050,7 +3891,7 @@
 			g_value_set_string (value, fake_file);
 	}
 
-	if ((file_defined_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((file_defined_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 									   PREP_QUERY_GET_FILE_ID_BY_UNIQUE_NAME,
 									   "filepath",
 									   value)) < 0)
@@ -4139,7 +3980,7 @@
 	value3 = gda_value_new (G_TYPE_INT);
 	g_value_set_int (value3, type_id);
 
-	if ((symbol_id = sdb_engine_get_table_id_by_unique_name3 (dbe,
+	if ((symbol_id = sdb_engine_get_tuple_id_by_unique_name3 (dbe,
 								  PREP_QUERY_GET_SYMBOL_ID_BY_UNIQUE_INDEX_KEY,
 								  "symname", value1,
 								  "filedefid",value2,
@@ -4153,66 +3994,53 @@
 		gda_value_free (value3);
 
 		/* create specific query for a fresh new symbol */
-		if ((query = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYMBOL_NEW))
+		if ((stmt = sdb_engine_get_query_by_id (dbe, PREP_QUERY_SYMBOL_NEW))
 			== NULL)
 		{
 			g_warning ("query is null");
 			return -1;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			gda_value_free (value);
-			return -1;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
-		{
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
+		{		
 			g_warning ("par_list is NULL!\n");
 			gda_value_free (value);
 			return -1;
 		}
-
+		
 		/* filedefid parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "filedefid")) == NULL)
+		if ((param = gda_set_get_holder (plist, "filedefid")) == NULL)
 		{
 			g_warning ("param filedefid is NULL from pquery!");
 			gda_value_free (value);
+			g_object_unref (plist);
 			return -1;
 		}
-
 		gda_value_reset_with_type (value, G_TYPE_INT);
 		g_value_set_int (value, file_defined_id);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value (param, value);
 
 		/* name parameter */
-		if ((param = gda_parameter_list_find_param (par_list, "name")) == NULL)
+		if ((param = gda_set_get_holder (plist, "name")) == NULL)
 		{
 			g_warning ("param name is NULL from pquery!");
 			gda_value_free (value);
+			g_object_unref (plist);
 			return -1;
 		}
-
-		gda_value_reset_with_type (value, G_TYPE_STRING);
-		g_value_set_string (value, name);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value_str (param, NULL, name);
 
 		/* typeid parameter */
-		if ((param =
-			 gda_parameter_list_find_param (par_list, "typeid")) == NULL)
+		if ((param = gda_set_get_holder (plist, "typeid")) == NULL)
 		{
 			g_warning ("param typeid is NULL from pquery!");
 			gda_value_free (value);
-			return -1;
+			g_object_unref (plist);
+			return -1;			
 		}
-
 		gda_value_reset_with_type (value, G_TYPE_INT);
 		g_value_set_int (value, type_id);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value (param, value);
 	}
 	else
 	{
@@ -4224,7 +4052,7 @@
 		gda_value_free (value3);
 
 		/* create specific query for a fresh new symbol */
-		if ((query = sdb_engine_get_query_by_id (dbe,
+		if ((stmt = sdb_engine_get_query_by_id (dbe,
 												 PREP_QUERY_UPDATE_SYMBOL_ALL))
 			== NULL)
 		{
@@ -4232,16 +4060,7 @@
 			return -1;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			gda_value_free (value);
-			return -1;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 		{
 			g_warning ("par_list is NULL!\n");
 			gda_value_free (value);
@@ -4249,148 +4068,142 @@
 		}
 
 		/* symbolid parameter */
-		if ((param = gda_parameter_list_find_param (par_list, "symbolid"))
-			== NULL)
+		if ((param = gda_set_get_holder (plist, "symbolid")) == NULL)
 		{
 			g_warning ("param isfilescope is NULL from pquery!");
 			gda_value_free (value);
+			g_object_unref (plist);
 			return -1;
 		}
 
 		gda_value_reset_with_type (value, G_TYPE_INT);
 		g_value_set_int (value, symbol_id);
-		gda_parameter_set_value (param, value);
+		gda_holder_set_value (param, value);
 	}
 
 	/* common params */
 
 	/* fileposition parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "fileposition")) == NULL)
+	if ((param = gda_set_get_holder (plist, "fileposition")) == NULL)
 	{
 		g_warning ("param fileposition is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, file_position);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	
 	/* isfilescope parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "isfilescope")) == NULL)
+	if ((param = gda_set_get_holder (plist, "isfilescope")) == NULL)	
 	{
 		g_warning ("param isfilescope is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, is_file_scope);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* signature parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "signature")) == NULL)
+	if ((param = gda_set_get_holder (plist, "signature")) == NULL)	
 	{
 		g_warning ("param signature is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
-	gda_value_reset_with_type (value, G_TYPE_STRING);
-	g_value_set_string (value, signature);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value_str (param, NULL, signature);
 
 	/* scopedefinitionid parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "scopedefinitionid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "scopedefinitionid")) == NULL)	
 	{
 		g_warning ("param scopedefinitionid is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, scope_definition_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* scopeid parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "scopeid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "scopeid")) == NULL)	
 	{
 		g_warning ("param scopeid is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, scope_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* kindid parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "kindid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "kindid")) == NULL)	
 	{
 		g_warning ("param kindid is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, kind_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* accesskindid parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "accesskindid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "accesskindid")) == NULL)	
 	{
 		g_warning ("param accesskindid is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, access_kind_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* implementationkindid parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list,
-										"implementationkindid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "implementationkindid")) == NULL)	
 	{
 		g_warning ("param implementationkindid is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, implementation_kind_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* updateflag parameter */
-	if ((param =
-		 gda_parameter_list_find_param (par_list, "updateflag")) == NULL)
+	if ((param = gda_set_get_holder (plist, "updateflag")) == NULL)
 	{
 		g_warning ("param updateflag is NULL from pquery!");
 		gda_value_free (value);
+		g_object_unref (plist);
 		return -1;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, update_flag);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 	gda_value_free (value);
 
 	/* execute the query with parametes just set */
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
+	gint nrows;
+	nrows = gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, &last_inserted,
+													 NULL);
 	
 	if (sym_was_updated == FALSE)
 	{
-		if (query_result != NULL)
+		if (nrows > 0)
 		{
-			table_id = sdb_engine_get_last_insert_id (dbe);
-			g_object_unref (query_result);
+			const GValue *value = gda_set_get_holder_value (last_inserted, "+0");
+			table_id = g_value_get_int (value);			
 		
 			/* This is a wrong place to emit the symbol-updated signal. Infact
 		 	 * db is in a inconsistent state, e.g. inheritance references are still
@@ -4406,11 +4219,10 @@
 	}
 	else
 	{
-		if (query_result != NULL)
+		if (nrows > 0)
 		{
 			table_id = symbol_id;
-			g_object_unref (query_result);
-			
+						
 			/* This is a wrong place to emit the symbol-updated signal. Infact
 		  	 * db is in a inconsistent state, e.g. inheritance references are still
 		  	 * *not* calculated.
@@ -4429,6 +4241,9 @@
 	 */
 	if (table_id > 0)
 		sdb_engine_add_new_tmp_heritage_scope (dbe, tag_entry, table_id);
+	
+	g_object_unref (plist);
+	
 	return table_id;
 }
 
@@ -4439,19 +4254,17 @@
 static void
 sdb_engine_detects_removed_ids (SymbolDBEngine *dbe)
 {
-	const GdaQuery *query, *query2;
-	GdaObject *query_result;
+	const GdaStatement *stmt1, *stmt2;
+	GdaDataModel *data_model;
 	SymbolDBEnginePriv *priv;
-	gint num_rows;
-	gint i;
-	g_return_if_fail (dbe != NULL);
-	
+	gint i, num_rows;	
+		
 	priv = dbe->priv;
 	
 	/* ok, now we should read from __tmp_removed all the symbol ids which have
 	 * been removed, and emit a signal 
 	 */
-	if ((query = sdb_engine_get_query_by_id (dbe,
+	if ((stmt1 = sdb_engine_get_query_by_id (dbe,
 											 PREP_QUERY_GET_REMOVED_IDS))
 		== NULL)
 	{
@@ -4459,29 +4272,25 @@
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
 	
-	query_result = gda_query_execute ((GdaQuery *) query, NULL, FALSE,
-									 NULL);
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+												   (GdaStatement*)stmt1, 
+													NULL, NULL);
+
 	
-	if (GDA_IS_DATA_MODEL (query_result)) 
+	if (GDA_IS_DATA_MODEL (data_model)) 
 	{
-		if ((num_rows = gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result))) <= 0)
+		if ((num_rows = gda_data_model_get_n_rows (data_model)) <= 0)
 		{
 			DEBUG_PRINT ("sdb_engine_detects_removed_ids (): nothing to remove");
-			g_object_unref (query_result);
+			g_object_unref (data_model);
 			return;
 		}
 	}
 	else
 	{
-		if (query_result != NULL)
-			g_object_unref (query_result);
+		if (data_model != NULL)
+			g_object_unref (data_model);
 		return;
 	}
 
@@ -4490,7 +4299,7 @@
 	{
 		const GValue *val;
 		gint tmp;
-		val = gda_data_model_get_value_at (GDA_DATA_MODEL (query_result), 0, i);
+		val = gda_data_model_get_value_at (data_model, 0, i);
 		tmp = g_value_get_int (val);
 	
 		DEBUG_PRINT ("EMITTING symbol-removed");
@@ -4498,10 +4307,10 @@
 		g_async_queue_push (priv->signals_queue, (gpointer)tmp);
 	}
 
-	g_object_unref (query_result);
+	g_object_unref (data_model);
 	
 	/* let's clean the tmp_table */
-	if ((query2 = sdb_engine_get_query_by_id (dbe,
+	if ((stmt2 = sdb_engine_get_query_by_id (dbe,
 											 PREP_QUERY_TMP_REMOVED_DELETE_ALL))
 		== NULL)
 	{
@@ -4509,21 +4318,11 @@
 		return;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query2))
-	{
-		g_warning ("non parsed sql error");
-		return;
-	}
-	
 	/* bye bye */
-	query_result =
-		gda_query_execute ((GdaQuery *) query2, NULL, FALSE, NULL);
-	
-	if (query_result)
-	{
-		g_object_unref (query_result);
-	}
+	gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt2, 
+													 NULL, NULL,
+													 NULL);
 }
 
 /**
@@ -4535,24 +4334,13 @@
 static gboolean
 sdb_engine_update_file (SymbolDBEngine * dbe, const gchar * file_on_db)
 {
-	const GdaQuery *query;
-	GdaObject *query_result;
-	gchar *query_str;
-	GdaParameterList *par_list;
-	GdaParameter *param;
-	GValue *value;
+	GdaSet *plist;
+	const GdaStatement *stmt1, *stmt2, *stmt3;
+	GdaHolder *param;
 	SymbolDBEnginePriv *priv;
 
-	g_return_val_if_fail (dbe != NULL, FALSE);
-	
 	priv = dbe->priv;
 
-	if (symbol_db_engine_is_project_opened (dbe, priv->project_name) == FALSE) 
-	{
-		g_warning ("project is not opened");
-		return FALSE;
-	}
-	
 	/* if we're updating symbols we must do some other operations on db 
 	 * symbols, like remove the ones which don't have an update_flag = 1 
 	 * per updated file.
@@ -4562,35 +4350,69 @@
 	 * update_flag = 0. 
 	 */
 
-	/* FIXME: libgda 3.0 doesn't have support for JOIN keyword at all on
-	 * prepared statements.
-	 * Said this we cannot expect to run queries on a really performant
-	 * way. 
-	 */
-
 	/* Triggers will take care of updating/deleting connected symbols
 	 * tuples, like sym_kind, sym_type etc */
-	query_str = g_strdup_printf ("DELETE FROM symbol WHERE "
-								 "file_defined_id = (SELECT file_id FROM file "
-								 "WHERE file_path = \"%s\") AND update_flag = 0",
-								 file_on_db);
+	if ((stmt1 = sdb_engine_get_query_by_id (dbe, 
+									PREP_QUERY_REMOVE_NON_UPDATED_SYMBOLS)) == NULL)
+	{
+		g_warning ("query is null");
+		return FALSE;
+	}
 
-	sdb_engine_execute_non_select_sql (dbe, query_str);
-	g_free (query_str);
+	if (gda_statement_get_parameters ((GdaStatement*)stmt1, &plist, NULL) == FALSE)
+	{
+		g_warning ("par_list is NULL!\n");
+		return FALSE;
+	}
+	
+	if ((param = gda_set_get_holder (plist, "filepath")) == NULL)
+	{
+		g_warning ("param filepath is NULL from pquery!");
+		g_object_unref (plist);
+		return FALSE;
+	}
+	gda_holder_set_value_str (param, NULL, file_on_db);
+	
+	gda_connection_statement_execute_non_select (priv->db_connection, (GdaStatement*)stmt1, 
+														 plist, NULL, NULL);	
 
 	/* emits removed symbols signals */
 	sdb_engine_detects_removed_ids (dbe);
+
+	/* stay ready for the next statement */
+	g_object_unref (plist);
 	
-	/* reset the update_flag to 0 */
-	query_str = g_strdup_printf ("UPDATE symbol SET update_flag = 0 "
-								 "WHERE file_defined_id = (SELECT file_id FROM file WHERE "
-								 "file_path = \"%s\")", file_on_db);
+	/* reset the update_flag to 0 */	
+	if ((stmt2 = sdb_engine_get_query_by_id (dbe, 
+									PREP_QUERY_RESET_UPDATE_FLAG_SYMBOLS)) == NULL)
+	{
+		g_warning ("query is null");
+		return FALSE;
+	}
+	
+	if (gda_statement_get_parameters ((GdaStatement*)stmt2, &plist, NULL) == FALSE)
+	{
+		g_warning ("par_list is NULL!\n");
+		return FALSE;
+	}
+	
+	if ((param = gda_set_get_holder (plist, "filepath")) == NULL)
+	{
+		g_warning ("param filepath is NULL from pquery!");
+		g_object_unref (plist);
+		return FALSE;
+	}
+	gda_holder_set_value_str (param, NULL, file_on_db);
 
-	sdb_engine_execute_non_select_sql (dbe, query_str);
-	g_free (query_str);
+	
+	gda_connection_statement_execute_non_select (priv->db_connection, (GdaStatement*)stmt2, 
+														 plist, NULL, NULL);	
 
+	/* ready for the last one */
+	g_object_unref (plist);
+	
 	/* last but not least, update the file analyse_time */
-	if ((query = sdb_engine_get_query_by_id (dbe,
+	if ((stmt3 = sdb_engine_get_query_by_id (dbe,
 											 PREP_QUERY_UPDATE_FILE_ANALYSE_TIME))
 		== NULL)
 	{
@@ -4598,37 +4420,25 @@
 		return FALSE;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		return FALSE;
-	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	if (gda_statement_get_parameters ((GdaStatement*)stmt2, &plist, NULL) == FALSE)
 	{
 		g_warning ("par_list is NULL!\n");
 		return FALSE;
 	}
-
+	
 	/* filepath parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "filepath")) == NULL)
+	if ((param = gda_set_get_holder (plist, "filepath")) == NULL)
 	{
 		g_warning ("param filepath is NULL from pquery!");
+		g_object_unref (plist);
 		return FALSE;
 	}
+	gda_holder_set_value_str (param, NULL, file_on_db);
 
-	value = gda_value_new (G_TYPE_STRING);
-	g_value_set_string (value, file_on_db);
-	gda_parameter_set_value (param, value);
-
-	gda_value_free (value);
-	query_result = 
-		gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
+	gda_connection_statement_execute_non_select (priv->db_connection, (GdaStatement*)stmt3, 
+														 plist, NULL, NULL);
 	
-	if (query_result)
-		g_object_unref (query_result);
-
+	g_object_unref (plist);
 	return TRUE;
 }
 
@@ -4656,12 +4466,20 @@
 	{
 		gchar *node = (gchar *) g_ptr_array_index (files_to_scan, i);
 		
+		if (strstr (node, priv->project_directory) == NULL) 
+		{
+			g_warning ("on_scan_update_files_symbols_end  node %s is shorter than "
+					   "prj_directory %s",
+					   node, priv->project_directory);
+			continue;
+		}
+		
 		/* clean the db from old un-updated with the last update step () */
 		if (sdb_engine_update_file (dbe, node + 
-									strlen (priv->data_source)) == FALSE)
+									strlen (priv->project_directory)) == FALSE)
 		{
 			g_warning ("Error processing file %s", node + 
-					   strlen (priv->data_source) );
+					   strlen (priv->project_directory) );
 			return;
 		}
 		g_free (node);
@@ -4676,14 +4494,12 @@
 	 */
 	if (update_data->update_prj_analyse_time == TRUE)
 	{
-		const GdaQuery *query;
-		GdaObject *query_result;
-		GdaParameterList *par_list;
-		GdaParameter *param;
-		GValue *value;
+		GdaSet *plist;
+		const GdaStatement *stmt;
+		GdaHolder *param;
 
 		/* and the project analyse_time */
-		if ((query = sdb_engine_get_query_by_id (dbe,
+		if ((stmt = sdb_engine_get_query_by_id (dbe,
 									PREP_QUERY_UPDATE_PROJECT_ANALYSE_TIME))
 			== NULL)
 		{
@@ -4691,45 +4507,31 @@
 			return;
 		}
 
-		if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-			gda_query_get_query_type ((GdaQuery *) query))
-		{
-			g_warning ("non parsed sql error");
-			return;
-		}
-
-		if ((par_list =
-			 gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+		if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 		{
 			g_warning ("par_list is NULL!\n");
 			return;
 		}
-
+	
 		/* prjname parameter */
-		if ((param = gda_parameter_list_find_param (par_list, "prjname"))
-			== NULL)
+		if ((param = gda_set_get_holder (plist, "prjname")) == NULL)
 		{
 			g_warning ("param prjname is NULL from pquery!");
+			g_object_unref (plist);
 			return;
 		}
-
-		value = gda_value_new (G_TYPE_STRING);
-		g_value_set_string (value, priv->project_name);
-		gda_parameter_set_value (param, value);
-
-		gda_value_free (value);
-
-		DEBUG_PRINT ("updating project analyse_time");
-		query_result = 
-			gda_query_execute ((GdaQuery *) query, par_list, FALSE, NULL);
-		
-		if (query_result)
-			g_object_unref (query_result);
+		gda_holder_set_value_str (param, NULL, update_data->project);
+	
+		gda_connection_statement_execute_non_select (priv->db_connection, 
+													 (GdaStatement*)stmt, 
+													 plist, NULL, NULL);
+		g_object_unref (plist);
 	}	
 	
 	/* free the GPtrArray. */
 	g_ptr_array_free (files_to_scan, TRUE);
 
+	g_free (update_data->project);
 	g_free (update_data);
 }
 
@@ -4881,17 +4683,12 @@
 	DEBUG_PRINT ("symbol_db_engine_update_files_symbols ()");
 	g_return_val_if_fail (priv->db_connection != NULL, FALSE);
 	g_return_val_if_fail (project != NULL, FALSE);
-	
-	if (symbol_db_engine_is_project_opened (dbe, project) == FALSE) 
-	{
-		g_warning ("project is not opened");
-		return FALSE;
-	}
-	
+
 	update_data = g_new0 (UpdateFileSymbolsData, 1);
 	
 	update_data->update_prj_analyse_time = update_prj_analyse_time;
 	update_data->files_path = files_path;
+	update_data->project = g_strdup (project);
 	
 	/* data will be freed when callback will be called. The signal will be
 	 * disconnected too, don't worry about disconneting it by hand.
@@ -4912,32 +4709,26 @@
 gboolean
 symbol_db_engine_update_project_symbols (SymbolDBEngine *dbe, const gchar *project)
 {
-	const GdaQuery *query;
-	GdaParameterList *par_list;
-	GdaParameter *param;
+	GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
 	GValue *value;
-	GdaObject *query_result;
+	GdaDataModel *data_model;
 	gint project_id;
 	gint num_rows = 0;
 	gint i;
 	GPtrArray *files_to_scan;
 	SymbolDBEnginePriv *priv;
-
 	
 	g_return_val_if_fail (dbe != NULL, FALSE);
-	if (symbol_db_engine_is_project_opened (dbe, project) == FALSE) 
-	{
-		g_warning ("project is not opened");
-		return FALSE;
-	}
-	
+	g_return_val_if_fail (project != NULL, FALSE);
 	priv = dbe->priv;
 
 	value = gda_value_new (G_TYPE_STRING);
 	g_value_set_string (value, project);
 
 	/* get project id */
-	if ((project_id = sdb_engine_get_table_id_by_unique_name (dbe,
+	if ((project_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
 									 PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
 									 "prjname",
 									 value)) <= 0)
@@ -4946,7 +4737,7 @@
 		return FALSE;
 	}
 
-	if ((query = sdb_engine_get_query_by_id (dbe,
+	if ((stmt = sdb_engine_get_query_by_id (dbe,
 								 PREP_QUERY_GET_ALL_FROM_FILE_BY_PROJECT_ID))
 		== NULL)
 	{
@@ -4955,43 +4746,34 @@
 		return FALSE;
 	}
 
-	if (GDA_QUERY_TYPE_NON_PARSED_SQL ==
-		gda_query_get_query_type ((GdaQuery *) query))
-	{
-		g_warning ("non parsed sql error");
-		gda_value_free (value);
-		return FALSE;
-	}
-
-	if ((par_list = gda_query_get_parameter_list ((GdaQuery *) query)) == NULL)
+	if (gda_statement_get_parameters ((GdaStatement*)stmt, &plist, NULL) == FALSE)
 	{
 		g_warning ("par_list is NULL!\n");
-		gda_value_free (value);
 		return FALSE;
 	}
 
 	/* prjid parameter */
-	if ((param = gda_parameter_list_find_param (par_list, "prjid")) == NULL)
+	if ((param = gda_set_get_holder (plist, "prjid")) == NULL)
 	{
-		g_warning ("param prjname is NULL from pquery!");
+		g_warning ("param prjid is NULL from pquery!");
+		g_object_unref (plist);
 		return FALSE;
 	}
-
 	gda_value_reset_with_type (value, G_TYPE_INT);
 	g_value_set_int (value, project_id);
-	gda_parameter_set_value (param, value);
+	gda_holder_set_value (param, value);
 
 	/* execute the query with parametes just set */
-	query_result =	gda_query_execute
-				  ((GdaQuery *) query, par_list, FALSE, NULL);
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+												   (GdaStatement*)stmt, NULL, NULL);
 
-	if (!GDA_IS_DATA_MODEL (query_result) ||
-		(num_rows = gda_data_model_get_n_rows (GDA_DATA_MODEL (query_result))) <= 0)
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		(num_rows = gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model))) <= 0)
 	{
 		g_message ("no rows");
-		if (query_result != NULL)
-			g_object_unref (query_result);
-		query_result = NULL;
+		if (data_model != NULL)
+			g_object_unref (data_model);
+		data_model = NULL;
 	}
 
 	/* we don't need it anymore */
@@ -5013,7 +4795,7 @@
 		GnomeVFSHandle *handle;
 
 		if ((value =
-			 gda_data_model_get_value_at_col_name (GDA_DATA_MODEL (query_result),
+			 gda_data_model_get_value_at_col_name (data_model,
 												   "file_path", i)) == NULL)
 		{
 			continue;
@@ -5021,12 +4803,12 @@
 
 		/* build abs path. */
 		file_name = g_value_get_string (value);
-		if (priv->data_source != NULL)
+		if (priv->db_directory != NULL)
 		{
 			/* FIXME */
-			abs_vfs_path = g_strdup_printf ("file://%s%s", priv->data_source,
+			abs_vfs_path = g_strdup_printf ("file://%s%s", priv->project_directory,
 										file_name);
-			file_abs_path = g_strdup_printf ("%s%s", priv->data_source,
+			file_abs_path = g_strdup_printf ("%s%s", priv->project_directory,
 										file_name);
 		}
 		else
@@ -5065,7 +4847,7 @@
 		}
 
 		if ((value1 =
-			 gda_data_model_get_value_at_col_name (GDA_DATA_MODEL (query_result),
+			 gda_data_model_get_value_at_col_name (data_model,
 												   "analyse_time", i)) == NULL)
 		{
 			continue;
@@ -5098,18 +4880,13 @@
 
 		if (difftime (db_file_time, file_info->mtime) < 0)
 		{
-			g_message ("FILES TO BE UPDATED ===> : %s [diff time %f] date string is %s", 
+/*			g_message ("FILES TO BE UPDATED ===> : %s [diff time %f] date string is %s", 
 					   file_name, difftime (db_file_time, file_info->mtime),
 					   date_string);
+*/			
 			g_ptr_array_add (files_to_scan, file_abs_path);
 		}
-/*/
-		DEBUG_PRINT ("difftime %f", difftime (db_file_time, file_info->mtime));
-		DEBUG_PRINT ("db_file_time %d - "
-				   "file_info->mtime %d "
-				   "file_info->ctime %d", db_file_time,
-				   file_info->mtime, file_info->ctime);
-//*/
+		
 		gnome_vfs_close (handle);
 		gnome_vfs_uri_unref (uri);
 		gnome_vfs_file_info_unref (file_info);
@@ -5117,9 +4894,10 @@
 		/* no need to free file_abs_path, it's been added to files_to_scan */
 	}
 	
-	if (query_result)
-		g_object_unref (query_result);
-
+	if (data_model)
+		g_object_unref (data_model);
+	g_object_unref (plist);
+	
 	if (files_to_scan->len > 0)
 	{
 		/* at the end let the scanning function do its job */
@@ -5139,17 +4917,11 @@
 	SymbolDBEnginePriv *priv;	
 	
 	g_return_val_if_fail (dbe != NULL, FALSE);
-	if (symbol_db_engine_is_project_opened (dbe, project) == FALSE) 
-	{
-		g_warning ("project is not opened");
-		return FALSE;
-	}	
-
 	priv = dbe->priv;
 	
-	if (strlen (file) < strlen (priv->data_source)) 
+	if (strlen (file) < strlen (priv->project_directory)) 
 	{
-		g_warning ("wrong file");
+		g_warning ("wrong file to delete.");
 		return FALSE;
 	}
 	
@@ -5157,7 +4929,7 @@
 	 * tuples, like sym_kind, sym_type etc */
 	query_str = g_strdup_printf ("DELETE FROM file WHERE prj_id "
 				 "= (SELECT project_id FROM project WHERE project_name = '%s') AND "
-				 "file_path = '%s'", project, file + strlen (priv->data_source));
+				 "file_path = '%s'", project, file + strlen (priv->project_directory));
 
 	sdb_engine_execute_non_select_sql (dbe, query_str);
 	g_free (query_str);
@@ -5189,11 +4961,11 @@
 		
 		DEBUG_PRINT ("processing updating for file [on disk] %s, "
 					 "passed to on_scan_update_buffer_end (): %s", 
-					 node, node + strlen (priv->data_source));
+					 node, node + strlen (priv->db_directory));
 
 		/* will be emitted removed signals */
 		if (sdb_engine_update_file (dbe, node+ 
-									strlen (priv->data_source)) == FALSE)
+									strlen (priv->db_directory)) == FALSE)
 		{
 			g_warning ("Error processing file %s", node);
 			return;
@@ -5239,12 +5011,6 @@
 	
 	DEBUG_PRINT ("symbol_db_engine_update_buffer_symbols ()");
 
-	if (symbol_db_engine_is_project_opened (dbe, project) == FALSE) 
-	{
-		g_warning ("project is not opened");
-		return FALSE;
-	}
-	
 	temp_files = g_ptr_array_new();	
 	real_files_on_db = g_ptr_array_new();
 	
@@ -5252,7 +5018,7 @@
 	for (i=0; i < real_files_list->len; i++) 
 	{
 		gchar *new_node = (gchar*)g_ptr_array_index (real_files_list, i) 
-								   + strlen (priv->data_source);
+								   + strlen (priv->db_directory);
 
 		g_ptr_array_add (real_files_on_db, g_strdup (new_node));
 	}	
@@ -5434,11 +5200,9 @@
 {
 	/*select * from file where file_id not in (select file_defined_id from symbol);*/
 	SymbolDBEnginePriv *priv;
-	const GdaQuery *query;
-	GdaObject *query_result;	
+	GdaDataModel *data_model;
 	GPtrArray *files_to_scan;
 	gint i, num_rows = 0;
-	GdaDataModel *data;
 	gchar *query_str;
 
 	g_return_val_if_fail (dbe != NULL, NULL);
@@ -5448,6 +5212,7 @@
 		g_mutex_lock (priv->mutex);
 	
 /*	
+	FIXME: is this working within libgda-4x?
 	if ((query = sdb_engine_get_query_by_id (dbe,
 								 PREP_QUERY_GET_ALL_FROM_FILE_WHERE_NOT_IN_SYMBOLS))
 		== NULL)
@@ -5468,8 +5233,8 @@
 */
 	query_str = g_strdup_printf ("SELECT * FROM file WHERE file_id NOT IN (SELECT file_defined_id FROM symbol)");
 	DEBUG_PRINT ("symbol_db_engine_get_files_with_zero_symbols  () %s", query_str);
-	if ( (data = sdb_engine_execute_select_sql (dbe, query_str)) == NULL ||
-		  (num_rows = gda_data_model_get_n_rows (data)) <= 0 ) 
+	if ( (data_model = sdb_engine_execute_select_sql (dbe, query_str)) == NULL ||
+		  (num_rows = gda_data_model_get_n_rows (data_model)) <= 0 ) 
 	{
 		if (priv->mutex)
 			g_mutex_unlock (priv->mutex);
@@ -5499,7 +5264,7 @@
 		gchar *file_abs_path = NULL;
 
 		if ((value =
-			 gda_data_model_get_value_at_col_name (data,
+			 gda_data_model_get_value_at_col_name (data_model,
 												   "file_path", i)) == NULL)
 		{
 			continue;
@@ -5507,16 +5272,16 @@
 
 		/* build abs path. */
 		file_name = g_value_get_string (value);
-		if (priv->data_source != NULL)
+		if (priv->db_directory != NULL)
 		{
-			file_abs_path = g_strdup_printf ("%s%s", priv->data_source,
+			file_abs_path = g_strdup_printf ("%s%s", priv->db_directory,
 										file_name);
 		}
 		g_ptr_array_add (files_to_scan, file_abs_path);
 	}
 
 	g_free (query_str);
-	g_object_unref (data);
+	g_object_unref (data_model);
 	
 	if (priv->mutex)
 		g_mutex_unlock (priv->mutex);
@@ -6322,7 +6087,7 @@
 	g_return_val_if_fail (dbe != NULL, NULL);
 	g_return_val_if_fail (file_path != NULL, NULL);
 	priv = dbe->priv;	
-	g_return_val_if_fail (priv->data_source != NULL, NULL);
+	g_return_val_if_fail (priv->db_directory != NULL, NULL);
 
 	if (priv->mutex)
 		g_mutex_lock (priv->mutex);
@@ -6342,7 +6107,7 @@
 	/* fill info_data and join data with optional sql */
 	sdb_engine_prepare_symbol_info_sql (dbe, info_data, join_data, sym_info);
 
-	/* rember to do a file_path + strlen(priv->data_source): a project relative 
+	/* rember to do a file_path + strlen(priv->db_directory): a project relative 
 	 * file path 
 	 */
 	query_str = g_strdup_printf ("SELECT symbol.symbol_id, symbol.name, "
@@ -6350,7 +6115,7 @@
 		"symbol.is_file_scope, symbol.signature %s FROM symbol "
 			"JOIN file ON symbol.file_defined_id = file.file_id "
 		"%s WHERE file.file_path = \"%s\"", info_data->str, join_data->str,
-								 file_path + strlen(priv->data_source));
+								 file_path + strlen(priv->db_directory));
 	
 	DEBUG_PRINT ("symbol_db_engine_get_file_symbols  (): query is %s", query_str);
 
@@ -6438,7 +6203,7 @@
 	g_return_val_if_fail (dbe != NULL, NULL);
 	
 	priv = dbe->priv;
-	full_path = g_strdup_printf ("%s%s", priv->data_source, file);
+	full_path = g_strdup_printf ("%s%s", priv->db_directory, file);
 	return full_path;	
 }
 
@@ -6452,15 +6217,15 @@
 		
 	priv = dbe->priv;
 	
-	if (priv->data_source == NULL)
+	if (priv->db_directory == NULL)
 		return NULL;
 
-	if (strlen (priv->data_source) >= strlen (full_local_file_path)) 
+	if (strlen (priv->db_directory) >= strlen (full_local_file_path)) 
 	{
 		return NULL;
 	}
 
-	tmp = full_local_file_path + strlen (priv->data_source);
+	tmp = full_local_file_path + strlen (priv->db_directory);
 	relative_path = strdup (tmp);
 
 	return relative_path;

Modified: branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.h
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.h	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/symbol-db-engine.h	Thu Mar 27 22:19:35 2008
@@ -95,52 +95,52 @@
 
 /**
  * Open or create a new database. 
- * Be sure to give a base_prj_path with the ending '/' for directory.
- * E.g: a project on '/tmp/foo/' dir.
+ * Be sure to give a base_db_path with the ending '/' for directory.
+ * @param base_db_path directory where .anjuta_sym_db.db will be stored. It can be
+ *        different from project_directory
+ *        E.g: a db on '/tmp/foo/' dir.
+ * @param prj_directory project directory. It may be different from base_db_path.
+ *        It's mainly used to map files inside the db. Say for example that you want to
+ *        add to a project a file /home/user/project/foo_prj/src/file.c with a project
+ *        directory of /home/user/project/foo_prj/. On db it'll be represented as
+ *        src/file.c. In this way you can move around the project dir without dealing
+ *        with relative paths.
  */
 gboolean 
-symbol_db_engine_open_db (SymbolDBEngine *dbe, const gchar* base_prj_path);
+symbol_db_engine_open_db (SymbolDBEngine *dbe, const gchar* base_db_path,
+						  const gchar * prj_directory);
+
+
+/** Disconnect db, gda client and db_connection */
+gboolean 
+symbol_db_engine_close_db (SymbolDBEngine *dbe);
+
 
 /**
- * Check if the database already exists into the prj_directory
+ * Check if the database already exists into the db_directory
  */
 gboolean
-symbol_db_engine_db_exists (SymbolDBEngine * dbe, const gchar * prj_directory);
-
+symbol_db_engine_db_exists (SymbolDBEngine * dbe, const gchar * db_directory);
 
-/** Add a new workspace to database. */
+/** Add a new workspace to an opened database. */
 gboolean 
 symbol_db_engine_add_new_workspace (SymbolDBEngine *dbe, const gchar* workspace);
 
 
-/** Add a new project to workspace.*/
+/** Add a new project to workspace to an opened database.*/
 gboolean 
 symbol_db_engine_add_new_project (SymbolDBEngine *dbe, const gchar* workspace, 
 								  const gchar* project);
 
-/**
- * Return the name of the opened project.
- * NULL on error. Returned string must be freed by caller.
- */
-gchar*
-symbol_db_engine_get_opened_project_name (SymbolDBEngine * dbe);
-
-
 /** 
- * Open a project. Return false if project isn't created/opened. 
- * This function *must* be called before any other operation on db.
- * Another option would be create a fresh new project: that way will also open it.
+ * Test project existence. 
+ * @return false if project isn't found
  */ 
 gboolean 
-symbol_db_engine_open_project (SymbolDBEngine *dbe, /*gchar* workspace, */
+symbol_db_engine_project_exists (SymbolDBEngine *dbe, /*gchar* workspace, */
 								  const gchar* project_name);
 
 
-/** Disconnect db, gda client and db_connection and close the project */
-gboolean 
-symbol_db_engine_close_project (SymbolDBEngine *dbe, const gchar* project_name);
-
-
 /** 
  * Add a group of files of a single language to a project. It will perform also 
  * a symbols scannig/populating of db if scan_symbols is TRUE.
@@ -148,6 +148,9 @@
  * symbol_db_engine_open_db ().
  * @note if some file fails to enter the db the function will return without
  * processing the remaining files.
+ * @param project_name something like 'foo_project', or 'helloworld_project'
+ * @param project_directory something like the base path '/home/user/projects/foo_project/'
+ *        Be sure not to exchange the db_directory with project_directory! they're different!
  * @param files_path requires full path to files on disk. Ctags itself requires that.
  *        it must be something like "/home/path/to/my/foo/file.xyz". Also it requires
  *		  a language string to represent the file.
@@ -158,9 +161,11 @@
  *		  elments that files_path has. It should be populated like this: "C", "C++",
  *		  "Java"
  * 		  This is done to be uniform to the language-manager plugin.
+ * @return true is insertion is successful.
  */
 gboolean 
-symbol_db_engine_add_new_files (SymbolDBEngine *dbe, const gchar* project,
+symbol_db_engine_add_new_files (SymbolDBEngine *dbe, 
+								const gchar * project_name,
 							    const GPtrArray *files_path,
 								const GPtrArray *languages,
 								gboolean scan_symbols);
@@ -214,13 +219,6 @@
 gchar*
 symbol_db_engine_get_file_db_path (SymbolDBEngine *dbe, const gchar* full_local_file_path);
 
-
-/**
- * Will test the opened project within the dbe plugin and the passed one.
- */
-gboolean inline
-symbol_db_engine_is_project_opened (SymbolDBEngine *dbe, const gchar* project_name);
-
 /** 
  * Hash table that converts from a char like 'class' 'struct' etc to an 
  * IANJUTA_SYMBOL_TYPE

Modified: branches/anjuta-symbol-db/plugins/symbol-db/symbol-db.glade
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/symbol-db.glade	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/symbol-db.glade	Thu Mar 27 22:19:35 2008
@@ -1,66 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd";>
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window1">
-  <property name="title" translatable="yes">window1</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="focus_on_map">True</property>
-  <property name="urgency_hint">False</property>
-
-  <child>
-    <widget class="GtkHBox" id="top_widget">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">0</property>
-
-      <child>
-	<widget class="GtkScrolledWindow" id="scrolledwindow1">
-	  <property name="visible">True</property>
-	  <property name="can_focus">True</property>
-	  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	  <property name="shadow_type">GTK_SHADOW_IN</property>
-	  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-	  <child>
-	    <widget class="GtkTextView" id="textview1">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="editable">True</property>
-	      <property name="overwrite">False</property>
-	      <property name="accepts_tab">True</property>
-	      <property name="justification">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap_mode">GTK_WRAP_NONE</property>
-	      <property name="cursor_visible">True</property>
-	      <property name="pixels_above_lines">0</property>
-	      <property name="pixels_below_lines">0</property>
-	      <property name="pixels_inside_wrap">0</property>
-	      <property name="left_margin">0</property>
-	      <property name="right_margin">0</property>
-	      <property name="indent">0</property>
-	      <property name="text" translatable="yes">Anjuta Plugin User Interface</property>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>

Modified: branches/anjuta-symbol-db/plugins/symbol-db/test/Makefile.am
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/test/Makefile.am	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/test/Makefile.am	Thu Mar 27 22:19:35 2008
@@ -1,7 +1,6 @@
 
 bin_PROGRAMS = \
-	test-symbol-db \
-	benchmark
+	benchmark 
 
 AM_CPPFLAGS = \
 	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
@@ -13,8 +12,10 @@
 	-DPACKAGE_SRC_DIR=\"$(srcdir)\" \
 	$(LIBANJUTA_CFLAGS) \
 	$(PLUGIN_SYMBOL_DB_CFLAGS) \
-	$(GDL_CFLAGS)
+	$(GDL_CFLAGS) \
+	-DDEBUG
 
+AM_CFLAGS = -g -pg
 
 test_symbol_db_SOURCES = \
 	main.c       \
@@ -56,6 +57,24 @@
 	$(LIBANJUTA_LIBS) \
 	$(PLUGIN_SYMBOL_DB_LIBS)
 
+
+gda_2_connections_bug_SOURCES = \
+	gda_two_connections_bug.c       \
+	../readtags.c       \
+	../readtags.h       \
+	../symbol-db-engine.c       \
+	../symbol-db-engine.h       \
+	../symbol-db-engine-iterator.c       \
+	../symbol-db-engine-iterator.h \
+	../symbol-db-engine-iterator-node.c \
+	../symbol-db-engine-iterator-node.h \
+	../symbol-db-view.h \
+	../symbol-db-view.c
+
+gda_2_connections_bug_LDFLAGS = \
+	$(LIBANJUTA_LIBS) \
+	$(PLUGIN_SYMBOL_DB_LIBS)
+
 ## File created by the gnome-build tools
 
 

Modified: branches/anjuta-symbol-db/plugins/symbol-db/test/benchmark.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/test/benchmark.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/test/benchmark.c	Thu Mar 27 22:19:35 2008
@@ -5,12 +5,12 @@
 #include <gtk/gtk.h>
 #include <libgnomevfs/gnome-vfs.h>
 
-#define BASE_PATH "/home/jhs/devel/anjuta-symbol-db/plugins/symbol-db"
+#define BASE_PATH "/home/pescio/svnroot/anjuta/plugins/symbol-db"
 
 static void on_single_file_scan_end (SymbolDBEngine* engine, GPtrArray* files)
 {
 	static int i = 0;
-	g_message ("Finished: %s", (gchar*)g_ptr_array_index (files, i++));
+	g_message ("Finished [%d]: %s", i, (gchar*)g_ptr_array_index (files, i++));
 }
 
 static GPtrArray* get_files (const gchar* dir)
@@ -61,19 +61,14 @@
 	}
 	root_dir = argv[1];
 	
-  engine = symbol_db_engine_new ();
-	if (!symbol_db_engine_open_db (engine, root_dir))
+  	engine = symbol_db_engine_new ();
+	if (!symbol_db_engine_open_db (engine, root_dir, root_dir))
 	{
 		g_message ("Could not open database: %s", root_dir);
 		return 1;
 	}
 	
 	symbol_db_engine_add_new_project (engine, NULL, root_dir);
-	if (!symbol_db_engine_open_project (engine, root_dir))
-	{
-		g_message ("Could not open project!");
-		return 1;
-	}
 			
 	files = get_files (root_dir);
 	for (i = 0; i < files->len; i++)

Modified: branches/anjuta-symbol-db/plugins/symbol-db/test/main.c
==============================================================================
--- branches/anjuta-symbol-db/plugins/symbol-db/test/main.c	(original)
+++ branches/anjuta-symbol-db/plugins/symbol-db/test/main.c	Thu Mar 27 22:19:35 2008
@@ -316,10 +316,11 @@
 
 #endif
 
-#if 0
+#if 1
 int main(int argc, char** argv)
 {
-	SymbolDBEngine *dbe;
+	SymbolDBEngine *dbe_one;
+	SymbolDBEngine *dbe_two;
 	tagFile *tag_file;
 	tagFileInfo tag_file_info;
 	tagEntry tag_entry;
@@ -328,31 +329,50 @@
 	gnome_vfs_init ();
     g_type_init();
 	gda_init ("Test db", "0.1", argc, argv);
-	dbe = symbol_db_engine_new ();
-	
-	gchar *prj_dir = "/home/pescio/Projects/entwickler-0.1";
-
-	g_message ("opening database");
-	if (symbol_db_engine_open_db (dbe, prj_dir) == FALSE)
-		g_message ("error in opening db");
 	
-//	g_message ("adding new workspace");
-//	if (symbol_db_engine_add_new_workspace (dbe, "foo_workspace") == FALSE)
-//		g_message ("error adding workspace");
+	dbe_one = symbol_db_engine_new ();
+	dbe_two = symbol_db_engine_new ();
 	
-//	g_message ("adding new project");
-//	if (symbol_db_engine_add_new_project (dbe, NULL, "foo_project") == FALSE)
-//		g_message ("error in adding project");
+	gchar *prj_dir_one = "/home/pescio/Projects/entwickler-0.1";
+
+	g_message ("opening database ONE");
+	if (symbol_db_engine_open_db (dbe_one, prj_dir_one, prj_dir_one) == FALSE)
+		g_message ("error in opening db 1");
 	
-	g_message ("opening project");
-	if (symbol_db_engine_open_project (dbe, "/home/pescio/Projects/entwickler-0.1") == FALSE)
-		g_message ("error in opening project");	
+	g_message ("opening project ONE");
+	if (symbol_db_engine_add_new_project (dbe_one, NULL, "project_one") == FALSE)
+		g_message ("error in opening project 1");	
+
+
+	gchar *prj_dir_two = "/home/pescio/Projects/foobar-sample";
+
+	g_message ("opening database TWO");
+	if (symbol_db_engine_open_db (dbe_two, prj_dir_two, prj_dir_two) == FALSE)
+		g_message ("error in opening db 2");
 	
+	g_message ("opening project TWO");
+	if (symbol_db_engine_add_new_project (dbe_two, NULL, "project_two") == FALSE)
+		g_message ("error in opening project 2");	
 
 	
-//	g_message ("adding files...");
-//	add_new_files  (dbe);
+	/* ------ add files ------ */
+
+	g_message ("adding files to ONE");
+	GPtrArray * files_array_one = g_ptr_array_new();	
+	GPtrArray * languages_one = g_ptr_array_new ();
+	g_ptr_array_add (files_array_one, g_strdup("/home/pescio/Projects/entwickler-0.1/entwickler/app.cc"));	
+	g_ptr_array_add (languages_one, g_strdup ("C"));
+	symbol_db_engine_add_new_files (dbe_one, "project_one", files_array_one, languages_one, TRUE);
 
+	
+	g_message ("adding files to TWO");
+	GPtrArray * files_array_two = g_ptr_array_new();	
+	GPtrArray * languages_two = g_ptr_array_new ();
+	g_ptr_array_add (files_array_two, g_strdup("/home/pescio/Projects/foobar-sample/src/main.c"));	
+	g_ptr_array_add (languages_two, g_strdup ("C"));
+	symbol_db_engine_add_new_files (dbe_two, "project_two", files_array_two, languages_two, TRUE);
+	
+	
 	/* 
 	** Message: elapsed: 319.713238 for (4008) [0.079769 per symbol]
 	
@@ -389,8 +409,8 @@
 //	g_message ("getting scope members");
 //	get_scope_members (dbe);
 	
-	g_message ("getting get_global_members");
-	get_global_members (dbe);
+//	g_message ("getting get_global_members");
+//	get_global_members (dbe);
 
 //	g_message ("getting parents");
 //	get_parents (dbe);
@@ -405,11 +425,11 @@
 //	update_buffers (dbe);
 	
 	g_message ("go on with main loop");
+
 	GMainLoop *main_loop;	
 	main_loop = g_main_loop_new( NULL, FALSE );
 	
 	g_main_loop_run( main_loop );
-
 	return 0;
 }
 #endif
@@ -525,10 +545,30 @@
 }
 #endif
 
-
+#if 0
 #include "pkg.h"
 #include "parse.h"
 
+static void
+packages_foreach (gpointer key, gpointer value, gpointer data)
+{
+	g_message ("--------------------------------------");
+	g_message ("key : %s, value : %s", key, value );
+	
+///*	
+	Package *pkg = parse_package_file (value, TRUE, TRUE);
+	
+	if (pkg == NULL)
+	{
+		g_message ("pkg is NULL.");
+		return;
+	}
+	
+	gchar *output = package_get_I_cflags (pkg);
+	g_message ("I flags: %s", output);
+	//*/
+}
+
 int main(int argc, char** argv)
 {
   	g_thread_init(NULL);
@@ -536,32 +576,46 @@
 	gchar *search_path;
   
 	GSList *packages;
-	package_init  ();	
-  search_path = getenv ("PKG_CONFIG_PATH");
-  if (search_path) 
+	
+  	search_path = getenv ("PKG_CONFIG_PATH");
+  	if (search_path) 
     {
       add_search_dirs(search_path, G_SEARCHPATH_SEPARATOR_S);
     }
 	
-	g_message ("got search patch %s", search_path);
+	g_message ("got search path %s", search_path);
 	
-  if (getenv("PKG_CONFIG_LIBDIR") != NULL) 
+  	if (getenv("PKG_CONFIG_LIBDIR") != NULL) 
     {
       add_search_dirs(getenv("PKG_CONFIG_LIBDIR"), G_SEARCHPATH_SEPARATOR_S);
     }
 	
+	
+	disable_uninstalled = TRUE;
+	enable_private_libs();
+	
+	package_init  ();	
+	
+//	print_package_list ();	
 
-	//print_package_list ();
-		
+
+	GHashTable *locations = get_packages_locations ();
+	if (locations == NULL)
+	{
+		g_message ("locations is NULL");
+	}
+	g_hash_table_foreach (locations, packages_foreach, NULL);
+	
+	/*
 	Package *pkg = parse_package_file ("/usr/lib/pkgconfig/glib-2.0.pc", TRUE, TRUE);
 	
 	g_message ("got %s", pkg->name);
 	
 	gchar *output = package_get_I_cflags (pkg);
 	g_message ("Got this %s", output);
+	*/
 	
-	
-	/*
+	/*/
 	packages = parse_module_list (NULL, "glib-2.0", "(command line arguments)");
 	
 	g_message ("==> %d", g_slist_length (packages));
@@ -572,12 +626,99 @@
 		return -1;
 	}
 
-	gchar *output = packages_get_I_cflags (packages);
+	output = packages_get_I_cflags (packages);
 	g_message ("Got this %s", output);
-	*/
+	//*/
 	
   	gtk_main();
 	
 	return 0;
 }
+#endif
+
+
+#if 0
+#include <libgnomevfs/gnome-vfs.h>
+
+
+GList **
+files_visit_dir (GList **files_list, const gchar* uri)
+{
+	
+	GList *files_in_curr_dir = NULL;
+	
+	if (gnome_vfs_directory_list_load (&files_in_curr_dir, uri,
+								   GNOME_VFS_FILE_INFO_GET_MIME_TYPE) == GNOME_VFS_OK) 
+	{
+		GList *node;
+		node = files_in_curr_dir;
+		do {
+			GnomeVFSFileInfo* info;
+						
+			info = node->data;
+			
+			if (info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) {
+				
+				if (strcmp (info->name, ".") == 0 ||
+					strcmp (info->name, "..") == 0)
+					continue;
+
+				g_message ("node [DIRECTORY]: %s", info->name);				
+				gchar *tmp = g_strdup_printf ("%s/%s", uri, info->name);
+				
+				g_message ("recursing for: %s", tmp);
+				/* recurse */
+				files_list = files_visit_dir (files_list, tmp);
+				
+				g_free (tmp);
+			}
+			else {
+				gchar *local_path;
+				gchar *tmp = g_strdup_printf ("%s/%s", 
+									uri, info->name);
+			
+				g_message ("prepending %s", tmp);
+				local_path = gnome_vfs_get_local_path_from_uri (tmp);
+				*files_list = g_list_append (*files_list, local_path );
+				g_free (tmp);
+			}
+		} while ((node = node->next) != NULL);		
+	}	 
+	
+	return files_list;
+}
+
+
+
+
+int main(int argc, char** argv)
+{
+  	g_thread_init(NULL);
+  	gtk_init (&argc, &argv);
+	GList *files = NULL;
+	GList *node;
+
+	gnome_vfs_init  ();
+	
+	files_visit_dir (&files, "file:///usr/include/glib-2.0");
+
+	if (files == NULL) 
+	{
+		g_message ("files null");
+		return -1;
+	}
+	
+	node = files;
+	
+	do {
+		g_message ("node: %s", node->data);
+	} while ((node = node->next) != NULL);		
+	
+
+  	gtk_main();
+	
+	return 0;  
+}
+#endif
+
 



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