You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by bo...@apache.org on 2006/06/14 08:55:07 UTC
svn commit: r414126 - in /apr/apr-util/branches/1.2.x/dbd: apr_dbd_pgsql.c
apr_dbd_sqlite3.c
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; i<nargs; ++i) {
+ for (i=0; i < (*statement)->nargs; ++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);