From: Michael Meskes Date: Wed, 24 Aug 2005 10:35:54 +0000 (+0000) Subject: - Check for NULL before checking whether argument is an array. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=5943b5eb9262f7c4e8cda6886bb13a0a15f819d9;p=users%2Fbernd%2Fpostgres.git - Check for NULL before checking whether argument is an array. - Removed stray character from string quoting. - Fixed check to report missing varchar pointer implementation. --- diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c index def53f3f40..43292a505e 100644 --- a/src/interfaces/ecpg/ecpglib/data.c +++ b/src/interfaces/ecpg/ecpglib/data.c @@ -46,29 +46,6 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, ECPGlog("ECPGget_data line %d: RESULT: %s offset: %ld array: %d\n", lineno, pval ? pval : "", offset, isarray); - /* pval is a pointer to the value */ - /* let's check if it really is an array if it should be one */ - if (isarray == ECPG_ARRAY_ARRAY) - { - if (*pval != '{') - { - ECPGraise(lineno, ECPG_DATA_NOT_ARRAY, ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL); - return (false); - } - - switch (type) - { - case ECPGt_char: - case ECPGt_unsigned_char: - case ECPGt_varchar: - break; - - default: - pval++; - break; - } - } - /* We will have to decode the value */ /* @@ -125,6 +102,29 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (value_for_indicator == -1) return (true); + /* pval is a pointer to the value */ + /* let's check if it really is an array if it should be one */ + if (isarray == ECPG_ARRAY_ARRAY) + { + if (*pval != '{') + { + ECPGraise(lineno, ECPG_DATA_NOT_ARRAY, ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL); + return (false); + } + + switch (type) + { + case ECPGt_char: + case ECPGt_unsigned_char: + case ECPGt_varchar: + break; + + default: + pval++; + break; + } + } + do { switch (type) diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 10bff68c5d..7d9e072137 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -5121,7 +5121,8 @@ variable: opt_pointer ECPGColLabelCommon opt_array_bounds opt_initializer *dim = '\0'; else sprintf(dim, "[%s]", dimension); - if (strcmp(length, "0") == 0) + /* if (strcmp(length, "0") == 0)*/ + if (atoi(length) <= 0) mmerror(PARSE_ERROR, ET_ERROR, "pointer to varchar are not implemented"); if (strcmp(dimension, "0") == 0)