Documentation Source Text

Check-in [8bbca56f8e]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add the text "*** DRAFT ***" to every page if the file "DRAFT" appears in the build directory. Additional changes toward version 3.6.0.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 8bbca56f8ef299a266f5d53051066830cbbc6cc8
User & Date: drh 2008-06-26 13:11:19
Context
2008-06-26
15:46
Continuing work on the compile-time options document. This is an incremental check-in. check-in: daaf0b565e user: drh tags: trunk
13:11
Add the text "*** DRAFT ***" to every page if the file "DRAFT" appears in the build directory. Additional changes toward version 3.6.0. check-in: 8bbca56f8e user: drh tags: trunk
02:52
Updates to the documents in perparation for 3.6.0. check-in: 3cb62833af user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to pages/35to36.in.

39
40
41
42
43
44
45
46


47
48


49
50








51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74


75
76



















































77
78
79
80

















81

82

83
84

85
86
87
88
89
90
91
...
112
113
114
115
116
117
118




119
120
121
122
123
124
125
...
131
132
133
134
135
136
137

138

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
...
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
hd_keywords 35to36
HEADING 0 {Moving From SQLite 3.5.9 to 3.6.0}

PARAGRAPH {
  SQLite version 3.6.0 contains many changes.  As is the custom with
  the SQLite project, most changes are fully backwards compatible.
  However a few of the changes in version 3.6.0 are incompatible and
  might required modifications to application code in order to upgrade.


}



PARAGRAPH {
  SQLite version 3.5.0 introduced a new OS interface layer that








  provided an abstraction of the underlying operating system.
  This was an important innovation and has proven to be helpful
  in porting and maintaining SQLite.
  However, the developers have discovered some minor flaws in the
  original "virtual file system" design introduced in version 3.5.0
  and so SQLite 3.6.0 includes some small incompatible changes
  to address these flaws.  The purpose of these document is to detail
  the incompatible changes so that system developers will know what
  alterations they need to make in order to move from SQLite version 3.5
  to version 3.6.
}

INDENTED {
  <b>Important Note:</b>  The incompatible
  changes in SQLite version 3.6.0
  only effect the rare applications that make use of the 
  [sqlite3_vfs | virtual file system] interface or that
  supply a application-defined [sqlite3_mutex_enter | mutex implementation]
  or that make use of other obscure compile-time options.  The
  changes introduced by SQLite version 3.6.0 will have zero impact on the
  vast majority of SQLite applications that use the built-in interfaces
  to unix, windows, and os/2 and that use the standard build configuration.
}



PARAGRAPH {
  This document provides a survey of both the backwards compatible and



















































  the incompatible changes in SQLite version 3.6.0.
}

HEADING 1 {Overview Of Changes}

















HEADING 2 {Incompatible Changes}

PARAGRAPH {

  An enumeration of the changes in SQLite version 3.6.0 begins with
  the changes that might require modifications to applications.

}
PARAGRAPH {
  <ol>
  <li><p>Changes to the [sqlite3_vfs] object</p>

      <ol type="a">
      <li><p>The signature of the xAccess method has been modified to
................................................................................

  <li><p>When SQLite is ported to new operation systems (operating systems 
      other unix, windows, and os/2 for which ports are provided together
      with the core)
      two new functions, [sqlite3_os_init()] and [sqlite3_os_end()], must
      be provided as part of the port.</p></li>





  <li><p>Changes to compile-time options:</p>

      <ol type="a">
      <li><p>The SQLITE_MUTEX_APPDEF compile-time parameter is no longer
      recognized.  As a replacement, alternative 
      [sqlite3_mutex_enter | mutex implementations] may be created
      at runtime using [sqlite3_config()] with the [SQLITE_CONFIG_MUTEX]
................................................................................
      new names of these options are respectively:
      SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, SQLITE_OS_OTHER,
      and SQLITE_TEMP_STORE.</p></li>
      </ol>
  </li>
  </ol>
}

HEADING 2 {Fully Backwards-Compatible Enhancements}

