]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
- Fixed prototype for ECPGprepared_statement to not moan about "const char"
authorMichael Meskes <meskes@postgresql.org>
Wed, 28 Jan 2004 09:55:53 +0000 (09:55 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 28 Jan 2004 09:55:53 +0000 (09:55 +0000)
- Fixed parsing of nested structures.

src/interfaces/ecpg/ecpglib/execute.c
src/interfaces/ecpg/ecpglib/prepare.c
src/interfaces/ecpg/include/ecpglib.h
src/interfaces/ecpg/preproc/type.c
src/interfaces/ecpg/preproc/variable.c

index 3c54a07ac5bc73f12d916e3128ec573896e330ff..7dc477847eeb77747c569f43c82dba77d0dd6ff9 100644 (file)
@@ -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;
index 55f497e03ab205f309fa8b5dd7794c8ca473ccd2..923c931a8235cde4fe323479ef9eb1d62f7b5f32 100644 (file)
@@ -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;
 
index 317d35e329485eabb28a0baf6e6b997365a28e56..6f9938aaf0d1d14d1a5d83d8f6c3559570538a5d 100644 (file)
@@ -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);
index e14321d54f93ef6aba3182816060aa85b3ec33a5..cb0eb2756673ebd1cf5ee57e0219c53b8dcc2bf7 100644 (file)
@@ -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);
index be1cb5f0b74e960b75a27ef2d098e6d7ca23c4c3..e12b94349980edbf2fa59069b729197bc5d050d6 100644 (file)
@@ -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);