On Wed, Apr 14, 2010 at 12:35, <philip_at_apache.org> wrote:
>...
> +++ subversion/trunk/subversion/libsvn_subr/sqlite.c Wed Apr 14 16:35:11 2010
> @@ -975,23 +975,55 @@ svn_sqlite__hotcopy(const char *src_path
> const char *dst_path,
> apr_pool_t *scratch_pool)
> {
> - svn_sqlite__db_t *db;
> - svn_sqlite__stmt_t *stmt;
> + svn_sqlite__db_t *src_db;
>
> - /* The SELECT takes a shared lock in the source database which
> - blocks writers and so ensures that the database won't change
> - during the copy.
> -
> - We could use the SQLite backup interface (from 3.6.11 and still
> - experimental) and the copy would be done in chunks with the lock
> - released between chunks. */
> - SVN_ERR(svn_sqlite__open(&db, src_path, svn_sqlite__mode_readonly,
> + SVN_ERR(svn_sqlite__open(&src_db, src_path, svn_sqlite__mode_readonly,
> internal_statements, 0, NULL,
> scratch_pool, scratch_pool));
> - SVN_ERR(svn_sqlite__get_statement(&stmt, db, STMT_DUMMY_SELECT_FOR_BACKUP));
> - SVN_ERR(svn_sqlite__step_row(stmt));
> - SVN_ERR(svn_io_copy_file(src_path, dst_path, TRUE, scratch_pool));
> - SVN_ERR(svn_sqlite__close(db));
> +
> +#if SQLITE_VERSION_AT_LEAST(3,6,11)
> + {
> + svn_sqlite__db_t *dst_db;
> + sqlite3_backup *backup;
> + int rc1, rc2;
> +
> + SVN_ERR(svn_sqlite__open(&dst_db, dst_path, svn_sqlite__mode_rwcreate,
> + NULL, 0, NULL, scratch_pool, scratch_pool));
> + backup = sqlite3_backup_init(dst_db->db3, "main", src_db->db3, "main");
> + if (!backup)
> + return SVN_NO_ERROR;
Shouldn't the databases be closed? If not, then why not? (ie. add a comment)
>...
Cheers,
-g
Received on 2010-04-14 18:48:27 CEST