PARAGRAPH {
  In addition to the incompatible changes listed above, SQLite
  version 3.6.0 adds the following backwards compatible changes and
  enhancements:
}
PARAGRAPH {
  <ol>

  <li value="5"><p>The new [sqlite3_config()] interface allows an application
  to customize the behavior of SQLite at run-time.  Customizations possible
  using [sqlite3_config()] include the following:</p>
  <ol type="a">
  <li><p>Specify an alternative mutex implementation using the
  [SQLITE_CONFIG_MUTEX] verb with the [sqlite3_mutex_methods] object.</p></li>
  <li><p>Specify an alternative malloc implementation using the
  [SQLITE_CONFIG_MALLOC] verb with the [sqlite3_mem_methods] object.</p></li>
................................................................................
  <li><p>Added the [page_count] PRAGMA for returning the size of the underlying
  database file in pages.</p></li>

  <li><p>Added a new <a href="http://en.wikipedia.org/wiki/R%2a_tree">R*Tree</a>
  virtual table.</p></li>

  </ol>
}
if 0 {
HEADING 1 {Incompatible Changes}
PARAGRAPH {
  If your application defines an alternative 
  [sqlite3_vfs | virtual file system] for SQLite then some adjustments will
  need to be made in order for it to work with SQLite version 3.6.0 and
  later.  The changes are minor compared with the changes involved in
  moving from version 3.4.2 to 3.5.0, but they are still critical changes.
  Here are the changes that must be made:
}
PARAGRAPH {
  <ul>
  <li><p>
  The signature of the xAccess method of the [sqlite3_vfs] object
  must be modified so
  that it returns either [SQLITE_OK] on success or an [error code] if
  something goes wrong.  The result of the method (the determination of
  whether or not the file exists) is written into an integer which is passed
  into xAccess() by pointer.  The reason for this change is to accommodate
  systems where the xAccess() function might actually fail. 
  The xAccess() method in [sqlite3_vfs] was modeled after the access()
  system call of posix, which cannot fail as long as its parameters are
  well-formed.  But not all systems work this way.  When asked whether or
  not a file exists, some embedded systems might respond with "yes", "no",
  or "I don't know because I could not allocate the resources I need to
  find out".  The new signature of the xAccess method allows SQLite to
  accommodate the third reply.</p></li>

  <li><p>
  Similarly, the signature of the xCheckReservedLock method on the
  [sqlite3_io_methods] object is changed so that it returns either
  [SQLITE_OK] or an [error code] and reports the reserved lock status
  by writing into an integer passed into the method by pointer.</p></li>

  <li><p>
  The xGetTempname method has been removed from [sqlite3_vfs].  SQLite no
  longer needs to know the names temporary files.  When SQLite wants a
  temporary file, it will now call the xOpen method of [sqlite3_vfs] with
  a NULL pointer as the filename.  The xOpen method of the VFS must
  recognize this case and generate a unique temporary filename automatically.
  SQLite will always set the [SQLITE_OPEN_DELETEONCLOSE] when opening a
  a temporary file so that file will automatically vanish when closed.
  </p></li>

  <li><p>
  The xGetLastError() method is added to the [sqlite3_vfs] object.
  It is passed a finite-length string buffer
  by SQLite.  The method should fill in the buffer with text describing
  the most recent VFS error that occurred in the same thread in which
  the method is itself running.</p></li>

  <li><p>
  If one of the default OS interfaces for unix, win32, or os/2 is not
  used (that is to say if SQLite is compiled with -DSQLITE_OS_OTHER=1)
  then the application must supply two routines, [sqlite3_os_init()]
  and [sqlite3_os_end()].  These routines are each called once to initialize
  and to finalize the OS interface.  The [sqlite3_os_init()] routine will
  typically use [sqlite3_vfs_register()] to register the default VFS
  for the custom operating-system interface.  The [sqlite3_os_end()] routine
  should deallocate any global resources allocated by [sqlite3_os_init()].
  On many systems, [sqlite3_os_end()] is a no-op.
  </p></li>
  </ul>
}
PARAGRAPH {
  The changes above are minor and should require no more than a few minutes
  to implement for preexisting implementations.
}
}
</tcl>







|
>
>


>
>

