[libgda] Avoid reading blob if not necessary



commit 38ae181bf0a3e83378e2dc6b3f40bfe6666311ee
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 f761cba..2085b7d 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 3554754..6c48241 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]