1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
4
<title>Commit And Rollback Notification Callbacks</title>
5
<style type="text/css">
8
font-family: Verdana, sans-serif;
13
a:visited { color: #734559 }
15
.logo { position:absolute; margin:3px; }
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
32
.toolbar a:visited { color: white; }
33
.toolbar a:hover { color: #044a64; background: white; }
35
.content { margin: 5%; }
36
.content dt { font-weight:bold; }
37
.content dd { margin-bottom: 25px; margin-left:20%; }
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
41
.se { background: url(../images/se.gif) 100% 100% no-repeat #044a64}
42
.sw { background: url(../images/sw.gif) 0% 100% no-repeat }
43
.ne { background: url(../images/ne.gif) 100% 0% no-repeat }
44
.nw { background: url(../images/nw.gif) 0% 0% no-repeat }
46
/* Things for "fancyformat" documents start here. */
47
.fancy img+p {font-style:italic}
48
.fancy .codeblock i { color: darkblue; }
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
50
.fancy h2 { margin-left: 10px }
51
.fancy h3 { margin-left: 20px }
52
.fancy h4 { margin-left: 30px }
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
55
.fancy #toc a { color: darkblue ; text-decoration: none }
56
.fancy .todo { color: #AA3333 ; font-style : italic }
57
.fancy .todo:before { content: 'TODO:' }
58
.fancy p.todo { border: solid #AA3333 1px; padding: 1ex }
59
.fancy img { display:block; }
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
62
.fancy li p { margin: 1em 0 }
63
/* End of "fancyformat" specific rules. */
69
<div><!-- container div to satisfy validator -->
71
<a href="../index.html">
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
74
<div><!-- IE hack to prevent disappearing logo--></div>
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
77
<table width=100% style="clear:both"><tr><td>
78
<div class="se"><div class="sw"><div class="ne"><div class="nw">
79
<table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
82
<a href="../about.html">About</a>
83
<a href="../sitemap.html">Sitemap</a>
84
<a href="../docs.html">Documentation</a>
85
<a href="../download.html">Download</a>
86
<a href="../copyright.html">License</a>
87
<a href="../news.html">News</a>
88
<a href="../support.html">Support</a>
91
gMsg = "Search SQLite Docs..."
92
function entersearch() {
93
var q = document.getElementById("q");
94
if( q.value == gMsg ) { q.value = "" }
95
q.style.color = "black"
96
q.style.fontStyle = "normal"
98
function leavesearch() {
99
var q = document.getElementById("q");
100
if( q.value == "" ) {
102
q.style.color = "#044a64"
103
q.style.fontStyle = "italic"
108
<div style="padding:0 1em 0px 0;white-space:nowrap">
109
<form name=f method="GET" action="http://www.sqlite.org/search">
110
<input id=q name=q type=text
111
onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
112
<input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
116
</div></div></div></div>
118
<div class=startsearch></div>
120
<a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Commit And Rollback Notification Callbacks</h2><blockquote><pre>void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
121
void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
122
</pre></blockquote><p>
123
The sqlite3_commit_hook() interface registers a callback
124
function to be invoked whenever a transaction is <a href="../lang_transaction.html">committed</a>.
125
Any callback set by a previous call to sqlite3_commit_hook()
126
for the same database connection is overridden.
127
The sqlite3_rollback_hook() interface registers a callback
128
function to be invoked whenever a transaction is <a href="../lang_transaction.html">rolled back</a>.
129
Any callback set by a previous call to sqlite3_rollback_hook()
130
for the same database connection is overridden.
131
The pArg argument is passed through to the callback.
132
If the callback on a commit hook function returns non-zero,
133
then the commit is converted into a rollback.</p>
135
<p>The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
136
return the P argument from the previous call of the same function
137
on the same <a href="../c3ref/sqlite3.html">database connection</a> D, or NULL for
138
the first call for each function on D.</p>
140
<p>The commit and rollback hook callbacks are not reentrant.
141
The callback implementation must not do anything that will modify
142
the database connection that invoked the callback. Any actions
143
to modify the database connection must be deferred until after the
144
completion of the <a href="../c3ref/step.html">sqlite3_step()</a> call that triggered the commit
145
or rollback hook in the first place.
146
Note that running any other SQL statements, including SELECT statements,
147
or merely calling <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and <a href="../c3ref/step.html">sqlite3_step()</a> will modify
148
the database connections for the meaning of "modify" in this paragraph.</p>
150
<p>Registering a NULL function disables the callback.</p>
152
<p>When the commit hook callback routine returns zero, the <a href="../lang_transaction.html">COMMIT</a>
153
operation is allowed to continue normally. If the commit hook
154
returns non-zero, then the <a href="../lang_transaction.html">COMMIT</a> is converted into a <a href="../lang_transaction.html">ROLLBACK</a>.
155
The rollback hook is invoked on a rollback that results from a commit
156
hook returning non-zero, just as it would be with any other rollback.</p>
158
<p>For the purposes of this API, a transaction is said to have been
159
rolled back if an explicit "ROLLBACK" statement is executed, or
160
an error or constraint causes an implicit rollback to occur.
161
The rollback callback is not invoked if a transaction is
162
automatically rolled back because the database connection is closed.</p>
164
<p>See also the <a href="../c3ref/update_hook.html">sqlite3_update_hook()</a> interface.
165
</p><p>See also lists of
166
<a href="objlist.html">Objects</a>,
167
<a href="constlist.html">Constants</a>, and
168
<a href="funclist.html">Functions</a>.</p>