[libgda] Avoid reading blob if not necessary
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgda] Avoid reading blob if not necessary
- Date: Fri, 29 Jan 2010 20:03:06 +0000 (UTC)
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]