<
>
>
>
>
>
>
>
>






|
<
<
<



|
|









>
>

<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|


<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>

>
|
<
>







 







>
>
>
>







 







>
|
>








|







 








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

162
163
164
165
166
167
168
169
...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
...
265
266
267
268
269
270
271
272





































































273
hd_keywords 35to36
HEADING 0 {Moving From SQLite 3.5.9 to 3.6.0}

PARAGRAPH {
  SQLite version 3.6.0 contains many changes.  As is the custom with
  the SQLite project, most changes are fully backwards compatible.
  However a few of the changes in version 3.6.0 are incompatible and
  might required modifications to application code and/or makefiles.
  This document is a briefing on the changes in SQLite 3.6.0
  with special attention to the incompatible changes.
}

HEADING 1 {Incompatible Changes}

PARAGRAPH {

  Incompatible changes are covered first since they are the most
  important to maintainers and programmers.
}

HEADING 2 {Changes To The VFS Layer}

PARAGRAPH {
  SQLite [version 3.5.0] introduced a [34to35 | new OS interface layer] that
  provided an abstraction of the underlying operating system.
  This was an important innovation and has proven to be helpful
  in porting and maintaining SQLite.
  However, the developers have discovered some minor flaws in the
  original "virtual file system" design introduced in version 3.5.0
  and so SQLite 3.6.0 includes some small incompatible changes
  to address these flaws.



}

INDENTED {
  <b>Key Point:</b>  The incompatible
  changes in the SQLite operating-system interface for version 3.6.0
  only effect the rare applications that make use of the 
  [sqlite3_vfs | virtual file system] interface or that
  supply a application-defined [sqlite3_mutex_enter | mutex implementation]
  or that make use of other obscure compile-time options.  The
  changes introduced by SQLite version 3.6.0 will have zero impact on the
  vast majority of SQLite applications that use the built-in interfaces
  to unix, windows, and os/2 and that use the standard build configuration.
}

HEADING 2 {Changes In The Way The IN Operator Handles NULLs}

PARAGRAPH {

  All versions of SQLite up to and including version 3.5.9 have mishandled
  NULL values on the right-hand side of IN and NOT IN operators.
  Specifically, SQLite has previously ignored NULLs on the right-hand side
  of IN and NOT IN.
}

PARAGRAPH {
  Suppose we have a table X1 defined as follows:
}

CODE {
  CREATE TABLE x1(x INTEGER);
  INSERT INTO x1 VALUES(1);
  INSERT INTO x1 VALUES(2);
  INSERT INTO x1 VALUES(NULL);
}

PARAGRAPH {
  Given the definition of X1 above, the following expressions have
  historically evaluated to FALSE in SQLite, though the correct
  answer is actually NULL:
}

CODE {
  3 IN (1,2,NULL)
  3 IN (SELECT * FROM x1)
}

PARAGRAPH {
  Similarly, the following expressions have historically evaluated to
  TRUE when in fact NULL is also the correct answer here:
}

CODE {
  3 NOT IN (1,2,NULL)
  3 NOT IN (SELECT * FROM x1)
}

PARAGRAPH {
  The historical behavior of SQLite is incorrect according to the SQL:1999
  standard and it is inconsistent with the behavior of MySQL and
  PostgreSQL.  Version 3.6.0 changes the behavior of the IN and
  NOT IN operators to conform to the standard and to give the same
  results as other SQL database engines.
}

INDENTED {
  <b>Key Point:</b> The change to the way NULL values are handled
  by the IN and NOT IN operators is technically a bug fix, not a design
  change.  However, maintainers should check to insure that applications
  do not depend on the older, buggy behavior prior to upgrading to
  version 3.6.0.
}


HEADING 2 {Changes To Compile-Time Options}

PARAGRAPH {
  Compile-time options to SQLite are controlled by C-preprocessor 
  macros.  SQLite version 3.6.0 changes the names of some of these
  macros so that all C-preprocessor macros that are specific to
  SQLite begin with the "SQLITE_" prefix.  This is done to reduce the
  risk of name collisions with other software modules.
}

