summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/descriptor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/descriptor.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/interfaces/ecpg/ecpglib/descriptor.c b/src/interfaces/ecpg/ecpglib/descriptor.c
index d19dce21108..97849d0793b 100644
--- a/src/interfaces/ecpg/ecpglib/descriptor.c
+++ b/src/interfaces/ecpg/ecpglib/descriptor.c
@@ -587,6 +587,28 @@ ECPGset_desc_header(int lineno, const char *desc_name, int count)
return true;
}
+static void
+set_desc_attr(struct descriptor_item *desc_item, struct variable *var,
+ char *tobeinserted)
+{
+ if (var->type != ECPGt_bytea)
+ desc_item->is_binary = false;
+
+ else
+ {
+ struct ECPGgeneric_varchar *variable =
+ (struct ECPGgeneric_varchar *) (var->value);
+
+ desc_item->is_binary = true;
+ desc_item->data_len = variable->len;
+ }
+
+ ecpg_free(desc_item->data); /* free() takes care of a
+ * potential NULL value */
+ desc_item->data = (char *) tobeinserted;
+}
+
+
bool
ECPGset_desc(int lineno, const char *desc_name, int index,...)
{
@@ -666,9 +688,7 @@ ECPGset_desc(int lineno, const char *desc_name, int index,...)
return false;
}
- ecpg_free(desc_item->data); /* free() takes care of a
- * potential NULL value */
- desc_item->data = (char *) tobeinserted;
+ set_desc_attr(desc_item, var, tobeinserted);
tobeinserted = NULL;
break;
}