[libgda/LIBGDA_4.0] Avoid reading blob if not necessary
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_4.0] Avoid reading blob if not necessary
- Date: Fri, 29 Jan 2010 20:53:23 +0000 (UTC)
commit 332459df3a1e1d3e363d9dd81cf53088bf7acedb
Author: Vivien Malerba <malerba gnome-db org>
Date: Fri Jan 29 20:56:37 2010 +0100
Avoid reading blob if not necessary
libgda/handlers/gda-handler-bin.c | 7 +++++--
libgda/sqlite/virtual/gda-vprovider-data-model.c | 5 ++++-
2 files changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/libgda/handlers/gda-handler-bin.c b/libgda/handlers/gda-handler-bin.c
index b168b3a..1ceda7b 100644
--- a/libgda/handlers/gda-handler-bin.c
+++ b/libgda/handlers/gda-handler-bin.c
@@ -185,12 +185,15 @@ gda_handler_bin_get_sql_from_value (GdaDataHandler *iface, const GValue *value)
}
else {
GdaBlob *blob;
+ GdaBinary *bin;
blob = (GdaBlob*) gda_value_get_blob ((GValue *) value);
- if (blob->op)
+ bin = (GdaBinary *) blob;
+ if (blob->op &&
+ (bin->binary_length != gda_blob_op_get_length (blob->op)))
gda_blob_op_read_all (blob->op, blob);
gchar *str, *str2;
- str = gda_binary_to_string ((GdaBinary *) blob, 0);
+ str = gda_binary_to_string (bin, 0);
str2 = gda_default_escape_string (str);
g_free (str);
retval = g_strdup_printf ("'%s'", str2);
diff --git a/libgda/sqlite/virtual/gda-vprovider-data-model.c b/libgda/sqlite/virtual/gda-vprovider-data-model.c
index e75eb41..7fc9e03 100644
--- a/libgda/sqlite/virtual/gda-vprovider-data-model.c
+++ b/libgda/sqlite/virtual/gda-vprovider-data-model.c
@@ -664,8 +664,11 @@ virtualColumn (sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i)
sqlite3_result_double (ctx, g_value_get_double (value));
else if (G_VALUE_TYPE (value) == GDA_TYPE_BLOB) {
GdaBlob *blob;
+ GdaBinary *bin;
blob = (GdaBlob *) gda_value_get_blob (value);
- if (blob->op)
+ bin = (GdaBinary *) blob;
+ if (blob->op &&
+ (bin->binary_length != gda_blob_op_get_length (blob->op)))
gda_blob_op_read_all (blob->op, blob);
sqlite3_result_blob (ctx, blob->data.data, blob->data.binary_length, SQLITE_TRANSIENT);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]