INDENTED {
  <b>Key Point:</b>  Changes to compile-time options have the potential
  to effect makefiles in projects that do customized builds of SQLite.
  Theses changes should have zero impact on application code and for
  most projects which use a standard, default build of SQLite.
}

HEADING 2 {Overview Of Incompatible Changes}

PARAGRAPH {
  The following outline gives more detail on the incompatible changes
  found in SQLite version 3.6.0, together with hyperlinks to other

  documents containing additional detail.
}
PARAGRAPH {
  <ol>
  <li><p>Changes to the [sqlite3_vfs] object</p>

      <ol type="a">
      <li><p>The signature of the xAccess method has been modified to
................................................................................

  <li><p>When SQLite is ported to new operation systems (operating systems 
      other unix, windows, and os/2 for which ports are provided together
      with the core)
      two new functions, [sqlite3_os_init()] and [sqlite3_os_end()], must
      be provided as part of the port.</p></li>

  <li><p>The way in which the IN and NOT IN operators handle NULL values
      in their right-hand expressions has been brought into compliance with
      the SQL standard and with other SQL database engines.</p></li>

  <li><p>Changes to compile-time options:</p>

      <ol type="a">
      <li><p>The SQLITE_MUTEX_APPDEF compile-time parameter is no longer
      recognized.  As a replacement, alternative 
      [sqlite3_mutex_enter | mutex implementations] may be created
      at runtime using [sqlite3_config()] with the [SQLITE_CONFIG_MUTEX]
................................................................................
      new names of these options are respectively:
      SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, SQLITE_OS_OTHER,
      and SQLITE_TEMP_STORE.</p></li>
      </ol>
  </li>
  </ol>
}

HEADING 1 {Fully Backwards-Compatible Enhancements}

PARAGRAPH {
  In addition to the incompatible changes listed above, SQLite
  version 3.6.0 adds the following backwards compatible changes and
  enhancements:
}
PARAGRAPH {
  <ol>

  <li value="6"><p>The new [sqlite3_config()] interface allows an application
  to customize the behavior of SQLite at run-time.  Customizations possible
  using [sqlite3_config()] include the following:</p>
  <ol type="a">
  <li><p>Specify an alternative mutex implementation using the
  [SQLITE_CONFIG_MUTEX] verb with the [sqlite3_mutex_methods] object.</p></li>
  <li><p>Specify an alternative malloc implementation using the
  [SQLITE_CONFIG_MALLOC] verb with the [sqlite3_mem_methods] object.</p></li>
................................................................................
  <li><p>Added the [page_count] PRAGMA for returning the size of the underlying
  database file in pages.</p></li>

  <li><p>Added a new <a href="http://en.wikipedia.org/wiki/R%2a_tree">R*Tree</a>
  virtual table.</p></li>

  </ol>
}





































































</tcl>

Changes to pages/changes.in.

36
37
38
39
40
41
42






























43
44
45
46
47
48
49
      <a href="http://www.sqlite.org/cvstrac/timeline">
      http://www.sqlite.org/cvstrac/timeline</a>.</p>
    }
    hd_close_aux
    hd_enable_main 1
  }
}































chng {2008 May 14 (3.5.9)} {
<li>Added <em>experimental</em>
    support for the [journal_mode] PRAGMA and persistent journal.</li>
<li>[journal_mode | Journal mode PERSIST] is the default behavior in
    [locking_mode | exclusive locking mode].</li>
<li>Fix a performance regression on LEFT JOIN (see [ticket #3015])







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
      <a href="http://www.sqlite.org/cvstrac/timeline">
      http://www.sqlite.org/cvstrac/timeline</a>.</p>
    }
    hd_close_aux
    hd_enable_main 1
  }
}

