aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-01-17 21:12:55 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-01-17 21:12:55 +0000
commit5d2cf6af9ea7312b75defb254dfcdf206ca6cd34 (patch)
tree9b9b1ffdc45473de47eb7d7cda82793ff216a232
parentf134a1a90a6a63a5a8e9b7a580d7c4523e593abe (diff)
downloadpostgresql-5d2cf6af9ea7312b75defb254dfcdf206ca6cd34.tar.gz
postgresql-5d2cf6af9ea7312b75defb254dfcdf206ca6cd34.zip
TCL_ARRAYS option patches from Massimo Dal Zotto
-rw-r--r--src/backend/utils/adt/arrayfuncs.c8
-rw-r--r--src/interfaces/libpgtcl/pgtclCmds.c107
2 files changed, 79 insertions, 36 deletions
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 7a4a14583b9..b718ce01367 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.35 1999/01/17 06:18:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.36 1999/01/17 21:12:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -699,8 +699,10 @@ array_out(ArrayType *v, Oid element_type)
for (tmp = values[i]; *tmp; tmp++)
{
overall_length += 1;
+#ifndef TCL_ARRAYS
if (*tmp == '"')
overall_length += 1;
+#endif
}
overall_length += 1;
}
@@ -729,6 +731,7 @@ array_out(ArrayType *v, Oid element_type)
if (!typbyval)
{
strcat(p, "\"");
+#ifndef TCL_ARRAYS
l = strlen(p);
for (tmp = values[k]; *tmp; tmp++)
{
@@ -737,6 +740,9 @@ array_out(ArrayType *v, Oid element_type)
p[l++] = *tmp;
}
p[l] = '\0';
+#else
+ strcat(p, values[k]);
+#endif
strcat(p, "\"");
}
else
diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c
index 258c780e590..57f0ab0dd07 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.c
+++ b/src/interfaces/libpgtcl/pgtclCmds.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.38 1998/10/14 15:17:51 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.39 1999/01/17 21:12:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -472,39 +472,50 @@ Pg_exec(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
get information about the results of a query
syntax:
- pg_result result ?option?
+
+ pg_result result ?option?
the options are:
- -status
- the status of the result
- -error
- the error message, if the status indicates error; otherwise an empty string
- -conn
- the connection that produced the result
- -oid
- if command was an INSERT, the OID of the inserted tuple
- -numTuples
- the number of tuples in the query
- -numAttrs
- returns the number of attributes returned by the query
- -assign arrayName
- assign the results to an array, using subscripts of the form
- (tupno,attributeName)
- -assignbyidx arrayName ?appendstr?
- assign the results to an array using the first field's value as a key.
- All but the first field of each tuple are stored, using subscripts of the form
- (field0value,attributeNameappendstr)
- -getTuple tupleNumber
- returns the values of the tuple in a list
- -tupleArray tupleNumber arrayName
- stores the values of the tuple in array arrayName, indexed
- by the attributes returned
- -attributes
- returns a list of the name/type pairs of the tuple attributes
- -lAttributes
- returns a list of the {name type len} entries of the tuple attributes
- -clear
- clear the result buffer. Do not reuse after this
+
+ -status the status of the result
+
+ -error the error message, if the status indicates error; otherwise
+ an empty string
+
+ -conn the connection that produced the result
+
+ -oid if command was an INSERT, the OID of the inserted tuple
+
+ -numTuples the number of tuples in the query
+
+ -numAttrs returns the number of attributes returned by the query
+
+ -assign arrayName
+ assign the results to an array, using subscripts of the form
+ (tupno,attributeName)
+
+ -assignbyidx arrayName ?appendstr?
+ assign the results to an array using the first field's value
+ as a key.
+ All but the first field of each tuple are stored, using
+ subscripts of the form (field0value,attributeNameappendstr)
+
+ -getTuple tupleNumber
+ returns the values of the tuple in a list
+
+ -tupleArray tupleNumber arrayName
+ stores the values of the tuple in array arrayName, indexed
+ by the attributes returned
+
+ -attributes
+ returns a list of the name/type pairs of the tuple attributes
+
+ -lAttributes
+ returns a list of the {name type len} entries of the tuple
+ attributes
+
+ -clear clear the result buffer. Do not reuse after this
+
**********************************/
int
Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
@@ -621,15 +632,24 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
*/
for (tupno = 0; tupno < PQntuples(result); tupno++)
{
- const char *field0 = PQgetvalue(result, tupno, 0);
- char * workspace = malloc(strlen(field0) + strlen(appendstr) + 210);
+ const char *field0 =
+#ifdef TCL_ARRAYS
+ tcl_value(PQgetvalue(result, tupno, 0));
+#else
+ PQgetvalue(result, tupno, 0);
+#endif
+ char *workspace = malloc(strlen(field0) + strlen(appendstr) + 210);
for (i = 1; i < PQnfields(result); i++)
{
sprintf(workspace, "%s,%.200s%s", field0, PQfname(result,i),
appendstr);
if (Tcl_SetVar2(interp, arrVar, workspace,
+#ifdef TCL_ARRAYS
+ tcl_value(PQgetvalue(result, tupno, i)),
+#else
PQgetvalue(result, tupno, i),
+#endif
TCL_LEAVE_ERR_MSG) == NULL)
{
free(workspace);
@@ -654,8 +674,15 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
Tcl_AppendResult(interp, "argument to getTuple cannot exceed number of tuples - 1", 0);
return TCL_ERROR;
}
+#ifdef TCL_ARRAYS
+ for (i = 0; i < PQnfields(result); i++)
+ {
+ Tcl_AppendElement(interp, tcl_value(PQgetvalue(result, tupno, i)));
+ }
+#else
for (i = 0; i < PQnfields(result); i++)
Tcl_AppendElement(interp, PQgetvalue(result, tupno, i));
+#endif
return TCL_OK;
}
else if (strcmp(opt, "-tupleArray") == 0)
@@ -674,7 +701,11 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
for (i = 0; i < PQnfields(result); i++)
{
if (Tcl_SetVar2(interp, argv[4], PQfname(result, i),
+#ifdef TCL_ARRAYS
+ tcl_value(PQgetvalue(result, tupno, i)),
+#else
PQgetvalue(result, tupno, i),
+#endif
TCL_LEAVE_ERR_MSG) == NULL)
return TCL_ERROR;
}
@@ -1302,7 +1333,13 @@ Pg_select(ClientData cData, Tcl_Interp * interp, int argc, char **argv)
Tcl_SetVar2(interp, argv[3], ".tupno", buffer, 0);
for (column = 0; column < ncols; column++)
- Tcl_SetVar2(interp, argv[3], info[column].cname, PQgetvalue(result, tupno, column), 0);
+ Tcl_SetVar2(interp, argv[3], info[column].cname,
+#ifdef TCL_ARRAYS
+ tcl_value(PQgetvalue(result, tupno, column)),
+#else
+ PQgetvalue(result, tupno, column),
+#endif
+ 0);
Tcl_SetVar2(interp, argv[3], ".command", "update", 0);