]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Expose the sqlite3_stricmp() interface. Add the SQLITE_FCNTL_PRAGMA file
authordrh <drh@noemail.net>
Thu, 23 Feb 2012 14:28:46 +0000 (14:28 +0000)
committerdrh <drh@noemail.net>
Thu, 23 Feb 2012 14:28:46 +0000 (14:28 +0000)
control.

FossilOrigin-Name: c539cf21ef8f4eb4782790aa97a67d10ae9ffd64

1  2 
manifest
manifest.uuid
src/sqlite.h.in
src/test_vfstrace.c

diff --cc manifest
index 42136690f4d07c1b016e1703731530d5ca21a800,8c2bdd225f39a55967d342e270e465d8d65e81f6..c288bd5a5ed36b2c001cc8be1bfdff6f19cdf8e5
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Avoid\sredefining\sNDEBUG\sif\sthe\sfuzzer\sis\sincluded\sin\san\samalagmated\ssource\sfile.
- D 2012-02-21T18:35:42.365
 -C Move\stest\slogic\sfor\sSQLITE_FCNTL_PRAGMA\sout\sof\sos_unix.c\sand\sinto\stest_vfs.c.
 -D 2012-02-22T20:08:49.412
++C Expose\sthe\ssqlite3_stricmp()\sinterface.\s\sAdd\sthe\sSQLITE_FCNTL_PRAGMA\sfile\ncontrol.
++D 2012-02-23T14:28:46.056
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
  F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@@ -182,9 -182,9 +182,9 @@@ F src/resolve.c 3d3e80a98f203ac6b9329e9
  F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
  F src/select.c 232283a2e60d91cbd9a5ddf2f6f7ecf53d590075
  F src/shell.c aa28f117033ba3e44b5eaaf2ad572222bcdfd66e
- F src/sqlite.h.in 4f3230be44e084a1e98f91bb031b922f33dcf3f8
 -F src/sqlite.h.in 5119a5c169c531d819b790957eebc28c4fc7acf6
++F src/sqlite.h.in f46e368d1a28b09d876e35444785674d170f2d62
  F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
- F src/sqliteInt.h ea24b5f2d2e3ae7e0c1126a78c0e025ed4e98f4b
+ F src/sqliteInt.h b013dab7d43fb67c3ca2f0253d7863abb37e233c
  F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
  F src/status.c 4568e72dfd36b6a5911f93457364deb072e0b03a
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@@ -230,8 -230,8 +230,8 @@@ F src/test_superlock.c 2b97936ca127d139
  F src/test_syscall.c a992d8c80ea91fbf21fb2dd570db40e77dd7e6ae
  F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
  F src/test_thread.c e286f2173563f2a1747c24bcda6b9d030bf4f4e4
- F src/test_vfs.c 07157a0bbfe161cb5e32cad2079abd26cd611c4b
- F src/test_vfstrace.c 065c7270a614254b2c68fbc7ba8d1fb1d5cbc823
+ F src/test_vfs.c 73f46bd9b5183ebcb77da22773886b81157cdc3d
 -F src/test_vfstrace.c f20a32a5fd46feb59a93d2cf650f1ff92da3872b
++F src/test_vfstrace.c 6b28adb2a0e8ecd0f2e3581482e1f658b11b4067
  F src/test_wholenumber.c 6129adfbe7c7444f2e60cc785927f3aa74e12290
  F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
  F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
@@@ -990,7 -990,7 +990,7 @@@ F tool/tostr.awk e75472c2f98dd76e06b8c9
  F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
  F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
  F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
- P 969095ca3067d60f4d3a0a4ad419541cb8b146db
- R 6f6307ffcfea232f8dcb8699efa50953
 -P 5643618108a8aafba67ed4004039b862bb5e5da8
 -R 6e8e292599506d27fedbb78f0e61a658
++P f8ac826f95ae6b7b981e4765d2e65b6839d0eff9 c81fc40b2b584820ac7d1c3848ebeb7225d4eeeb
++R c32d45c36d618b8574dcc1d6ea477e07
  U drh
- Z 053a16dcdcfeef74bca7f647480c806f
 -Z b333c9e71d55e82ea7cb2edfc422542b
++Z 6215aa1a94e7aa4510913be189893b44
diff --cc manifest.uuid
index 85599c25d20437cbeaebe6bcc5c3e20154e78708,adc52f659cd78cecd2aa90334ec8816a2de621ea..c31cd074b717dbc3a06c4e4920af65dc80a8cc80
@@@ -1,1 -1,1 +1,1 @@@
- f8ac826f95ae6b7b981e4765d2e65b6839d0eff9
 -c81fc40b2b584820ac7d1c3848ebeb7225d4eeeb
++c539cf21ef8f4eb4782790aa97a67d10ae9ffd64
diff --cc src/sqlite.h.in
index 6d2173d6156b1dfeecc9c6d217a3e6261568edce,f0eb1987ec913ef8c60d9f5213a31f6ee3a8a0c4..b43fe208f8e276d49a642397e2a31ddb998fe3ed
@@@ -712,7 -712,7 +712,8 @@@ struct sqlite3_io_methods 
  ** into an integer that the pArg argument points to. This capability
  ** is used during testing and only needs to be supported when SQLITE_TEST
  ** is defined.
