Added patch by Dave Cramer for array handling in ecpglib.
authorMichael Meskes
Wed, 3 Dec 2003 08:49:17 +0000 (08:49 +0000)
committerMichael Meskes
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;
        }
    }