chng {2008 July 16 (3.6.0 beta)} {
<li>Modifications to the [sqlite3_vfs | virtual file system] interface
    to support a wider range of embedded systems.
    See [35to36 | 35to36.html] for additional information.
    <font color="red">*** Potentially incompatible change ***</font></li>
<li>All C-preprocessor macros used to control compile-time options
    now begin with the prefix "SQLITE_".  This may require changes to
    applications that compile SQLite using their own makefiles and with
    custom compile-time options, hence we mark this as a
    <font color="red">*** Potentially incompatible change ***</font></li>
<li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
    Alternative mutex implementations can now be added at run-time using
    the [sqlite3_config()] interface with the [SQLITE_CONFIG_MUTEX] verb.
    <font color="red">*** Potentially incompatible change ***</font></li>
<li>The handling of IN and NOT IN operators that contain a NULL on their
    right-hand side expression is brought into compliance with the SQL
    standard and with other SQL database engines.  This is a bug fix,
    but as it has the potential to break legacy applications that depend
    on the older buggy behavior, we mark that as a
    <font color="red">*** Potentially incompatible change ***</font></li>
<li>Added the [sqlite3_config()] interface for doing run-time configuration
    of the entire SQLite library.</li>
<li>Added the [sqlite3_status()] interface used for querying run-time status
    information about the overall SQLite library and its subsystems.</li>
<li>Added the [sqlite3_initialize()] and [sqlite3_shutdown()] interfaces.</li>
<li>Added the [PRAGMA page_count] command.</li>
<li>Added the [sqlite3_next_stmt()] interface.</li>
<li>Added a new R*Tree virtual table</li>
}

chng {2008 May 14 (3.5.9)} {
<li>Added <em>experimental</em>
    support for the [journal_mode] PRAGMA and persistent journal.</li>
<li>[journal_mode | Journal mode PERSIST] is the default behavior in
    [locking_mode | exclusive locking mode].</li>
<li>Fix a performance regression on LEFT JOIN (see [ticket #3015])

Changes to pages/formatchng.in.

252
253
254
255
256
257
258













259
260
261
262
263
264
265
  <td valign="top">2007-Sep-3</td>
  <td><p>The design of the OS interface layer was changed for
  release 3.5.0.  Applications that implemented a custom OS
  interface will need to be modified in order to upgrade.
  There are also some subtly different semantics a few obscure
  APIs.  An <a href="34to35.html">article</a> is avilable which
  describing the changes in detail.</p>














  <p>The on-disk file format is unchanged.</p>
  </td>
</tr>
</table>
</blockquote>








>
>
>
>
>
>
>
>
>
>
>
>
>







252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
  <td valign="top">2007-Sep-3</td>
  <td><p>The design of the OS interface layer was changed for
  release 3.5.0.  Applications that implemented a custom OS
  interface will need to be modified in order to upgrade.
  There are also some subtly different semantics a few obscure
  APIs.  An <a href="34to35.html">article</a> is avilable which
  describing the changes in detail.</p>

  <p>The on-disk file format is unchanged.</p>
  </td>
</tr>
<tr>
  <td valign="top">3.5.9 to 3.6.0</td>
  <td valign="top">2008-July-16</td>
  <td><p>There are minor tweaks to the new OS interface layer that
  was added in version 3.5.0.
  Applications that implemented a custom OS
  interface will need to be adjusted.
  An <a href="35to36.html">article</a> is avilable which
  describing the changes in detail.</p>

  <p>The on-disk file format is unchanged.</p>
  </td>
</tr>
</table>
</blockquote>

Changes to pages/index.in.

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

</td>
<td width="20"></td><td bgcolor="#80a796" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_5_9.html">Version 3.5.9</a>
of SQLite is stable and is recommended for all users.</li>
</ul></p>

<h3>Common Links</h3>

<p><ul>
<li> <a href="features.html">Features</a> </li>
<li> <a href="faq.html">Frequently Asked Questions</a> </li>







|
|







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

</td>
<td width="20"></td><td bgcolor="#80a796" width="1"></td><td width="20"></td>
<td valign="top">
<h3>Current Status</h3>

<p><ul>
<li><a href="releaselog/3_6_0.html">Version 3.6.0</a>
of SQLite is recommended for all new development.</li>
</ul></p>

<h3>Common Links</h3>

<p><ul>
<li> <a href="features.html">Features</a> </li>
<li> <a href="faq.html">Frequently Asked Questions</a> </li>

Changes to pages/news.in.

9
10
11
12
13
14
15













16
17
18
19
20
21
22
..
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}














newsitem {2008-May-12} {Version 3.5.9} {
  Version 3.5.9 adds a new experimental [PRAGMA]: [journal_mode].
  Setting the journal mode to PERSIST can provide performance improvement
  on systems where deleting a file is expective.  The PERSIST journal
  mode is still considered experimental and should be used with caution
  pending further testing.
................................................................................
  [sqlite3_context_db_handle()] is a convenience routine that allows
  an application-defined SQL function implementation to retrieve
  its [database connection] handle.

  This release of SQLite is considered stable and ready for production use.
}

newsitem {2008-Mar-17} {Version 3.5.7} {
  Version 3.5.7 fixes several minor and obscure bugs, especially 
  in the autoconf-generated makefile.  Upgrading is optional.
  This release of SQLite is considered stable and ready for production use.
}

newsitem {2008-Feb-6} {Version 3.5.6} {
  Version 3.5.6 fixes a minor regression in 3.5.5 - a regression that
  had nothing to do with the massive change ove the virtual machine
  to a register-based design.
  No problems have been reported with the new virtual machine.  This
  release of SQLite is considered stable and ready for production use.
}

newsitem {2008-Jan-31} {Version 3.5.5} {
  Version 3.5.5 changes over 8% of the core source code of SQLite in order
  to convert the internal virtual machine from a stack-based design into
  a register-based design.  This change will allow future optimizations
  and will avoid an entire class of stack overflow bugs that have caused
  problems in the past.  Even though this change is large, extensive testing
  has found zero errors in the new virtual machine and so we believe this
  to be a very stable release.
}

newsitem {2007-Dec-14} {Version 3.5.4} {
  Version 3.5.4 fixes an long-standing but obscure bug in UPDATE and
  DELETE which might cause database corruption.  (See ticket #2832.)
  Upgrading is recommended for all users.

  This release also brings the processing of ORDER BY statements into
  compliance with standard SQL.  This could, in theory, cause problems
  for existing applications that depend on the older, buggy behavior.
  See ticket #2822 for additional information.
}

newsitem {2007-Dec-12} {SQLite Consortium Announced} {
  The <a href="consortium.html">SQLite Consortium</a> was launched
  today with <a href="http://www.mozilla.org/">Mozilla</a> and
  <a href="http://www.symbian.com/">Symbian</a> as charter members.
  As noted in the <a href="pressrelease-20071212.html">press release</a>,
  the Consortium's goal is to promote the continuing vitality and
  independence of SQLite.  
}
newsitem {2007-Nov-27} {Version 3.5.3} {
  This is an incremental release that fixes several minor problems.
  Upgrading is optional.  If Version 3.5.2 or 3.5.1 is working fine
  for you, then there is no pressing need to change to 3.5.3.

  The prebuilt binaries and the amalgamation found on the 
  <a href="download.html">download</a> page include the FTS3 fulltext
  search extension module.  We are doing this on an experimental
  basis and are not promising to provide prebuilt binaries with
  FTS3 in the future.
}


</tcl>

<a href="oldnews.html">Old news...</a>







>
>
>
>
>
>
>
>
>
>
>
>
>







 







<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
..
58
59
60
61
62
63
64




65



















































66
67
68
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  regsub -all {[Tt]icket #(\d+)} $txt \
      {<a href="http://www.sqlite.org/cvstrac/tktview?tn=\1">\0</a>} txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2008-July-16} {Version 3.6.0 beta} {
  Version 3.6.0 makes changes to the [sqlite3_vfs | VFS] object in order
  to make SQLite more easily portable to a wider variety of platforms.
  There are potential incompatibilities with some legacy applications.
  See the [35to36 | 35to36.html] document for details.

  Many new interfaces are introduced in version 3.6.0.  The code is
  very well tested and is appropriate for use in stable systems.  We
  have attached the "beta" designation only so that we can make tweaks to
  the new interfaces in the next release without having to declare an
  incompatibility.
}

newsitem {2008-May-12} {Version 3.5.9} {
  Version 3.5.9 adds a new experimental [PRAGMA]: [journal_mode].
  Setting the journal mode to PERSIST can provide performance improvement
  on systems where deleting a file is expective.  The PERSIST journal
  mode is still considered experimental and should be used with caution
  pending further testing.
................................................................................
  [sqlite3_context_db_handle()] is a convenience routine that allows
  an application-defined SQL function implementation to retrieve
  its [database connection] handle.

  This release of SQLite is considered stable and ready for production use.
}

























































</tcl>

<a href="oldnews.html">Old news...</a>

Changes to pages/oldnews.in.

5
6
7
8
9
10
11























































12
13
14
15
16
17
18
  regsub -all {[^a-z0-9]} $date _ tag
  hd_puts "<a name=\"$tag\"></a>"
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}
























































newsitem {2007-Nov-05} {Version 3.5.2} {
  This is an incremental release that fixes several minor problems,
  adds some obscure features, and provides some performance tweaks.  
  Upgrading is optional.

  The experimental compile-time option







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  regsub -all {[^a-z0-9]} $date _ tag
  hd_puts "<a name=\"$tag\"></a>"
  hd_puts "<h3>$date - $title</h3>"
  regsub -all "\n( *\n)+" $text "</p>\n\n<p>" txt
  hd_resolve "<p>$txt</p>"
  hd_puts "<hr width=\"50%\">"
}

newsitem {2008-Mar-17} {Version 3.5.7} {
  Version 3.5.7 fixes several minor and obscure bugs, especially 
  in the autoconf-generated makefile.  Upgrading is optional.
  This release of SQLite is considered stable and ready for production use.
}

newsitem {2008-Feb-6} {Version 3.5.6} {
  Version 3.5.6 fixes a minor regression in 3.5.5 - a regression that
  had nothing to do with the massive change ove the virtual machine
  to a register-based design.
  No problems have been reported with the new virtual machine.  This
  release of SQLite is considered stable and ready for production use.
}

newsitem {2008-Jan-31} {Version 3.5.5} {
  Version 3.5.5 changes over 8% of the core source code of SQLite in order
  to convert the internal virtual machine from a stack-based design into
  a register-based design.  This change will allow future optimizations
  and will avoid an entire class of stack overflow bugs that have caused
  problems in the past.  Even though this change is large, extensive testing
  has found zero errors in the new virtual machine and so we believe this
  to be a very stable release.
}

newsitem {2007-Dec-14} {Version 3.5.4} {
  Version 3.5.4 fixes an long-standing but obscure bug in UPDATE and
  DELETE which might cause database corruption.  (See ticket #2832.)
  Upgrading is recommended for all users.

  This release also brings the processing of ORDER BY statements into
  compliance with standard SQL.  This could, in theory, cause problems
  for existing applications that depend on the older, buggy behavior.
  See ticket #2822 for additional information.
}

newsitem {2007-Dec-12} {SQLite Consortium Announced} {
  The <a href="consortium.html">SQLite Consortium</a> was launched
  today with <a href="http://www.mozilla.org/">Mozilla</a> and
  <a href="http://www.symbian.com/">Symbian</a> as charter members.
  As noted in the <a href="pressrelease-20071212.html">press release</a>,
  the Consortium's goal is to promote the continuing vitality and
  independence of SQLite.  
}
newsitem {2007-Nov-27} {Version 3.5.3} {
  This is an incremental release that fixes several minor problems.
  Upgrading is optional.  If Version 3.5.2 or 3.5.1 is working fine
  for you, then there is no pressing need to change to 3.5.3.

  The prebuilt binaries and the amalgamation found on the 
  <a href="download.html">download</a> page include the FTS3 fulltext
  search extension module.  We are doing this on an experimental
  basis and are not promising to provide prebuilt binaries with
  FTS3 in the future.
}

newsitem {2007-Nov-05} {Version 3.5.2} {
  This is an incremental release that fixes several minor problems,
  adds some obscure features, and provides some performance tweaks.  
  Upgrading is optional.

  The experimental compile-time option

Changes to wrap.tcl.

327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348





349







350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
    <div><!-- container div to satisfy validator -->
    
    <a href="${path}index.html">
    <img class="logo" src="${path}images/SQLite.gif" alt="SQLite Logo"
     border="0"></a>
    <div><!-- IE hack to prevent disappearing logo--></div>
    <div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
    
    <table width=100% style="clear:both"><tr><td>
      <div class="se"><div class="sw"><div class="ne"><div class="nw">
      <div class="toolbar">
        <a href="${path}about.html">About</a>
        <a href="${path}sitemap.html">Sitemap</a>
        <a href="${path}docs.html">Documentation</a>
        <a href="${path}download.html">Download</a>
        <a href="${path}copyright.html">License</a>
        <a href="${path}news.html">News</a>
        <a href="http://www.sqlite.org/cvstrac/index">Developers</a>
        <a href="${path}support.html">Support</a>
      </div></div></div></div></div>
    </td></tr></table>
  }





  if {$srcfile!=""} {







    set hd(footer) "<hr><small><i>\n"
    set mtime [file mtime $srcfile]
    set date [clock format $mtime -format {%Y/%m/%d %H:%M:%S UTC} -gmt 1]
    append hd(footer) "This page last modified $date\n"
    append hd(footer) "</i></small></div></body></html>"
  } else {
    set hd(enable-main) $saved_enable
  }
}

# A procedure to write the common footer found at the bottom of
# every HTML file.  $srcfile is the name of the file that is the
# source of the HTML content.  The modification time of this file
# is used to add the "last modified on" line at the bottom of the
# file.
#
proc hd_footer {} {
  global hd
  
  hd_puts {<hr><small><i>}
  set mtime [file mtime $srcfile]
  set date [clock format $mtime -format {%Y/%m/%d %H:%M:%S UTC} -gmt 1]
  hd_puts "This page last modified $date"
  hd_puts {</i></small></div></body></html>}
}

# The following proc is used to ensure consistent formatting in the 
# HTML generated by lang.tcl and pragma.tcl.
#
proc Syntax {args} {
  hd_puts {<table cellpadding="10">}
  foreach {rule body} $args {
    hd_puts "<tr><td align=\"right\" valign=\"top\">"







|














>
>
>
>
>

>
>
>
>
>
>
>
|









<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
















372
373
374
375
376
377
378
    <div><!-- container div to satisfy validator -->
    
    <a href="${path}index.html">
    <img class="logo" src="${path}images/SQLite.gif" alt="SQLite Logo"
     border="0"></a>
    <div><!-- IE hack to prevent disappearing logo--></div>
    <div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>

    <table width=100% style="clear:both"><tr><td>
      <div class="se"><div class="sw"><div class="ne"><div class="nw">
      <div class="toolbar">
        <a href="${path}about.html">About</a>
        <a href="${path}sitemap.html">Sitemap</a>
        <a href="${path}docs.html">Documentation</a>
        <a href="${path}download.html">Download</a>
        <a href="${path}copyright.html">License</a>
        <a href="${path}news.html">News</a>
        <a href="http://www.sqlite.org/cvstrac/index">Developers</a>
        <a href="${path}support.html">Support</a>
      </div></div></div></div></div>
    </td></tr></table>
  }
  if {[file exists DRAFT]} {
    putsin4 $fd {
      <p align="center"><font size="6" color="red">*** DRAFT ***</font></p>
    }
  }
  if {$srcfile!=""} {
    if {[file exists DRAFT]} {
      set hd(footer) {
        <p align="center"><font size="6" color="red">*** DRAFT ***</font></p>
      }
    } else {
      set hd(footer) {}
    }
    append hd(footer) "<hr><small><i>\n"
    set mtime [file mtime $srcfile]
    set date [clock format $mtime -format {%Y/%m/%d %H:%M:%S UTC} -gmt 1]
    append hd(footer) "This page last modified $date\n"
    append hd(footer) "</i></small></div></body></html>"
  } else {
    set hd(enable-main) $saved_enable
  }
}

















# The following proc is used to ensure consistent formatting in the 
# HTML generated by lang.tcl and pragma.tcl.
#
proc Syntax {args} {
  hd_puts {<table cellpadding="10">}
  foreach {rule body} $args {
    hd_puts "<tr><td align=\"right\" valign=\"top\">"