本文整理汇总了C++中db_begin_transaction函数的典型用法代码示例。如果您正苦于以下问题:C++ db_begin_transaction函数的具体用法?C++ db_begin_transaction怎么用?C++ db_begin_transaction使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了db_begin_transaction函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testtag_cmd
/*
** COMMAND: test-tag
** %fossil test-tag (+|*|-)TAGNAME ARTIFACT-ID ?VALUE?
**
** Add a tag or anti-tag to the rebuildable tables of the local repository.
** No tag artifact is created so the new tag is erased the next
** time the repository is rebuilt. This routine is for testing
** use only.
*/
void testtag_cmd(void){
const char *zTag;
const char *zValue;
int rid;
int tagtype;
db_must_be_within_tree();
if( g.argc!=4 && g.argc!=5 ){
usage("TAGNAME ARTIFACT-ID ?VALUE?");
}
zTag = g.argv[2];
switch( zTag[0] ){
case '+': tagtype = 1; break;
case '*': tagtype = 2; break;
case '-': tagtype = 0; break;
default:
fossil_fatal("tag should begin with '+', '*', or '-'");
return;
}
rid = name_to_rid(g.argv[3]);
if( rid==0 ){
fossil_fatal("no such object: %s", g.argv[3]);
}
g.markPrivate = content_is_private(rid);
zValue = g.argc==5 ? g.argv[4] : 0;
db_begin_transaction();
tag_insert(zTag, tagtype, zValue, -1, 0.0, rid);
db_end_transaction(0);
}
示例2: db_begin_transaction
Character *load_player_by_name(Connection *conn, const char *name)
{
char buf[400];
sql_stmt *stmt;
db_begin_transaction();
int len = sprintf(buf,
"select * from character natural join player where name='%s'",
escape_sql_str(name));
if (sql_query(buf, len, &stmt) != SQL_OK)
{
log_data("could not prepare sql statement");
return 0;
}
Character *ch = new_char();
ch->pc = new_player(conn);
if (sql_step(stmt) != SQL_DONE)
{
load_player_columns(conn->account, ch, stmt);
}
if (sql_finalize(stmt) != SQL_OK)
{
log_data("unable to finalize statement");
}
load_char_objs(ch);
load_char_affects(ch);
db_end_transaction();
return ch;
}
示例3: bundle_append_cmd
/*
** Implement the "fossil bundle append BUNDLE FILE..." command. Add
** the named files into the BUNDLE. Create the BUNDLE if it does not
** alraedy exist.
*/
static void bundle_append_cmd(void){
Blob content, hash;
int i;
Stmt q;
verify_all_options();
bundle_attach_file(g.argv[3], "b1", 1);
db_prepare(&q,
"INSERT INTO bblob(blobid, uuid, sz, delta, data, notes) "
"VALUES(NULL, $uuid, $sz, NULL, $data, $filename)");
db_begin_transaction();
for(i=4; i<g.argc; i++){
int sz;
blob_read_from_file(&content, g.argv[i]);
sz = blob_size(&content);
sha1sum_blob(&content, &hash);
blob_compress(&content, &content);
db_bind_text(&q, "$uuid", blob_str(&hash));
db_bind_int(&q, "$sz", sz);
db_bind_blob(&q, "$data", &content);
db_bind_text(&q, "$filename", g.argv[i]);
db_step(&q);
db_reset(&q);
blob_reset(&content);
blob_reset(&hash);
}
db_end_transaction(0);
db_finalize(&q);
}
示例4: reconstruct_cmd
/*
** COMMAND: reconstruct*
**
** Usage: %fossil reconstruct FILENAME DIRECTORY
**
** This command studies the artifacts (files) in DIRECTORY and
** reconstructs the fossil record from them. It places the new
** fossil repository in FILENAME. Subdirectories are read, files
** with leading '.' in the filename are ignored.
**
** See also: deconstruct, rebuild
*/
void reconstruct_cmd(void) {
char *zPassword;
if( g.argc!=4 ){
usage("FILENAME DIRECTORY");
}
if( file_isdir(g.argv[3])!=1 ){
fossil_print("\"%s\" is not a directory\n\n", g.argv[3]);
usage("FILENAME DIRECTORY");
}
db_create_repository(g.argv[2]);
db_open_repository(g.argv[2]);
db_open_config(0);
db_begin_transaction();
db_initial_setup(0, 0, 0, 1);
fossil_print("Reading files from directory \"%s\"...\n", g.argv[3]);
recon_read_dir(g.argv[3]);
fossil_print("\nBuilding the Fossil repository...\n");
rebuild_db(0, 1, 1);
reconstruct_private_table();
/* Skip the verify_before_commit() step on a reconstruct. Most artifacts
** will have been changed and verification therefore takes a really, really
** long time.
*/
verify_cancel();
db_end_transaction(0);
fossil_print("project-id: %s\n", db_get("project-code", 0));
fossil_print("server-id: %s\n", db_get("server-code", 0));
zPassword = db_text(0, "SELECT pw FROM user WHERE login=%Q", g.zLogin);
fossil_print("admin-user: %s (initial password is \"%s\")\n", g.zLogin, zPassword);
}
示例5: insert_db_history
// Insert history into DB worker thread
void insert_db_history(void *data)
{
int i;
int num_elems = (int)data;
// For an unknown reason, the cm160 sometimes sends a value > 12 for month
// -> in that case we use the last valid month received.
static int last_valid_month = 0;
printf("insert %d elems\n", num_elems);
printf("insert into db...\n");
clock_t cStartClock = clock();
db_begin_transaction();
for(i=0; i<num_elems; i++)
{
unsigned char *frame = history[i];
struct record_data rec;
decode_frame(frame, &rec);
if(rec.month < 0 || rec.month > 12)
rec.month = last_valid_month;
else
last_valid_month = rec.month;
db_insert_hist(&rec);
printf("\r %.1f%%", min(100, 100*((double)i/num_elems)));
fflush(stdout);
}
db_update_status();
db_end_transaction();
printf("\rinsert into db... 100%%\n");
fflush(stdout);
printf("update db in %4.2f seconds\n",
(clock() - cStartClock) / (double)CLOCKS_PER_SEC);
}
示例6: _update_recent
static long long int _update_recent(volatile GList *slices, uint64_t seq)
{
INIT_QUERY;
Connection_T c;
volatile long long int count = 0;
if (! (slices = g_list_first(slices)))
return count;
c = db_con_get();
TRY
db_begin_transaction(c);
while (slices) {
Connection_execute(c, "UPDATE %smessages SET recent_flag = 0, seq = %" PRIu64
" WHERE recent_flag = 1 AND seq < %" PRIu64
" AND message_idnr IN (%s)",
DBPFX, seq, seq, (gchar *)slices->data);
count += Connection_rowsChanged(c);
if (! g_list_next(slices)) break;
slices = g_list_next(slices);
}
db_commit_transaction(c);
CATCH(SQLException)
LOG_SQLERROR;
count = DM_EQUERY;
db_rollback_transaction(c);
FINALLY
db_con_close(c);
g_list_destroy(slices);
END_TRY;
return count;
}
示例7: content_new
/*
** Create a new phantom with the given UUID and return its artifact ID.
*/
int content_new(const char *zUuid, int isPrivate){
int rid;
static Stmt s1, s2, s3;
assert( g.repositoryOpen );
db_begin_transaction();
if( uuid_is_shunned(zUuid) ){
db_end_transaction(0);
return 0;
}
db_static_prepare(&s1,
"INSERT INTO blob(rcvid,size,uuid,content)"
"VALUES(0,-1,:uuid,NULL)"
);
db_bind_text(&s1, ":uuid", zUuid);
db_exec(&s1);
rid = db_last_insert_rowid();
db_static_prepare(&s2,
"INSERT INTO phantom VALUES(:rid)"
);
db_bind_int(&s2, ":rid", rid);
db_exec(&s2);
if( g.markPrivate || isPrivate ){
db_multi_exec("INSERT INTO private VALUES(%d)", rid);
}else{
db_static_prepare(&s3,
"INSERT INTO unclustered VALUES(:rid)"
);
db_bind_int(&s3, ":rid", rid);
db_exec(&s3);
}
bag_insert(&contentCache.missing, rid);
db_end_transaction(0);
return rid;
}
示例8: dive_db_update
gboolean dive_db_update(gint dive_id,gchar *dive_datetime,gulong dive_duration,gdouble dive_maxdepth,gdouble dive_mintemp,gdouble dive_maxtemp,gchar *dive_notes,gint site_id,gdouble dive_visibility,gdouble dive_weight)
{
gint rc;
gchar *sqlcmd,*sqlErrMsg=NULL;
gboolean rval = TRUE;
sqlcmd=sqlite3_mprintf(
"UPDATE Dive SET dive_datetime='%s',dive_duration=%lu,dive_maxdepth=%f,dive_mintemp=%f,dive_maxtemp=%f,"
"dive_notes='%q',site_id=%d,dive_visibility=%f,dive_weight=%f WHERE dive_id=%d;",
dive_datetime, dive_duration, dive_maxdepth, dive_mintemp, dive_maxtemp,
dive_notes,site_id, dive_visibility, dive_weight, dive_id
);
if(handle_transactions) db_begin_transaction();
rc=sqlite3_exec(logbook_db,sqlcmd,NULL,0,&sqlErrMsg);
if(rc!=SQLITE_OK) {
g_log(G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,"Error in dive_db_update()\nCode=%d\nQuery='%s'\nError Message='%s'\n",rc,sqlcmd,sqlErrMsg);
sqlite3_free(sqlErrMsg);
rval=FALSE;
if(handle_transactions) db_rollback_transaction();
}
else {
db_not_saved();
if(handle_transactions) db_commit_transaction();
preferences_load_template_dive_number();
}
sqlite3_free(sqlcmd);
return rval;
}
示例9: dm_sievescript_activate
int dm_sievescript_activate(uint64_t user_idnr, char *scriptname)
{
Connection_T c; PreparedStatement_T s; volatile gboolean t = FALSE;
assert(scriptname);
c = db_con_get();
TRY
db_begin_transaction(c);
s = db_stmt_prepare(c,"UPDATE %ssievescripts SET active = 0 WHERE owner_idnr = ? ", DBPFX);
db_stmt_set_u64(s, 1, user_idnr);
db_stmt_exec(s);
db_con_clear(c);
s = db_stmt_prepare(c,"UPDATE %ssievescripts SET active = 1 WHERE owner_idnr = ? AND name = ?", DBPFX);
db_stmt_set_u64(s, 1, user_idnr);
db_stmt_set_str(s, 2, scriptname);
db_stmt_exec(s);
db_commit_transaction(c);
t = TRUE;
CATCH(SQLException)
LOG_SQLERROR;
db_rollback_transaction(c);
FINALLY
db_con_close(c);
END_TRY;
return t;
}
示例10: bundle_import_cmd
/* fossil bundle import BUNDLE ?OPTIONS?
**
** Attempt to import the changes contained in BUNDLE. Make the change
** private so that they do not sync.
**
** OPTIONS:
** --force Import even if the project-code does not match
** --publish Imported changes are not private
*/
static void bundle_import_cmd(void){
int forceFlag = find_option("force","f",0)!=0;
int isPriv = find_option("publish",0,0)==0;
char *zMissingDeltas;
verify_all_options();
if ( g.argc!=4 ) usage("import BUNDLE ?OPTIONS?");
bundle_attach_file(g.argv[3], "b1", 1);
/* Only import a bundle that was generated from a repo with the same
** project code, unless the --force flag is true */
if( !forceFlag ){
if( !db_exists("SELECT 1 FROM config, bconfig"
" WHERE config.name='project-code'"
" AND bconfig.bcname='project-code'"
" AND config.value=bconfig.bcvalue;")
){
fossil_fatal("project-code in the bundle does not match the "
"repository project code. (override with --force).");
}
}
/* If the bundle contains deltas with a basis that is external to the
** bundle and those external basis files are missing from the local
** repo, then the delta encodings cannot be decoded and the bundle cannot
** be extracted. */
zMissingDeltas = db_text(0,
"SELECT group_concat(substr(delta,1,10),' ')"
" FROM bblob"
" WHERE typeof(delta)='text' AND length(delta)=40"
" AND NOT EXISTS(SELECT 1 FROM blob WHERE uuid=bblob.delta)");
if( zMissingDeltas && zMissingDeltas[0] ){
fossil_fatal("delta basis artifacts not found in repository: %s",
zMissingDeltas);
}
db_begin_transaction();
db_multi_exec(
"CREATE TEMP TABLE bix("
" blobid INTEGER PRIMARY KEY,"
" delta INTEGER"
");"
"CREATE INDEX bixdelta ON bix(delta);"
"INSERT INTO bix(blobid,delta)"
" SELECT blobid,"
" CASE WHEN typeof(delta)=='integer'"
" THEN delta ELSE 0 END"
" FROM bblob"
" WHERE NOT EXISTS(SELECT 1 FROM blob WHERE uuid=bblob.uuid AND size>=0);"
"CREATE TEMP TABLE got(rid INTEGER PRIMARY KEY ON CONFLICT IGNORE);"
);
manifest_crosslink_begin();
bundle_import_elements(0, 0, isPriv);
manifest_crosslink_end(0);
describe_artifacts_to_stdout("IN got", "Imported content:");
db_end_transaction(0);
}
示例11: test_detach_cmd
/*
** COMMAND: test-detach ?REPOSITORY?
**
** Change the project-code and make other changes in order to prevent
** the repository from ever again pushing or pulling to other
** repositories. Used to create a "test" repository for development
** testing by cloning a working project repository.
*/
void test_detach_cmd(void){
db_find_and_open_repository(0, 2);
db_begin_transaction();
db_multi_exec(
"DELETE FROM config WHERE name='last-sync-url';"
"UPDATE config SET value=lower(hex(randomblob(20)))"
" WHERE name='project-code';"
"UPDATE config SET value='detached-' || value"
" WHERE name='project-name' AND value NOT GLOB 'detached-*';"
);
db_end_transaction(0);
}
示例12: test_subtree_cmd
/*
** COMMAND: test-subtree
**
** Usage: %fossil test-subtree ?OPTIONS?
**
** Show the subset of check-ins that match the supplied options. This
** command is used to test the subtree_from_options() subroutine in the
** implementation and does not really have any other practical use that
** we know of.
**
** Options:
** --branch BRANCH Include only check-ins on BRANCH
** --from TAG Start the subtree at TAG
** --to TAG End the subtree at TAG
** --checkin TAG The subtree is the single check-in TAG
** --all Include FILE and TAG artifacts
** --exclusive Include FILES exclusively on check-ins
*/
void test_subtree_cmd(void){
int bAll = find_option("all",0,0)!=0;
int bExcl = find_option("exclusive",0,0)!=0;
db_find_and_open_repository(0,0);
db_begin_transaction();
db_multi_exec("CREATE TEMP TABLE tobundle(rid INTEGER PRIMARY KEY);");
subtree_from_arguments("tobundle");
verify_all_options();
if( bAll ) find_checkin_associates("tobundle",bExcl);
describe_artifacts_to_stdout("IN tobundle", 0);
db_end_transaction(1);
}
示例13: extra_deltification
/*
** Attempt to convert more full-text blobs into delta-blobs for
** storage efficiency.
*/
static void extra_deltification(void){
Stmt q;
int topid, previd, rid;
int prevfnid, fnid;
db_begin_transaction();
db_prepare(&q,
"SELECT rid FROM event, blob"
" WHERE blob.rid=event.objid"
" AND event.type='ci'"
" AND NOT EXISTS(SELECT 1 FROM delta WHERE rid=blob.rid)"
" ORDER BY event.mtime DESC"
);
topid = previd = 0;
while( db_step(&q)==SQLITE_ROW ){
rid = db_column_int(&q, 0);
if( topid==0 ){
topid = previd = rid;
}else{
if( content_deltify(rid, previd, 0)==0 && previd!=topid ){
content_deltify(rid, topid, 0);
}
previd = rid;
}
}
db_finalize(&q);
db_prepare(&q,
"SELECT blob.rid, mlink.fnid FROM blob, mlink, plink"
" WHERE NOT EXISTS(SELECT 1 FROM delta WHERE rid=blob.rid)"
" AND mlink.fid=blob.rid"
" AND mlink.mid=plink.cid"
" AND plink.cid=mlink.mid"
" ORDER BY mlink.fnid, plink.mtime DESC"
);
prevfnid = 0;
while( db_step(&q)==SQLITE_ROW ){
rid = db_column_int(&q, 0);
fnid = db_column_int(&q, 1);
if( prevfnid!=fnid ){
prevfnid = fnid;
topid = previd = rid;
}else{
if( content_deltify(rid, previd, 0)==0 && previd!=topid ){
content_deltify(rid, topid, 0);
}
previd = rid;
}
}
db_finalize(&q);
db_end_transaction(0);
}
示例14: dm_sievescript_rename
int dm_sievescript_rename(uint64_t user_idnr, char *scriptname, char *newname)
{
int active = 0;
Connection_T c; ResultSet_T r; PreparedStatement_T s; volatile int t = FALSE;
assert(scriptname);
/*
* According to the draft RFC, a script with the same
* name as an existing script should *atomically* replace it.
*/
c = db_con_get();
TRY
db_begin_transaction(c);
s = db_stmt_prepare(c,"SELECT active FROM %ssievescripts WHERE owner_idnr = ? AND name = ?", DBPFX);
db_stmt_set_u64(s,1, user_idnr);
db_stmt_set_str(s,2, newname);
r = db_stmt_query(s);
if (db_result_next(r)) {
active = db_result_get_int(r,0);
db_con_clear(c);
s = db_stmt_prepare(c, "DELETE FROM %ssievescripts WHERE owner_idnr = ? AND name = ?", DBPFX);
db_stmt_set_u64(s, 1, user_idnr);
db_stmt_set_str(s, 2, newname);
db_stmt_exec(s);
}
db_con_clear(c);
s = db_stmt_prepare(c, "UPDATE %ssievescripts SET name = ?, active = ? WHERE owner_idnr = ? AND name = ?", DBPFX);
db_stmt_set_str(s, 1, newname);
db_stmt_set_int(s, 2, active);
db_stmt_set_u64(s, 3, user_idnr);
db_stmt_set_str(s, 4, scriptname);
db_stmt_exec(s);
t = db_commit_transaction(c);
CATCH(SQLException)
LOG_SQLERROR;
t = DM_EQUERY;
db_rollback_transaction(c);
FINALLY
db_con_close(c);
END_TRY;
return t;
}
示例15: scrub_cmd
/*
** COMMAND: scrub*
** %fossil scrub ?OPTIONS? ?REPOSITORY?
**
** The command removes sensitive information (such as passwords) from a
** repository so that the repository can be sent to an untrusted reader.
**
** By default, only passwords are removed. However, if the --verily option
** is added, then private branches, concealed email addresses, IP
** addresses of correspondents, and similar privacy-sensitive fields
** are also purged. If the --private option is used, then only private
** branches are removed and all other information is left intact.
**
** This command permanently deletes the scrubbed information. THE EFFECTS
** OF THIS COMMAND ARE IRREVERSIBLE. USE WITH CAUTION!
**
** The user is prompted to confirm the scrub unless the --force option
** is used.
**
** Options:
** --force do not prompt for confirmation
** --private only private branches are removed from the repository
** --verily scrub real thoroughly (see above)
*/
void scrub_cmd(void){
int bVerily = find_option("verily",0,0)!=0;
int bForce = find_option("force", "f", 0)!=0;
int privateOnly = find_option("private",0,0)!=0;
int bNeedRebuild = 0;
db_find_and_open_repository(OPEN_ANY_SCHEMA, 2);
db_close(1);
db_open_repository(g.zRepositoryName);
if( !bForce ){
Blob ans;
char cReply;
blob_zero(&ans);
prompt_user(
"Scrubbing the repository will permanently delete information.\n"
"Changes cannot be undone. Continue (y/N)? ", &ans);
cReply = blob_str(&ans)[0];
if( cReply!='y' && cReply!='Y' ){
fossil_exit(1);
}
}
db_begin_transaction();
if( privateOnly || bVerily ){
bNeedRebuild = db_exists("SELECT 1 FROM private");
delete_private_content();
}
if( !privateOnly ){
db_multi_exec(
"UPDATE user SET pw='';"
"DELETE FROM config WHERE name GLOB 'last-sync-*';"
"DELETE FROM config WHERE name GLOB 'peer-*';"
"DELETE FROM config WHERE name GLOB 'login-group-*';"
"DELETE FROM config WHERE name GLOB 'skin:*';"
"DELETE FROM config WHERE name GLOB 'subrepo:*';"
);
if( bVerily ){
db_multi_exec(
"DELETE FROM concealed;"
"UPDATE rcvfrom SET ipaddr='unknown';"
"DROP TABLE IF EXISTS accesslog;"
"UPDATE user SET photo=NULL, info='';"
);
}
}
if( !bNeedRebuild ){
db_end_transaction(0);
db_multi_exec("VACUUM;");
}else{
rebuild_db(0, 1, 0);
db_end_transaction(0);
}
}