]> granicus.if.org Git - postgresql/commitdiff
Added patch by Dave Cramer for array handling in ecpglib.
authorMichael Meskes <meskes@postgresql.org>
Wed, 3 Dec 2003 08:49:17 +0000 (08:49 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 3 Dec 2003 08:49:17 +0000 (08:49 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ecpglib/execute.c

index 632c4c9565353f7fff6248ad8a8b9abf64ea8ca4..f8c0162a93097bc59be088fe2c4992191b034898 100644 (file)
@@ -1714,3 +1714,11 @@ Mon Nov  3 15:43:19 CET 2003
        - Set pgtypes library to 1.0.0
        - Set compat library to 1.0.0
 
+Wed Dec  3 09:45:21 CET 2003
+
+       - Added patch for array handling by Dave Cramer
+       - Set ecpg version to 3.1.0
+       - Set ecpg library to 4.1.0
+       - Set pgtypes library to 1.1.0
+       - Set compat library to 1.1.0
+
index 8a9e94da9bbf56ddc80e812a80c86ad0342a43cc..0953ebb6e4ca2fbfe400af81860502e0c40427ec 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.29 2003/11/29 19:52:08 pgsql Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.30 2003/12/03 08:49:17 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -314,16 +314,21 @@ ECPGis_type_an_array(int type, const struct statement * stmt, const struct varia
        sprintf(array_query, "select typlen from pg_type where oid=%d and typelem<>0", type);
        query = PQexec(stmt->connection->connection, array_query);
        ECPGfree(array_query);
-       if (PQresultStatus(query) == PGRES_TUPLES_OK)
+       if (PQresultStatus(query) == PGRES_TUPLES_OK )
        {
-               isarray = (atol((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
-               if (ECPGDynamicType(type) == SQL3_CHARACTER ||
-                       ECPGDynamicType(type) == SQL3_CHARACTER_VARYING)
-               {
-                       /*
-                        * arrays of character strings are not yet implemented
-                        */
+               if ( PQntuples(query) == 0 )
                        isarray = ECPG_ARRAY_NONE;
+               else
+               {
+                       isarray = (atol((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
+                       if (ECPGDynamicType(type) == SQL3_CHARACTER ||
+                               ECPGDynamicType(type) == SQL3_CHARACTER_VARYING)
+                       {
+                               /*
+                                * arrays of character strings are not yet implemented
+                                */
+                               isarray = ECPG_ARRAY_NONE;
+                       }
                }
        }
        PQclear(query);
@@ -353,7 +358,7 @@ ECPGstore_result(const PGresult *results, int act_field,
                {
                        ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d don't fit into array of %d\n",
                                        stmt->lineno, ntuples, var->arrsize);
-                       ECPGraise(stmt->lineno, ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL);
+                       ECPGraise(stmt->lineno, INFORMIX_MODE(stmt->compat)?ECPG_INFORMIX_SUBSELECT_NOT_ONE:ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL);
                        return false;
                }
        }