Re: svn commit: r33520 - requiring SQLite
From: Justin Erenkrantz <justin_at_erenkrantz.com>
Date: Tue, 7 Oct 2008 14:09:53 -0700
On Tue, Oct 7, 2008 at 1:19 PM, Greg Stein <gstein_at_gmail.com> wrote:
Patch below compiles against SQLite 3.4.0 as shipped with Mac OS X
This should institute the checking when we do read-only/read-write
I haven't checked to see whether 3.3 or 3.2 would be coming along for
--- SQLite: compile against version 3.4.x (aka what Mac OS X 10.5 includes). * subversion/libsvn_subr/sqlite.c (private/svn_dep_compat.h): Include. (svn_sqlite__open): Use sqlite3_open on older sqlite instances. * subversion/include/private/svn_dep_compat.h (SQLITE_VERSION_AT_LEAST): Implement helper macro. * configure.ac (SQLITE_ALLOWED_PATTERN): Add 3.4.x to mix. Index: subversion/libsvn_subr/sqlite.c =================================================================== --- subversion/libsvn_subr/sqlite.c (revision 33523) +++ subversion/libsvn_subr/sqlite.c (working copy) @@ -25,6 +25,7 @@ #include "private/svn_sqlite.h" #include "svn_private_config.h" +#include "private/svn_dep_compat.h" #ifdef SQLITE3_DEBUG @@ -364,6 +365,7 @@ /* ### use a pool cleanup to close this? (instead of __close()) */ *db = apr_palloc(result_pool, sizeof(**db)); +#if SQLITE_VERSION_AT_LEAST(3,5,0) if (mode == svn_sqlite__mode_readonly) flags = SQLITE_OPEN_READONLY; else if (mode == svn_sqlite__mode_readwrite) @@ -387,7 +389,34 @@ occurs (except for out-of-memory); thus, we can safely use it to extract an error message and construct an svn_error_t. */ SQLITE_ERR(sqlite3_open_v2(path, &(*db)->db3, flags, NULL), *db); +#else + /* Older versions of SQLite (pre-3.5.x) will always create the database + if it doesn't exist. So, if we are asked to be read-only or read-write, + we ensure the database already exists - if it doesn't, then we will + explicitly error out before asking SQLite to do anything. + Pre-3.5.x SQLite versions also don't support read-only ops either. + */ + if (mode == svn_sqlite__mode_readonly || mode == svn_sqlite__mode_readwrite) + { + svn_node_kind_t *kind; + SVN_ERR(svn_io_check_path(path, &kind, scratch_pool)); + if (kind != svn_node_file) { + return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL, + _("Expected SQLite database not found: %s"), + svn_path_local_style(path, scratch_pool)); + } + } + else if (mode == svn_sqlite__mode_rwcreate) + { + /* do nothing - older SQLite's will create automatically. */ + } + else + SVN_ERR_MALFUNCTION(); + + SQLITE_ERR(sqlite3_open(path, &(*db)->db3), *db); +#endif + /* Retry until timeout when database is busy. */ SQLITE_ERR(sqlite3_busy_timeout((*db)->db3, BUSY_TIMEOUT), *db); #ifdef SQLITE3_DEBUG Index: subversion/include/private/svn_dep_compat.h =================================================================== --- subversion/include/private/svn_dep_compat.h (revision 33523) +++ subversion/include/private/svn_dep_compat.h (working copy) @@ -69,6 +69,23 @@ extern "C" { (patch) <= SERF_PATCH_VERSION)) #endif /* SERF_VERSION_AT_LEAST */ +/** + * Check at compile time if the SQLite version is at least a certain + * level. + * @param major The major version component of the version checked + * for (e.g., the "1" of "1.3.0"). + * @param minor The minor version component of the version checked + * for (e.g., the "3" of "1.3.0"). + * @param patch The patch level component of the version checked + * for (e.g., the "0" of "1.3.0"). + * + * @since New in 1.6. + */ +#ifndef SQLITE_VERSION_AT_LEAST +#define SQLITE_VERSION_AT_LEAST(major,minor,patch) \ +((major*1000000 + minor*1000 + patch) <= SQLITE_VERSION_NUMBER) +#endif /* SQLITE_VERSION_AT_LEAST */ + #ifdef __cplusplus } #endif /* __cplusplus */ Index: configure.ac =================================================================== --- configure.ac (revision 33523) +++ configure.ac (working copy) @@ -111,7 +111,7 @@ dnl Find Apache with a recent-enough magic module SVN_FIND_APACHE(20020903) dnl Search for SQLite -SQLITE_ALLOWED_PATTERN="(3\.5|3\.6)($|\..*)" +SQLITE_ALLOWED_PATTERN="(3\.4|3\.5|3\.6)($|\..*)" SQLITE_RECOMMENDED_VER="3.5.9" SQLITE_URL="http://www.sqlite.org/sqlite-${SQLITE_RECOMMENDED_VER}.tar.gz" SVN_LIB_SQLITE(${SQLITE_ALLOWED_PATTERN}, ${SQLITE_RECOMMENDED_VER}, --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org For additional commands, e-mail: dev-help_at_subversion.tigris.orgReceived on 2008-10-07 23:10:06 CEST |
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.