[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] [merge-tracking] use prepared statements economically

From: Daniel Berlin <dberlin_at_dberlin.org>
Date: 2006-08-30 16:15:09 CEST

This is fine (though mildly pointless because without being able to
move the entire prepared statement out of the loop, it's probably not
much of a speedup if at all)

On 8/28/06, Kamesh Jayachandran <kamesh@collab.net> wrote:
> Hi All,
> Find the attached patch.
>
> With regards
> Kamesh Jayachandran
>
> [[[
> Patch by: Kamesh Jayachandran <kamesh@collab.net>
>
> Use the same prepared statement across multiple queries of same kind.
> Bind the invariant values outside the 'for loop'.
>
> * subversion/libsvn_fs_fs/fs_fs.c
> (index_path_merge_info):
> Create the statement outside the for loop.
> Reset the statement after each execution as mandated by sqlite
> using sqlite3_reset(Note: reset preserves the bound value, it just
> resets the state of the statement for reexecution.)
> Bind 'mergedfrom', 'mergedto', 'revision' outside the for loop as they
> are invariants across iterations.
> Finalize the statement outside the 'for loop'.
>
> ]]]
>
>
>
> Index: subversion/libsvn_fs_fs/fs_fs.c
> ===================================================================
> --- subversion/libsvn_fs_fs/fs_fs.c (revision 21288)
> +++ subversion/libsvn_fs_fs/fs_fs.c (working copy)
> @@ -4022,20 +4022,19 @@
> if (from && revlist)
> {
> int i;
> + SQLITE_ERR(sqlite3_prepare(ftd->mtd,
> + "INSERT INTO mergeinfo (revision, mergedto, mergedfrom, mergedrevstart, mergedrevend) VALUES (?, ?, ?, ?, ?);",
> + -1, &stmt, NULL), ftd->mtd);
> + SQLITE_ERR(sqlite3_bind_int64(stmt, 1, new_rev), ftd->mtd);
> + SQLITE_ERR(sqlite3_bind_text(stmt, 2, path, -1, SQLITE_TRANSIENT),
> + ftd->mtd);
> + SQLITE_ERR(sqlite3_bind_text(stmt, 3, from, -1, SQLITE_TRANSIENT),
> + ftd->mtd);
> for (i = 0; i < revlist->nelts; i++)
> {
> svn_merge_range_t *range;
>
> range = APR_ARRAY_IDX(revlist, i, svn_merge_range_t *);
> - SQLITE_ERR(sqlite3_prepare(ftd->mtd,
> - "INSERT INTO mergeinfo (revision, mergedto, mergedfrom, mergedrevstart, mergedrevend) VALUES (?, ?, ?, ?, ?);",
> - -1, &stmt, NULL), ftd->mtd);
> - SQLITE_ERR(sqlite3_bind_int64(stmt, 1, new_rev),
> - ftd->mtd);
> - SQLITE_ERR(sqlite3_bind_text(stmt, 2, path, -1, SQLITE_TRANSIENT),
> - ftd->mtd);
> - SQLITE_ERR(sqlite3_bind_text(stmt, 3, from, -1, SQLITE_TRANSIENT),
> - ftd->mtd);
> SQLITE_ERR(sqlite3_bind_int64(stmt, 4, range->start),
> ftd->mtd);
> SQLITE_ERR(sqlite3_bind_int64(stmt, 5, range->end),
> @@ -4043,9 +4042,10 @@
> if (sqlite3_step(stmt) != SQLITE_DONE)
> return svn_error_create(SVN_ERR_FS_SQLITE_ERROR, NULL,
> sqlite3_errmsg(ftd->mtd));
> -
> - SQLITE_ERR(sqlite3_finalize(stmt), ftd->mtd);
> +
> + sqlite3_reset(stmt);
> }
> + SQLITE_ERR(sqlite3_finalize(stmt), ftd->mtd);
> }
> }
> SQLITE_ERR (sqlite3_prepare(ftd->mtd,
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Aug 30 16:44:30 2006

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.