--**
++** <ul>
++** <li>[[SQLITE_FCNTL_SIZE_HINT]]
  ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
  ** layer a hint of how large the database file will grow to be during the
  ** current transaction.  This hint is not guaranteed to be accurate but it
  ** file space based on this hint in order to help writes to the database
  ** file run faster.
  **
++** <li>[[SQLITE_FCNTL_CHUNK_SIZE]]
  ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
  ** extends and truncates the database file in chunks of a size specified
  ** by the user. The fourth argument to [sqlite3_file_control()] should 
  ** chunks (say 1MB at a time), may reduce file-system fragmentation and
  ** improve performance on some systems.
  **
++** <li>[[SQLITE_FCNTL_FILE_POINTER]]
  ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
  ** to the [sqlite3_file] object associated with a particular database
  ** connection.  See the [sqlite3_file_control()] documentation for
  ** additional information.
  **
++** <li>[[SQLITE_FCNTL_SYNC_OMITTED]]
  ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
  ** SQLite and sent to all VFSes in place of a call to the xSync method
  ** when the database connection has [PRAGMA synchronous] set to OFF.)^
  ** opcode as doing so may disrupt the operation of the specialized VFSes
  ** that do require it.  
  **
++** <li>[[SQLITE_FCNTL_WIN32_AV_RETRY]]
  ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
  ** retry counts and intervals for certain disk I/O operations for the
  ** windows [VFS] in order to provide robustness in the presence of
  ** into the array entry, allowing the current retry settings to be
  ** interrogated.  The zDbName parameter is ignored.
  **
++** <li>[[SQLITE_FCNTL_PERSIST_WAL]]
  ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
  ** persistent [WAL | Write AHead Log] setting.  By default, the auxiliary
  ** write ahead log and shared memory files used for transaction control
  ** WAL mode.  If the integer is -1, then it is overwritten with the current
  ** WAL persistence setting.
  **
++** <li>[[SQLITE_FCNTL_POWERSAFE_OVERWRITE]]
  ** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the
  ** persistent "powersafe-overwrite" or "PSOW" setting.  The PSOW setting
  ** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the
  ** mode.  If the integer is -1, then it is overwritten with the current
  ** zero-damage mode setting.
  **
++** <li>[[SQLITE_FCNTL_OVERWRITE]]
  ** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening
  ** a write transaction to indicate that, unless it is rolled back for some
  ** reason, the entire database file will be overwritten by the current 
  ** transaction. This is used by VACUUM operations.
  **
++** <li>[[SQLITE_FCNTL_VFSNAME]]
  ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of
  ** all [VFSes] in the VFS stack.  The names are of all VFS shims and the
  ** final bottom-level VFS are written into memory obtained from 
  ** do anything.  Callers should initialize the char* variable to a NULL
  ** pointer in case this file-control is not implemented.  This file-control
  ** is intended for diagnostic use only.
 -** to the database file to which the pragma statement refers.  ^If the
+ **
++** <li>[[SQLITE_FCNTL_PRAGMA]]
+ ** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] 
+ ** file control is sent to the open [sqlite3_file] object corresponding
 -** [PRAGMA] processing continues.  ^However, if the [SQLITE_FCNTL_PRAGMA]
++** to the database file to which the pragma statement refers. ^The argument
++** to the [SQLITE_FCNTL_PRAGMA] file control is an array of
++** pointers to strings (char**) in which the second element of the array
++** is the name of the pragma and the third element is the argument to the
++** pragma or NULL if the pragma has no argument.  ^The handler for an
++** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element
++** of the char** argument point to a string obtained from [sqlite3_mprintf()]
++** or the equivalent and that string will become the result of the pragma or
++** the error message if the pragma fails. ^If the
+ ** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal 
 -** VFS has handled the pragma itself and the parser generates a no-op
 -** prepared statement.
++** [PRAGMA] processing continues.  ^If the [SQLITE_FCNTL_PRAGMA]
+ ** file control returns [SQLITE_OK], then the parser assumes that the
++** VFS has handled the PRAGMA itself and the parser generates a no-op
++** prepared statement.  ^If the [SQLITE_FCNTL_PRAGMA] file control returns
++** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means
++** that the VFS encountered an error while handling the [PRAGMA] and the
++** compilation of the PRAGMA fails with an error.  ^The [SQLITE_FCNTL_PRAGMA]
++** file control occurs at the beginning of pragma statement analysis and so
++** it is able to override built-in [PRAGMA] statements.
++** </ul>
  */
  #define SQLITE_FCNTL_LOCKSTATE               1
  #define SQLITE_GET_LOCKPROXYFILE             2
index 62577207b9f4879a013d431703ac9b4fda8bd36d,44a652454dc0b4592d38b1d614c4ff6e1827536c..3a0e2cf03e69a80d387e4f67f584c3c074906c43
@@@ -490,6 -496,10 +496,10 @@@ static int vfstraceFileControl(sqlite3_
      *(char**)pArg = sqlite3_mprintf("vfstrace.%s/%z",
                                      pInfo->zVfsName, *(char**)pArg);
    }
 -                    pInfo->zVfsName, p->zFNmae, zOp, *(char**)pArg);
+   if( op==SQLITE_FCNTL_PRAGMA && rc==SQLITE_OK && *(char**)pArg ){
+     vfstrace_printf(pInfo, "%s.xFileControl(%s,%s) returns %s",
++                    pInfo->zVfsName, p->zFName, zOp, *(char**)pArg);
+   }
    return rc;
  }