⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 35to36.html

📁 sqlite3源码,适合作为嵌入式(embedded)
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>SQLite Changes From Version 3.5.9 To 3.6.0</title><style type="text/css">body {    margin: auto;    font-family: "Verdana" "sans-serif";    padding: 8px 1%;}a { color: #45735f }a:visited { color: #734559 }.logo { position:absolute; margin:3px; }.tagline {  float:right;  text-align:right;  font-style:italic;  width:240px;  margin:12px;  margin-top:58px;}.toolbar {  font-variant: small-caps;  text-align: center;  line-height: 1.6em;  margin: 0;  padding:1px 8px;}.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }.toolbar a:visited { color: white; }.toolbar a:hover { color: #80a796; background: white; }.content    { margin: 5%; }.content dt { font-weight:bold; }.content dd { margin-bottom: 25px; margin-left:20%; }.content ul { padding:0px; padding-left: 15px; margin:0px; }/* rounded corners */.se  { background: url(images/se.png) 100% 100% no-repeat #80a796}.sw  { background: url(images/sw.png) 0% 100% no-repeat }.ne  { background: url(images/ne.png) 100% 0% no-repeat }.nw  { background: url(images/nw.png) 0% 0% no-repeat }</style><meta http-equiv="content-type" content="text/html; charset=UTF-8">  </head><body><div><!-- container div to satisfy validator --><a href="index.html"><img class="logo" src="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="about.html">About</a>    <a href="sitemap.html">Sitemap</a>    <a href="docs.html">Documentation</a>    <a href="download.html">Download</a>    <a href="copyright.html">License</a>    <a href="news.html">News</a>    <a href="http://www.sqlite.org/cvstrac/index">Developers</a>    <a href="support.html">Support</a>  </div></div></div></div></div></td></tr></table>  <h1> Moving From SQLite 3.5.9 to 3.6.0</h1><p>  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 require 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.</p><blockquote>  <strong>Key Points:</strong>  <ul>  <li> The database file format is unchanged. </li>  <li> All incompatibilities are on obscure interfaces and hence should       have zero impact on most applications. </li>  </ul></blockquote><h2>1.0 Incompatible Changes</h2><p>  Incompatible changes are covered first since they are the most  important to maintainers and programmers.</p><h3>1.1 Overview Of Incompatible Changes</h3><p>  <ol>  <li><p>Changes to the <a href="c3ref/vfs.html">sqlite3_vfs</a> object</p>      <ol type="a">      <li><p>The signature of the xAccess method has been modified to      return an <a href="c3ref/c_abort.html">error code</a> and to store its output into an integer pointed      to by a parameter, rather than returning the output directly.      This change allows the xAccess() method to report failures.      In association with this signature change, a new       extended error code <a href="c3ref/c_ioerr_access.html">SQLITE_IOERR_ACCESS</a> has been added.      </p></li>      <li><p>The xGetTempname method has been removed from <a href="c3ref/vfs.html">sqlite3_vfs</a>.      In its place, the xOpen method is enhanced to open a temporary file      of its own invention when the filename parameter is NULL.</p></li>      <li><p>Added the xGetLastError() method to <a href="c3ref/vfs.html">sqlite3_vfs</a> for returning      filesystem-specific error messages and error codes back to      SQLite.</p></li>      </ol>  </li>  <li><p>The signature of the xCheckReservedLock method on <a href="c3ref/io_methods.html">sqlite3_io_methods</a>      has been modified so that it returns an <a href="c3ref/c_abort.html">error code</a> and stores its      boolean result into an integer pointed to by a parameter.  In      association with this change, a new extended error code      <a href="c3ref/c_ioerr_access.html">SQLITE_IOERR_CHECKRESERVEDLOCK</a> has been added.</p></li>  <li><p>When SQLite is ported to new operation systems (operating systems       other than Unix, Windows, and OS/2 for which ports are provided together      with the core)      two new functions, <a href="c3ref/initialize.html">sqlite3_os_init()</a> and <a href="c3ref/initialize.html">sqlite3_os_end()</a>, 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>The column names for the result sets of <a href="lang_select.html">SELECT</a> statements have      been tweaked in some cases to work more like 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       <a href="c3ref/mutex_alloc.html">mutex implementations</a> may be created      at runtime using <a href="c3ref/config.html">sqlite3_config()</a> with the <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_MUTEX</a>      operator and the <a href="c3ref/mutex_methods.html">sqlite3_mutex_methods</a> object.</p></li>      <li><p>Compile-time options OS_UNIX, OS_WIN, OS_OS2, OS_OTHER, and      TEMP_STORE have been renamed to include an "SQLITE_" prefix in order      to help avoid namespace collisions with application software.  The      new names of these options are respectively:      SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, SQLITE_OS_OTHER,      and <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a>.</p></li>      </ol>  </li>  </ol></p><h3>1.2 Changes To The VFS Layer</h3><p>  SQLite <a href="releaselog/3_5_0.html">version 3.5.0</a> introduced a <a href="34to35.html">new OS interface layer</a> 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.</p><blockquote>  <strong>Key Point:</strong>  The incompatible  changes in the SQLite operating-system interface for version 3.6.0  only affect the rare applications that make use of the   <a href="c3ref/vfs.html">virtual file system</a> interface or that  supply a application-defined <a href="c3ref/mutex_alloc.html">mutex implementation</a>  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.</blockquote><h3>1.3 Changes In The Way The IN Operator Handles NULLs</h3><p>  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.</p><p>  Suppose we have a table X1 defined as follows:</p><blockquote><pre>  CREATE TABLE x1(x INTEGER);  INSERT INTO x1 VALUES(1);  INSERT INTO x1 VALUES(2);  INSERT INTO x1 VALUES(NULL);</pre></blockquote><p>  Given the definition of X1 above, the following expressions have  historically evaluated to FALSE in SQLite, though the correct  answer is actually NULL:</p><blockquote><pre>  3 IN (1,2,NULL)  3 IN (SELECT * FROM x1)</pre></blockquote><p>  Similarly, the following expressions have historically evaluated to  TRUE when in fact NULL is also the correct answer here:</p><blockquote><pre>  3 NOT IN (1,2,NULL)  3 NOT IN (SELECT * FROM x1)</pre></blockquote><p>  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.</p><blockquote>  <strong>Key Point:</strong> 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.</blockquote><h3>1.4 Changes To Column Naming Rules</h3><p>  The column names reported by join subqueries have been modified slightly  in order to work more like other database engines.  Consider the following  query:</p><blockquote><pre>  CREATE TABLE t1(a);  CREATE TABLE t2(x);  SELECT * FROM (SELECT t1.a FROM t1 JOIN t2 ORDER BY t2.x LIMIT 1) ORDER BY 1;</pre></blockquote><p>  In version 3.5.9 the query above would return a single column named "t1.a".  In version 3.6.0 the column name is just "a".</p><p>  SQLite has never made any promises about the names of columns in the  result set of <a href="lang_select.html">SELECT</a> statement unless the column contains an AS clause.  So this change to column name is technically not an incompatibility.  SQLite is merely changing from one undefined behavior to another.  Nevertheless, many applications depend on the unspecified column naming  behavior of SQLite and so this change is discussed under the  incompatible changes subheading.</p><h3>1.5 Changes To Compile-Time Options</h3><p>  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.</p><blockquote>  <strong>Key Point:</strong>  Changes to compile-time options have the  potential to affect makefiles in projects that do customized builds of  SQLite. These changes should have zero impact on application code and for  most projects which use a standard, default build of SQLite.</blockquote><h2>2.0 Fully Backwards-Compatible Enhancements</h2><p>  In addition to the incompatible changes listed above, SQLite  version 3.6.0 adds the following backwards compatible changes and  enhancements:</p><p>  <ol>  <li value="7"><p>The new <a href="c3ref/config.html">sqlite3_config()</a> interface allows an application  to customize the behavior of SQLite at run-time.  Customizations possible  using <a href="c3ref/config.html">sqlite3_config()</a> include the following:</p>  <ol type="a">  <li><p>Specify an alternative mutex implementation using the  <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_MUTEX</a> verb with the <a href="c3ref/mutex_methods.html">sqlite3_mutex_methods</a> object.</p></li>  <li><p>Specify an alternative malloc implementation using the  <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_MALLOC</a> verb with the <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object.</p></li>  <li><p>Partially or fully disable the use of mutexes using  <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_SINGLETHREAD</a>, <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_MULTITHREAD</a> and  <a href="c3ref/c_config_getmalloc.html">SQLITE_CONFIG_SERIALIZED</a>.</p></li>  </ol>  </li>  <li><p>A new flag <a href="c3ref/c_open_create.html">SQLITE_OPEN_NOMUTEX</a> is made available to the  <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.</p></li>  <li><p>The new <a href="c3ref/status.html">sqlite3_status()</a> interface allows an application to query  the performance status of SQLite at runtime.  </p></li>  <li><p>The <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a>  interfaces are deprecated.  The equivalent functionality is now available  through <a href="c3ref/status.html">sqlite3_status()</a>.</p></li>  <li><p>The <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface can be called to explicitly  initialize the SQLite subsystem.  The <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface is  called automatically when invoking certain interfaces so the use of  <a href="c3ref/initialize.html">sqlite3_initialize()</a> is not required, but it is recommended.</p></li>  <li><p>The <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interface causes SQLite release any  system resources (memory allocations, mutexes, open file handles)  that it might have been allocated by <a href="c3ref/initialize.html">sqlite3_initialize()</a>.</p></li>  <li><p>The <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface allows an application to discover  all <a href="c3ref/stmt.html">prepared statements</a> associated with a <a href="c3ref/sqlite3.html">database connection</a>.</p></li>  <li><p>Added the <a href="pragma.html#pragma_page_count">page_count</a> PRAGMA for returning the size of the underlying  database file in pages.</p></li>  <li><p>Added a new <a href="rtree.html">R*Tree index extension</a>.</p></li>  </ol></p><hr><small><i>This page last modified 2008/11/01 13:26:49 UTC</i></small></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -