[anjuta/sdb-queries] symbol-db: Better sql preparation
- From: Naba Kumar <naba src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta/sdb-queries] symbol-db: Better sql preparation
- Date: Wed, 16 Jun 2010 21:38:50 +0000 (UTC)
commit 6696b8aa200163ccc9d358832e47314bbde0dd11
Author: Naba Kumar <naba gnome org>
Date: Thu Jun 17 00:38:12 2010 +0300
symbol-db: Better sql preparation
plugins/symbol-db/symbol-db-query.c | 48 ++++++++++++++++++++++++-----------
1 files changed, 33 insertions(+), 15 deletions(-)
---
diff --git a/plugins/symbol-db/symbol-db-query.c b/plugins/symbol-db/symbol-db-query.c
index ca1d910..4bb9e54 100644
--- a/plugins/symbol-db/symbol-db-query.c
+++ b/plugins/symbol-db/symbol-db-query.c
@@ -49,9 +49,8 @@ enum
};
struct _SymbolDBQueryPriv {
- GdaStatement *stmt;
gchar *sql_stmt;
- gboolean prepared;
+ GdaStatement *stmt;
IAnjutaSymbolQueryName name;
IAnjutaSymbolQueryMode mode;
@@ -302,6 +301,22 @@ sdb_query_add_field (SymbolDBQuery *query, IAnjutaSymbolField field)
}
/**
+ * sdb_query_reset:
+ * @query: The query
+ *
+ * Resets the query to unprepared status.
+ */
+static void
+sdb_query_reset (SymbolDBQuery *query)
+{
+ if (query->priv->stmt)
+ g_object_unref (query->priv->stmt);
+ query->priv->stmt = NULL;
+ g_free (query->priv->sql_stmt);
+ query->priv->sql_stmt = NULL;
+}
+
+/**
* sdb_query_update:
* @query: The query
*
@@ -478,12 +493,16 @@ sdb_query_execute_real (SymbolDBQuery *query)
{
GdaDataModel *data_model;
SymbolDBQueryPriv *priv = query->priv;
+
+ if (!symbol_db_engine_is_connected (priv->dbe_selected) ||
+ symbol_db_engine_is_scanning (priv->dbe_selected))
+ return NULL;
- if (!priv->prepared)
- {
+ if (!priv->sql_stmt)
sdb_query_update (query);
- priv->prepared = TRUE;
- }
+ else if (!priv->stmt)
+ priv->stmt = symbol_db_engine_get_statement (priv->dbe_selected,
+ priv->sql_stmt);
data_model = symbol_db_engine_execute_select (priv->dbe_selected,
priv->stmt,
priv->params);
@@ -585,9 +604,8 @@ on_sdb_query_dbe_connected (SymbolDBEngine *dbe, SymbolDBQuery *query)
{
g_return_if_fail (SYMBOL_DB_IS_QUERY (query));
- if (!query->priv->stmt)
+ if (!query->priv->stmt && query->priv->sql_stmt)
{
- g_assert (query->priv->sql_stmt);
query->priv->stmt =
symbol_db_engine_get_statement (query->priv->dbe_selected,
query->priv->sql_stmt);
@@ -644,7 +662,7 @@ sdb_query_execute (SymbolDBQuery *query)
return NULL;
/* Empty resultset is useless for us. Return NULL instead */
- if (symbol_db_query_result_is_empty (result))
+ if (result == NULL || symbol_db_query_result_is_empty (result))
{
g_object_unref (result);
return NULL;
@@ -796,18 +814,18 @@ sdb_query_set_property (GObject *object, guint prop_id, const GValue *value, GPa
{
case PROP_QUERY_NAME:
priv->name = g_value_get_enum (value);
- sdb_query_update (query);
+ sdb_query_reset (query);
break;
case PROP_QUERY_MODE:
priv->mode = g_value_get_enum (value);
break;
case PROP_FILTERS:
priv->filters = g_value_get_int (value);
- sdb_query_update (query);
+ sdb_query_reset (query);
break;
case PROP_FILE_SCOPE:
priv->file_scope = g_value_get_enum (value);
- sdb_query_update (query);
+ sdb_query_reset (query);
break;
case PROP_LIMIT:
gda_holder_set_value (priv->param_limit, value, NULL);
@@ -817,11 +835,11 @@ sdb_query_set_property (GObject *object, guint prop_id, const GValue *value, GPa
break;
case PROP_GROUP_BY:
priv->group_by = g_value_get_enum (value);
- sdb_query_update (query);
+ sdb_query_reset (query);
break;
case PROP_ORDER_BY:
priv->group_by = g_value_get_enum (value);
- sdb_query_update (query);
+ sdb_query_reset (query);
break;
case PROP_DB_ENGINE_SYSTEM:
g_assert (priv->dbe_system == NULL);
@@ -1056,7 +1074,7 @@ sdb_query_set_fields (IAnjutaSymbolQuery *query, gint n_fields,
for (i = 0; i < n_fields; i++)
priv->fields[i] = fields[i];
priv->fields[i] = IANJUTA_SYMBOL_FIELD_END;
- sdb_query_update (SYMBOL_DB_QUERY (query));
+ sdb_query_reset (SYMBOL_DB_QUERY (query));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]