[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: Kamesh Jayachandran <kamesh_at_collab.net>
Date: 2006-08-30 21:16:07 CEST

Daniel Berlin wrote:
> 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)
>
I don't think so. we save the compilation cost. I believe the prepared
statements are meant to be compiled once and the place holder values to
be substituted based on the need(most often from the loop).

Correct me if I am wrong.

With regards
Kamesh Jayachandran

> 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 21:50:43 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.