aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c10
-rw-r--r--src/interfaces/ecpg/ecpglib/prepare.c4
-rw-r--r--src/interfaces/ecpg/include/ecpglib.h2
-rw-r--r--src/interfaces/ecpg/preproc/type.c6
-rw-r--r--src/interfaces/ecpg/preproc/variable.c4
5 files changed, 15 insertions, 11 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 3c54a07ac5b..7dc477847ee 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.3 2003/12/17 15:31:51 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.4 2004/01/28 09:55:53 meskes Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
@@ -190,7 +190,7 @@ free_variable(struct variable * var)
{
struct variable *var_next;
- if (var == (struct variable *) NULL)
+ if (var == NULL)
return;
var_next = var->next;
ECPGfree(var);
@@ -206,7 +206,7 @@ free_variable(struct variable * var)
static void
free_statement(struct statement * stmt)
{
- if (stmt == (struct statement *) NULL)
+ if (stmt == NULL)
return;
free_variable(stmt->inlist);
free_variable(stmt->outlist);
@@ -333,7 +333,7 @@ ECPGis_type_an_array(int type, const struct statement * stmt, const struct varia
}
PQclear(query);
ECPGtypeinfocache_push(&(stmt->connection->cache_head), type, isarray, stmt->lineno);
- ECPGlog("ECPGexecute line %d: TYPE database: %d C: %d array: %d\n", stmt->lineno, type, var->type, isarray);
+ ECPGlog("ECPGis_type_an_array line %d: TYPE database: %d C: %d array: %d\n", stmt->lineno, type, var->type, isarray);
return isarray;
}
@@ -356,7 +356,7 @@ ECPGstore_result(const PGresult *results, int act_field,
*/
if ((var->arrsize > 0 && ntuples > var->arrsize) || (var->ind_arrsize > 0 && ntuples > var->ind_arrsize))
{
- ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d don't fit into array of %d\n",
+ ECPGlog("ECPGstore_result line %d: Incorrect number of matches: %d don't fit into array of %d\n",
stmt->lineno, ntuples, var->arrsize);
ECPGraise(stmt->lineno, INFORMIX_MODE(stmt->compat)?ECPG_INFORMIX_SUBSELECT_NOT_ONE:ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL);
return false;
diff --git a/src/interfaces/ecpg/ecpglib/prepare.c b/src/interfaces/ecpg/ecpglib/prepare.c
index 55f497e03ab..923c931a823 100644
--- a/src/interfaces/ecpg/ecpglib/prepare.c
+++ b/src/interfaces/ecpg/ecpglib/prepare.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.9 2003/08/04 00:43:32 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.9.4.1 2004/01/28 09:55:53 meskes Exp $ */
#define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h"
@@ -169,7 +169,7 @@ ECPGdeallocate_all(int lineno)
/* return the prepared statement */
char *
-ECPGprepared_statement(char *name)
+ECPGprepared_statement(const char *name)
{
struct prepared_statement *this;
diff --git a/src/interfaces/ecpg/include/ecpglib.h b/src/interfaces/ecpg/include/ecpglib.h
index 317d35e3294..6f9938aaf0d 100644
--- a/src/interfaces/ecpg/include/ecpglib.h
+++ b/src/interfaces/ecpg/include/ecpglib.h
@@ -54,7 +54,7 @@ bool ECPGprepare(int, char *, char *);
bool ECPGdeallocate(int, int, char *);
bool ECPGdeallocate_one(int, char *);
bool ECPGdeallocate_all(int);
-char *ECPGprepared_statement(char *);
+char *ECPGprepared_statement(const char *);
void ECPGlog(const char *format,...);
char *ECPGerrmsg(void);
diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c
index e14321d54f9..cb0eb275667 100644
--- a/src/interfaces/ecpg/preproc/type.c
+++ b/src/interfaces/ecpg/preproc/type.c
@@ -47,7 +47,11 @@ ECPGstruct_member_dup(struct ECPGstruct_member * rm)
type = ECPGmake_struct_type(rm->type->u.members, rm->type->type, rm->type->struct_sizeof);
break;
case ECPGt_array:
- type = ECPGmake_array_type(ECPGmake_simple_type(rm->type->u.element->type, rm->type->u.element->size), rm->type->size);
+ /* if this array does contain a struct again, we have to create the struct too */
+ if (rm->type->u.element->type == ECPGt_struct)
+ type = ECPGmake_struct_type(rm->type->u.element->u.members, rm->type->u.element->type, rm->type->u.element->struct_sizeof);
+ else
+ type = ECPGmake_array_type(ECPGmake_simple_type(rm->type->u.element->type, rm->type->u.element->size), rm->type->size);
break;
default:
type = ECPGmake_simple_type(rm->type->type, rm->type->size);
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c
index be1cb5f0b74..e12b9434998 100644
--- a/src/interfaces/ecpg/preproc/variable.c
+++ b/src/interfaces/ecpg/preproc/variable.c
@@ -104,10 +104,10 @@ find_struct_member(char *name, char *str, struct ECPGstruct_member * members, in
return (find_struct_member(name, end, members->type->u.element->u.members, brace_level));
break;
case '.':
- if (members->type->type != ECPGt_array)
+ if (members->type->type == ECPGt_array)
return (find_struct_member(name, end, members->type->u.element->u.members, brace_level));
else
- return (find_struct_member(name, next, members->type->u.members, brace_level));
+ return (find_struct_member(name, end, members->type->u.members, brace_level));
break;
default:
snprintf(errortext, sizeof(errortext), "incorrectly formed variable %s", name);