Return-Path: Delivered-To: apmail-apr-commits-archive@www.apache.org Received: (qmail 56989 invoked from network); 14 Jun 2006 06:55:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 14 Jun 2006 06:55:29 -0000 Received: (qmail 74100 invoked by uid 500); 14 Jun 2006 06:55:28 -0000 Delivered-To: apmail-apr-commits-archive@apr.apache.org Received: (qmail 74067 invoked by uid 500); 14 Jun 2006 06:55:28 -0000 Mailing-List: contact commits-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: Reply-To: dev@apr.apache.org List-Id: Delivered-To: mailing list commits@apr.apache.org Received: (qmail 74056 invoked by uid 99); 14 Jun 2006 06:55:28 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 13 Jun 2006 23:55:28 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 13 Jun 2006 23:55:27 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id CDAB41A983E; Tue, 13 Jun 2006 23:55:07 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r414126 - in /apr/apr-util/branches/1.2.x/dbd: apr_dbd_pgsql.c apr_dbd_sqlite3.c Date: Wed, 14 Jun 2006 06:55:07 -0000 To: commits@apr.apache.org From: bojan@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060614065507.CDAB41A983E@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: bojan Date: Tue Jun 13 23:55:06 2006 New Revision: 414126 URL: http://svn.apache.org/viewvc?rev=414126&view=rev Log: Merge r413798 and r414125 from trunk to 1.2.x branch. Original message: Don't expect variable argument list to end with NULL for PostgreSQL and SQLite3 DBD drivers. Count instead. Modified: apr/apr-util/branches/1.2.x/dbd/apr_dbd_pgsql.c apr/apr-util/branches/1.2.x/dbd/apr_dbd_sqlite3.c Modified: apr/apr-util/branches/1.2.x/dbd/apr_dbd_pgsql.c URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/dbd/apr_dbd_pgsql.c?rev=414126&r1=414125&r2=414126&view=diff ============================================================================== --- apr/apr-util/branches/1.2.x/dbd/apr_dbd_pgsql.c (original) +++ apr/apr-util/branches/1.2.x/dbd/apr_dbd_pgsql.c Tue Jun 13 23:55:06 2006 @@ -63,6 +63,7 @@ struct apr_dbd_prepared_t { const char *name; int prepared; + int nargs; }; #define dbd_pgsql_is_success(x) (((x) == PGRES_EMPTY_QUERY) \ @@ -247,7 +248,6 @@ size_t i = 0; const char *args[QUERY_MAX_ARGS]; size_t alen; - int nargs = 0; int ret; PGresult *res; char *pgquery; @@ -256,11 +256,12 @@ if (!*statement) { *statement = apr_palloc(pool, sizeof(apr_dbd_prepared_t)); } + (*statement)->nargs = 0; /* Translate from apr_dbd to native query format */ for (sqlptr = (char*)query; *sqlptr; ++sqlptr) { if (sqlptr[0] == '%') { if (isalpha(sqlptr[1])) { - ++nargs; + ++(*statement)->nargs; } else if (sqlptr[1] == '%') { ++sqlptr; @@ -268,8 +269,8 @@ } } length = strlen(query) + 1; - if (nargs > 8) { - length += nargs - 8; + if ((*statement)->nargs > 8) { + length += (*statement)->nargs - 8; } pgptr = pgquery = apr_palloc(pool, length) ; @@ -324,10 +325,10 @@ length = strlen(label); memcpy(sqlptr, label, length); sqlptr += length; - if (nargs > 0) { + if ((*statement)->nargs > 0) { memcpy(sqlptr, " (",2); sqlptr += 2; - for (i=0; inargs; ++i) { alen = strlen(args[i]); memcpy(sqlptr, args[i], alen); sqlptr += alen; @@ -399,22 +400,21 @@ int *nrows, apr_dbd_prepared_t *statement, va_list args) { - const char *arg; - int nargs = 0; - const char *values[QUERY_MAX_ARGS]; + const char **values; + int i; if (sql->trans && sql->trans->errnum) { return sql->trans->errnum; } - while ( arg = va_arg(args, const char*), arg ) { - if ( nargs >= QUERY_MAX_ARGS) { - va_end(args); - return -1; - } - values[nargs++] = apr_pstrdup(pool, arg); + + values = apr_palloc(pool, sizeof(*values) * statement->nargs); + + for (i = 0; i < statement->nargs; i++) { + values[i] = apr_pstrdup(pool, va_arg(args, const char*)); } - values[nargs] = NULL; - return dbd_pgsql_pquery(pool, sql, nrows, statement, nargs, values); + + return dbd_pgsql_pquery(pool, sql, nrows, statement, + statement->nargs, values); } static int dbd_pgsql_pselect(apr_pool_t *pool, apr_dbd_t *sql, @@ -500,23 +500,21 @@ apr_dbd_prepared_t *statement, int seek, va_list args) { - const char *arg; - int nargs = 0; - const char *values[QUERY_MAX_ARGS]; + const char **values; + int i; if (sql->trans && sql->trans->errnum) { return sql->trans->errnum; } - while (arg = va_arg(args, const char*), arg) { - if ( nargs >= QUERY_MAX_ARGS) { - va_end(args); - return -1; - } - values[nargs++] = apr_pstrdup(pool, arg); + values = apr_palloc(pool, sizeof(*values) * statement->nargs); + + for (i = 0; i < statement->nargs; i++) { + values[i] = apr_pstrdup(pool, va_arg(args, const char*)); } + return dbd_pgsql_pselect(pool, sql, results, statement, - seek, nargs, values) ; + seek, statement->nargs, values) ; } static int dbd_pgsql_start_transaction(apr_pool_t *pool, apr_dbd_t *handle, Modified: apr/apr-util/branches/1.2.x/dbd/apr_dbd_sqlite3.c URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/dbd/apr_dbd_sqlite3.c?rev=414126&r1=414125&r2=414126&view=diff ============================================================================== --- apr/apr-util/branches/1.2.x/dbd/apr_dbd_sqlite3.c (original) +++ apr/apr-util/branches/1.2.x/dbd/apr_dbd_sqlite3.c Tue Jun 13 23:55:06 2006 @@ -31,8 +31,6 @@ #define MAX_RETRY_COUNT 15 #define MAX_RETRY_SLEEP 100000 -#define QUERY_MAX_ARGS 40 - struct apr_dbd_transaction_t { int errnum; apr_dbd_t *handle; @@ -427,21 +425,19 @@ static int dbd_sqlite3_pvquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, apr_dbd_prepared_t *statement, va_list args) { - const char *arg, *values[QUERY_MAX_ARGS]; - int nargs = 0; + const char **values; + int i, nargs; if (sql->trans && sql->trans->errnum) { return sql->trans->errnum; } - while (arg = va_arg(args, const char*), arg) { - if (nargs >= QUERY_MAX_ARGS) { - va_end(args); - return -1; - } - values[nargs++] = apr_pstrdup(pool, arg); + nargs = sqlite3_bind_parameter_count(statement->stmt); + values = apr_palloc(pool, sizeof(*values) * nargs); + + for (i = 0; i < nargs; i++) { + values[i] = apr_pstrdup(pool, va_arg(args, const char*)); } - values[nargs] = NULL; return dbd_sqlite3_pquery(pool, sql, nrows, statement, nargs, values); } @@ -573,21 +569,19 @@ apr_dbd_prepared_t *statement, int seek, va_list args) { - const char *arg, *values[QUERY_MAX_ARGS]; - int nargs = 0; + const char **values; + int i, nargs; if (sql->trans && sql->trans->errnum) { return sql->trans->errnum; } - while (arg = va_arg(args, const char*), arg) { - if (nargs >= QUERY_MAX_ARGS) { - va_end(args); - return -1; - } - values[nargs++] = apr_pstrdup(pool, arg); + nargs = sqlite3_bind_parameter_count(statement->stmt); + values = apr_palloc(pool, sizeof(*values) * nargs); + + for (i = 0; i < nargs; i++) { + values[i] = apr_pstrdup(pool, va_arg(args, const char*)); } - values[nargs] = NULL; return dbd_sqlite3_pselect(pool, sql, results, statement, seek, nargs, values);