anjuta r3801 - in branches/anjuta-symbol-db: . libanjuta/interfaces plugins/symbol-browser plugins/symbol-db plugins/symbol-db/test
- From: jhs svn gnome org
- To: svn-commits-list gnome org
- Subject: anjuta r3801 - in branches/anjuta-symbol-db: . libanjuta/interfaces plugins/symbol-browser plugins/symbol-db plugins/symbol-db/test
- Date: Thu, 27 Mar 2008 22:19:35 +0000 (GMT)
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]