apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rick Keiner <rick_kei...@yahoo.com>
Subject Re: APR-Util 1.2.1
Date Fri, 19 Aug 2005 02:58:03 GMT
Hi Garret, 

Will this patch get in 1.2.1? If not, the SQLite3
driver will not support Float values.

Rick Keiner



--- Rick Keiner <rick_keiner@yahoo.com> wrote:

> Hi Garrett,
> 
> Sure, no problem.
> 
> 1) relock the mutex after a retry in the
> dbd_sqlite3_select function.
> 
> 2) remove break from the return of a float value
> from
> SQLite and initialize the value to NULL. The value
> was
> never being returned.
> 
> 3) remove unnecessary creation and destruction of
> apr_pool in dbd_sqlite3_query function.
> 
> 4) Remove the res variable in the dbd_sqlite3_query
> function.
> 
> There were some changes after this review and the
> updated patch file is attached.
> 
> Thanks,
> Rick Keiner
> 
> --- Garrett Rooney <rooneg@electricjellyfish.net>
> wrote:
> 
> > Rick Keiner wrote:
> > > Hi Paul,
> > > 
> > > I've attached a patch to the SQLite 3 driver
> that
> > > fixes some initialization issues and returns
> float
> > > data. This has been tested with the
> > jxta-c.jxta.org
> > > project and no major issues. If we could get it
> in
> > the
> > > release that would be great! We are relying on
> > this
> > > patch to be part of the release.
> > 
> > I'd love to commit this patch, but it seems to do
> a
> > number of different 
> > things, and since I don't know all that much about
> > the internals of the 
> > sqlite3 dbd I can't confirm if they're right or
> > wrong.  Could you 
> > perhaps write a log message that explains exactly
> > what problems are 
> > being corrected here (in addition to the addition
> of
> > the new float data 
> > feature).
> > 
> > Thanks,
> > 
> > -garrett
> > > Index: dbd/apr_dbd_sqlite3.c
>
===================================================================
> --- dbd/apr_dbd_sqlite3.c	(revision 232627)
> +++ dbd/apr_dbd_sqlite3.c	(working copy)
> @@ -117,6 +117,7 @@
>                  } else {
>                     
> apr_thread_mutex_unlock(sql->mutex);
>                      apr_sleep(MAX_RETRY_SLEEP);
> +                   
> apr_thread_mutex_lock(sql->mutex);
>                  }
>              } else if (ret == SQLITE_ROW) {
>                  int length;
> @@ -134,23 +135,22 @@
>                      column->name = (char *)
> sqlite3_column_name((*results)->stmt, i);
>                      column->size =
> sqlite3_column_bytes((*results)->stmt, i);
>                      column->type =
> sqlite3_column_type((*results)->stmt, i);
> +                    column->value = NULL;
>                      switch (column->type) {
> -
> -                    case SQLITE_FLOAT:
> -                        break;
> -                    case SQLITE_INTEGER:
> -                    case SQLITE_TEXT:
> -                        hold = NULL;
> -                        hold = (char *)
> sqlite3_column_text((*results)->stmt, i);
> -                        if (hold) {
> -                            column->value =
> apr_palloc(pool, column->size + 1);
> -                            strncpy(column->value,
> hold, column->size + 1);
> -                        }
> -                        break;
> -                    case SQLITE_BLOB:
> -                        break;
> -                    case SQLITE_NULL:
> -                        break;
> +                        case SQLITE_FLOAT:
> +                        case SQLITE_INTEGER:
> +                        case SQLITE_TEXT:
> +                            hold = NULL;
> +                            hold = (char *)
> sqlite3_column_text((*results)->stmt, i);
> +                            if (hold) {
> +                                column->value =
> apr_palloc(pool, column->size + 1);
> +                               
> strncpy(column->value, hold, column->size + 1);
> +                            }
> +                            break;
> +                        case SQLITE_BLOB:
> +                            break;
> +                        case SQLITE_NULL:
> +                            break;
>                      }
>                      col = row->columns[i];
>                  }
> @@ -226,19 +226,12 @@
>  {
>      sqlite3_stmt *stmt = NULL;
>      const char *tail = NULL;
> -    int ret, length = 0;
> -    apr_status_t res;
> -    apr_pool_t *pool;
> +    int ret = -1, length = 0;
>  
>      if (sql->trans && sql->trans->errnum) {
>          return sql->trans->errnum;
>      }
>  
> -    res = apr_pool_create(&pool, sql->pool);
> -    if (res != APR_SUCCESS) {
> -        sql->trans->errnum = res;
> -        return SQLITE_ERROR;
> -    }
>      length = strlen(query);
>      apr_thread_mutex_lock(sql->mutex);
>  
> @@ -248,7 +241,6 @@
>              sqlite3_finalize(stmt);
>              break;
>          }
> -
>          ret = sqlite3_step(stmt);
>          *nrows = sqlite3_changes(sql->conn);
>          sqlite3_finalize(stmt);
> @@ -257,14 +249,13 @@
>      } while (length > 0);
>  
>      if (dbd_sqlite3_is_success(ret)) {
> -        res = 0;
> +        ret =  0;
>      }
>      apr_thread_mutex_unlock(sql->mutex);
> -    apr_pool_destroy(pool);
>      if (sql->trans) {
> -        sql->trans->errnum = res;
> +        sql->trans->errnum = ret;
>      }
> -    return res;
> +    return ret;
>  }
>  
>  static const char *dbd_sqlite3_escape(apr_pool_t
> *pool, const char *arg,
> 
> 


Mime
View raw message