Commit 5d2cf6af authored by Tom Lane's avatar Tom Lane

TCL_ARRAYS option patches from Massimo Dal Zotto

parent f134a1a9
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -699,8 +699,10 @@ array_out(ArrayType *v, Oid element_type)
for (tmp = values[i]; *tmp; tmp++) for (tmp = values[i]; *tmp; tmp++)
{ {
overall_length += 1; overall_length += 1;
#ifndef TCL_ARRAYS
if (*tmp == '"') if (*tmp == '"')
overall_length += 1; overall_length += 1;
#endif
} }
overall_length += 1; overall_length += 1;
} }
...@@ -729,6 +731,7 @@ array_out(ArrayType *v, Oid element_type) ...@@ -729,6 +731,7 @@ array_out(ArrayType *v, Oid element_type)
if (!typbyval) if (!typbyval)
{ {
strcat(p, "\""); strcat(p, "\"");
#ifndef TCL_ARRAYS
l = strlen(p); l = strlen(p);
for (tmp = values[k]; *tmp; tmp++) for (tmp = values[k]; *tmp; tmp++)
{ {
...@@ -737,6 +740,9 @@ array_out(ArrayType *v, Oid element_type) ...@@ -737,6 +740,9 @@ array_out(ArrayType *v, Oid element_type)
p[l++] = *tmp; p[l++] = *tmp;
} }
p[l] = '\0'; p[l] = '\0';
#else
strcat(p, values[k]);
#endif
strcat(p, "\""); strcat(p, "\"");
} }
else else
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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[]) ...@@ -472,39 +472,50 @@ Pg_exec(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
get information about the results of a query get information about the results of a query
syntax: syntax:
pg_result result ?option? pg_result result ?option?
the options are: the options are:
-status
the status of the result -status the status of the result
-error
the error message, if the status indicates error; otherwise an empty string -error the error message, if the status indicates error; otherwise
-conn an empty string
the connection that produced the result
-oid -conn the connection that produced the result
if command was an INSERT, the OID of the inserted tuple
-numTuples -oid if command was an INSERT, the OID of the inserted tuple
the number of tuples in the query
-numAttrs -numTuples the number of tuples in the query
returns the number of attributes returned by the query
-numAttrs returns the number of attributes returned by the query
-assign arrayName -assign arrayName
assign the results to an array, using subscripts of the form assign the results to an array, using subscripts of the form
(tupno,attributeName) (tupno,attributeName)
-assignbyidx arrayName ?appendstr? -assignbyidx arrayName ?appendstr?
assign the results to an array using the first field's value as a key. assign the results to an array using the first field's value
All but the first field of each tuple are stored, using subscripts of the form as a key.
(field0value,attributeNameappendstr) All but the first field of each tuple are stored, using
subscripts of the form (field0value,attributeNameappendstr)
-getTuple tupleNumber -getTuple tupleNumber
returns the values of the tuple in a list returns the values of the tuple in a list
-tupleArray tupleNumber arrayName -tupleArray tupleNumber arrayName
stores the values of the tuple in array arrayName, indexed stores the values of the tuple in array arrayName, indexed
by the attributes returned by the attributes returned
-attributes -attributes
returns a list of the name/type pairs of the tuple attributes returns a list of the name/type pairs of the tuple attributes
-lAttributes -lAttributes
returns a list of the {name type len} entries of the tuple attributes returns a list of the {name type len} entries of the tuple
-clear attributes
clear the result buffer. Do not reuse after this
-clear clear the result buffer. Do not reuse after this
**********************************/ **********************************/
int int
Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[]) 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[]) ...@@ -621,15 +632,24 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
*/ */
for (tupno = 0; tupno < PQntuples(result); tupno++) for (tupno = 0; tupno < PQntuples(result); tupno++)
{ {
const char *field0 = PQgetvalue(result, tupno, 0); const char *field0 =
char * workspace = malloc(strlen(field0) + strlen(appendstr) + 210); #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++) for (i = 1; i < PQnfields(result); i++)
{ {
sprintf(workspace, "%s,%.200s%s", field0, PQfname(result,i), sprintf(workspace, "%s,%.200s%s", field0, PQfname(result,i),
appendstr); appendstr);
if (Tcl_SetVar2(interp, arrVar, workspace, if (Tcl_SetVar2(interp, arrVar, workspace,
#ifdef TCL_ARRAYS
tcl_value(PQgetvalue(result, tupno, i)),
#else
PQgetvalue(result, tupno, i), PQgetvalue(result, tupno, i),
#endif
TCL_LEAVE_ERR_MSG) == NULL) TCL_LEAVE_ERR_MSG) == NULL)
{ {
free(workspace); free(workspace);
...@@ -654,8 +674,15 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[]) ...@@ -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); Tcl_AppendResult(interp, "argument to getTuple cannot exceed number of tuples - 1", 0);
return TCL_ERROR; 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++) for (i = 0; i < PQnfields(result); i++)
Tcl_AppendElement(interp, PQgetvalue(result, tupno, i)); Tcl_AppendElement(interp, PQgetvalue(result, tupno, i));
#endif
return TCL_OK; return TCL_OK;
} }
else if (strcmp(opt, "-tupleArray") == 0) else if (strcmp(opt, "-tupleArray") == 0)
...@@ -674,7 +701,11 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[]) ...@@ -674,7 +701,11 @@ Pg_result(ClientData cData, Tcl_Interp * interp, int argc, char *argv[])
for (i = 0; i < PQnfields(result); i++) for (i = 0; i < PQnfields(result); i++)
{ {
if (Tcl_SetVar2(interp, argv[4], PQfname(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), PQgetvalue(result, tupno, i),
#endif
TCL_LEAVE_ERR_MSG) == NULL) TCL_LEAVE_ERR_MSG) == NULL)
return TCL_ERROR; return TCL_ERROR;
} }
...@@ -1302,7 +1333,13 @@ Pg_select(ClientData cData, Tcl_Interp * interp, int argc, char **argv) ...@@ -1302,7 +1333,13 @@ Pg_select(ClientData cData, Tcl_Interp * interp, int argc, char **argv)
Tcl_SetVar2(interp, argv[3], ".tupno", buffer, 0); Tcl_SetVar2(interp, argv[3], ".tupno", buffer, 0);
for (column = 0; column < ncols; column++) 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); Tcl_SetVar2(interp, argv[3], ".command", "update", 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment