'\" '\" tdbc_resultset.n -- '\" '\" Copyright (c) 2008 by Kevin B. Kenny. '\" '\" See the file "license.terms" for information on usage and redistribution of '\" this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH "tdbc::resultset" n 8.6 Tcl "Tcl Database Connectivity" '\" .so man.macros '\" IGNORE .if t .wh -1.3i ^B .nr ^l \n(.l .ad b '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ '\" Draw four-sided box normally, but don't draw top of '\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # CS - begin code excerpt .de CS .RS .nf .ta .25i .5i .75i 1i .. '\" # CE - end code excerpt .de CE .fi .RE .. '\" END IGNORE .BS .SH "NAME" tdbc::resultset \- TDBC result set object .SH "SYNOPSIS" .nf package require \fBtdbc 1.0\fR package require \fBtdbc::\fR\fIdriver version\fR \fBtdbc::\fR\fIdriver\fR\fB::connection create \fR\fIdb\fR \fI?\-option value\fR...? \fBset\fR \fIstmt\fR \fB[\fR\fIdb\fR \fBprepare\fR \fIsql-code\fR\fB]\fR \fBset\fR \fIresultset\fR \fB[\fR\fI$stmt\fR \fBexecute\fR ?\fIargs...\fR?\fB]\fR \fI$resultset\fR \fBcolumns\fR \fI$resultset\fR \fBrowcount\fR \fI$resultset\fR \fBnextrow\fR ?\fB-as\fR \fBlists\fR|\fBdicts\fR? ?\fB--\fR? \fIvarname\fR \fI$resultset\fR \fBnextlist\fR \fIvarname\fR \fI$resultset\fR \fBnextdict\fR \fIvarname\fR \fI$resultset\fR \fBnextresults\fR .fi .ad l .in 14 .ti 7 \fI$resultset\fR \fBallrows\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? .br .ti 7 \fI$resultset\fR \fBforeach\fR ?\fB-as lists|dicts\fR? ?\fB-columnsvariable\fR \fIname\fR? ?\fB--\fR? \fIvarname\fR \fIscript\fR .br .ti 7 \fI$resultset\fR \fBclose\fR .ad b .BE .SH "DESCRIPTION" .PP Every database driver for TDBC (Tcl DataBase Connectivity) implements a \fIresult set\fR object that represents a the results returned from executing SQL statement in a database. Instances of this object are created by executing the \fBexecute\fR object command on a statement object. .PP The \fBcolumns\fR object command returns a list of the names of the columns in the result set. The columns will appear in the same order as they appeared in the SQL statement that performed the database query. If the SQL statement does not return a set of columns (for instance, if it is an INSERT, UPDATE, or DELETE statement), the \fBcolumns\fR command will return an empty list. .PP The \fBrowcount\fR object command returns the number of rows in the database that were affected by the execution of an INSERT, UPDATE or DELETE statement. For a SELECT statement, the row count is unspecified. .PP The \fBnextlist\fR object command sets the variable given by \fIvarname\fR in the caller's scope to the next row of the results, expressed as a list of column values. NULL values are replaced by empty strings. The columns of the result row appear in the same order in which they appeared on the SELECT statement. The return of \fBnextlist\fR is \fB1\fR if the operation succeeded, and \fB0\fR if the end of the result set was reached. .PP The \fBnextdict\fR object command sets the variable given by \fIvarname\fR in the caller's scope to the next row of the results, expressed as a dictionary. The dictionary's keys are column names, and the values are the values of those columns in the row. If a column's value in the row is NULL, its key is omitted from the dictionary. The keys appear in the dictionary in the same order in which the columns appeared on the SELECT statement. The return of \fBnextdict\fR is \fB1\fR if the operation succeeded, and \fB0\fR if the end of the result set was reached. .PP The \fBnextrow\fR object command is precisely equivalent to the \fBnextdict\fR or \fBnextlist\fR object command, depending on whether \fB-as dicts\fR (the default) or \fB-as lists\fR is specified. .PP Some databases support the idea of a single statement that returns multiple sets of results. The \fBnextresults\fR object command is executed, typically after the \fBnextlist\fR of \fBnextdict\fR object command has returned \fB0\fR, to advance to the next result set. It returns \fB1\fR if there is another result set to process, and \fB0\fR if the result set just processed was the last. After calling \fBnextresults\fR and getting the return value of \fB1\fR, the caller may once again call \fBcolumns\fR to get the column descriptions of the next result set, and then return to calling \fBnextdict\fR or \fBnextlist\fR to process the rows of the next result set. It is an error to call \fBcolumns\fR, \fBnextdict\fR, \fBnextlist\fR or \fBnextrow\fR after \fBnextresults\fR has returned \fB0\fR. .PP The \fBallrows\fR object command sets the variable designated by the \fB-columnsvariable\fR option (if present) to the result of the \fBcolumns\fR object command. It then executes the \fBnextrow\fR object command repeatedly until the end of the result set is reached. If \fBnextresults\fR returns a nonzero value, it executes the above two steps (\fBcolumns\fR followed by iterated \fBnextrow\fR calls) as long as further results are available. The rows returned by \fBnextrow\fR are assembled into a Tcl list and become the return value of the \fBallrows\fR command; the last value returned from \fBcolumns\fR is what the application will see in \fB-columnsvariable\fR. .PP The \fBforeach\fR object command sets the variable designated by the \fB-columnsvariable\fR option (if present) to the result of the \fBcolumns\fR object command. It then executes the \fBnextrow\fR object command repeatedly until the end of the result set is reached, storing the successive rows in the variable designated by \fIvarName\fR. For each row, it executes the given \fIscript\fR. If the script terminates with an error, the error is reported by the \fBforeach\fR command, and iteration stops. If the script performs a \fBbreak\fR operation, the iteration terminates prematurely. If the script performs a \fBcontinue\fR operation, the iteration recommences with the next row. If the script performs a \fBreturn\fR, results are the same as if a script outside the control of \fBforeach\fR had returned. Any other unusual return code terminates the iteration and is reported from the \fBforeach\fR. .PP Once \fBnextrow\fR returns \fB0\fR, the \fBforeach\fR object command tries to advance to the next result set using \fBnextresults\fR. If \fBnextresults\fR returns \fB1\fR, the above steps (\fBcolumns\fR and \fBnextrow\fR, with script invocation) are repeated as long as more result sets remain. The \fIscript\fR will always see the correct description of the columns of the current result set in the variable designated byt \fB-columnsvariable\fR. At the end of the call, the variable designated by \fB-columnsvariable\fR will have the description of the columns of the last result set. .PP The \fBclose\fR object command deletes the result set and frees any associated system resources. .SH "SEE ALSO" encoding(n), tdbc(n), tdbc::connection(n), tdbc::statement(n), tdbc::tokenize(n) .SH "KEYWORDS" TDBC, SQL, database, connectivity, connection, resultset, statement, bound variable, stored procedure, call .SH "COPYRIGHT" Copyright (c) 2008 by Kevin B. Kenny. '\" Local Variables: '\" mode: nroff '\" End: '\"