@@ -1,8 +1,8 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******************************************************************************
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file is an amalgamation of many separate C source files from SQLite
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** version 3.8.8. By combining all the individual C code files into this
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version 3.8.9. By combining all the individual C code files into this
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** single large file, the entire code can be compiled as a single translation
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unit. This allows many compilers to do optimizations that would not be
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** possible if the files were compiled separately. Performance improvements
7 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of 5% or more are commonly seen when SQLite is compiled as a single
8 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** translation unit.
@@ -88,10 +88,48 @@
88 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* _MSVC_H_ */
89 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of msvc.h ************************************************/
91 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in sqliteInt.h ******************/
92 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Special setup for VxWorks
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Include vxworks.h in the middle of sqliteInt.h ***************/
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Begin file vxworks.h *****************************************/
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2015-03-02
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ******************************************************************************
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains code that is specific to Wind River's VxWorks
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__RTP__) || defined(_WRS_KERNEL)
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This is VxWorks. Set up things specially for that OS
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include <vxWorks.h>
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include <pthread.h> /* amalgamator: dontcache */
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OS_VXWORKS 1
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_OS_OTHER 0
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_HOMEGROWN_RECURSIVE_MUTEX 1
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_OMIT_LOAD_EXTENSION 1
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_ENABLE_LOCKING_STYLE 0
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define HAVE_UTIME 1
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This is not VxWorks. */
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OS_VXWORKS 0
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* defined(_WRS_KERNEL) */
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** End of vxworks.h *********************************************/
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Continuing where we left off in sqliteInt.h ******************/
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
93 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
94 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These #defines should enable >2GB file support on POSIX if the
95 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** underlying operating system supports it. If the OS lacks
96 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** large file support, or if the OS is windows, these should be no-ops.
97 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -223,10 +261,17 @@
223 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_API
224 262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_API
225 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
226 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
227 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add the ability to override 'cdecl'
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_CDECL
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_CDECL
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
228 273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
229 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These no-op macros are used in front of interfaces to mark those
230 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interfaces as either deprecated or experimental. New applications
231 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** should not use deprecated interfaces - they are supported for backwards
232 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compatibility only. Application writers should be aware that
@@ -276,13 +321,13 @@
276 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
277 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_libversion()],
278 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
279 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
280 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION "3.8.8"
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION_NUMBER 3008008
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2015-02-25 14:25:31 6d132e7a224ee68b5cefe9222944aac5760ffc20"
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION "3.8.9"
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION_NUMBER 3008009
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2015-03-24 18:19:39 436314b5728c9413f9ac2d837e1c19364f31be72"
284 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
285 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
286 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
287 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
288 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -925,18 +970,20 @@
925 970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
926 971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These integer constants are opcodes for the xFileControl method
927 972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
928 973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface.
929 974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li>[[SQLITE_FCNTL_LOCKSTATE]]
930 977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This
931 978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opcode causes the xFileControl method to write the current state of
932 979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
933 980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
934 981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into an integer that the pArg argument points to. This capability
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is used during testing and only needs to be supported when SQLITE_TEST
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is defined.
937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <ul>
982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is used during testing and is only available when the SQLITE_TEST
983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compile-time option is used.
984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
938 985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>[[SQLITE_FCNTL_SIZE_HINT]]
939 986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
940 987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** layer a hint of how large the database file will grow to be during the
941 988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** current transaction. This hint is not guaranteed to be accurate but it
942 989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is often close. The underlying VFS might choose to preallocate database
@@ -1057,11 +1104,13 @@
1057 1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the error message if the pragma fails. ^If the
1058 1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal
1059 1106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA]
1060 1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file control returns [SQLITE_OK], then the parser assumes that the
1061 1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VFS has handled the PRAGMA itself and the parser generates a no-op
1062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** prepared statement. ^If the [SQLITE_FCNTL_PRAGMA] file control returns
1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** prepared statement if result string is NULL, or that returns a copy
1110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the result string if the string is non-NULL.
1111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the [SQLITE_FCNTL_PRAGMA] file control returns
1063 1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means
1064 1113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the VFS encountered an error while handling the [PRAGMA] and the
1065 1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compilation of the PRAGMA fails with an error. ^The [SQLITE_FCNTL_PRAGMA]
1066 1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file control occurs at the beginning of pragma statement analysis and so
1067 1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it is able to override built-in [PRAGMA] statements.
@@ -1115,10 +1164,17 @@
1115 1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging. This
1116 1165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opcode causes the xFileControl method to swap the file handle with the one
1117 1166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointed to by the pArg argument. This capability is used during testing
1118 1167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and only needs to be supported when SQLITE_TEST is defined.
1119 1168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li>[[SQLITE_FCNTL_WAL_BLOCK]]
1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The [SQLITE_FCNTL_WAL_BLOCK] is a signal to the VFS layer that it might
1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be advantageous to block on the next WAL lock if the lock is not immediately
1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** available. The WAL subsystem issues this signal during rare
1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** circumstances in order to fix a problem with priority inversion.
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Applications should <em>not</em> use this file-control.
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1120 1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
1121 1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1122 1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_LOCKSTATE 1
1123 1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_GET_LOCKPROXYFILE 2
1124 1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SET_LOCKPROXYFILE 3
@@ -1139,10 +1195,11 @@
1139 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_TRACE 19
1140 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_HAS_MOVED 20
1141 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SYNC 21
1142 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_COMMIT_PHASETWO 22
1143 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_WIN32_SET_HANDLE 23
1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_FCNTL_WAL_BLOCK 24
1144 1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1145 1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* deprecated names */
1146 1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
1147 1204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SET_LOCKPROXYFILE SQLITE_FCNTL_SET_LOCKPROXYFILE
1148 1205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_LAST_ERRNO SQLITE_FCNTL_LAST_ERRNO
@@ -1705,11 +1762,11 @@
1705 1762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disabled, the following SQLite interfaces become non-operational:
1706 1763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
1707 1764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_memory_used()]
1708 1765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_memory_highwater()]
1709 1766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_soft_heap_limit64()]
1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> [sqlite3_status()]
1767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [sqlite3_status64()]
1711 1768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>)^
1712 1769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Memory allocation statistics are enabled by default unless SQLite is
1713 1770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1714 1771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocation statistics are disabled by default.
1715 1772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dd>
@@ -1916,11 +1973,10 @@
1916 1973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1917 1974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
1918 1975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro
1919 1976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1920 1977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that specifies the maximum size of the created heap.
1921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </dl>
1922 1978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1923 1979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
1924 1980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
1925 1981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
1926 1982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a pointer to an integer and writes into that integer the number of extra
@@ -3163,15 +3219,17 @@
3163 3219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3164 3220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3165 3221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3166 3222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Error Codes And Messages
3167 3223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_errcode() interface returns the numeric [result code] or
3169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [extended result code] for the most recent failed sqlite3_* API call
3170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** associated with a [database connection]. If a prior API call failed
3171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** but the most recent API call succeeded, the return value from
3172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_errcode() is undefined. ^The sqlite3_extended_errcode()
3224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the most recent sqlite3_* API call associated with
3225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [database connection] D failed, then the sqlite3_errcode(D) interface
3226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns the numeric [result code] or [extended result code] for that
3227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** API call.
3228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the most recent API call was successful,
3229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the return value from sqlite3_errcode() is undefined.
3230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_extended_errcode()
3173 3231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface is the same except that it always returns the
3174 3232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [extended result code] even when extended result codes are
3175 3233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disabled.
3176 3234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3177 3235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
@@ -3356,20 +3414,18 @@
3356 3414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The second argument, "zSql", is the statement to be compiled, encoded
3357 3415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2()
3358 3416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
3359 3417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use UTF-16.
3360 3418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the nByte argument is less than zero, then zSql is read up to the
3362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** first zero terminator. ^If nByte is non-negative, then it is the maximum
3363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** number of bytes read from zSql. ^When nByte is non-negative, the
3364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zSql string ends at either the first '\000' or '\u0000' character or
3365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the nByte-th byte, whichever comes first. If the caller knows
3366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that the supplied string is nul-terminated, then there is a small
3367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** performance advantage to be gained by passing an nByte parameter that
3368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is equal to the number of bytes in the input string <i>including</i>
3369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the nul-terminator bytes as this saves SQLite from having to
3370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** make a copy of the input string.
3419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the nByte argument is negative, then zSql is read up to the
3420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first zero terminator. ^If nByte is positive, then it is the
3421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of bytes read from zSql. ^If nByte is zero, then no prepared
3422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement is generated.
3423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the caller knows that the supplied string is nul-terminated, then
3424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there is a small performance advantage to passing an nByte parameter that
3425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is the number of bytes in the input string <i>including</i>
3426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the nul-terminator.
3371 3427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3372 3428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If pzTail is not NULL then *pzTail is made to point to the first byte
3373 3429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** past the end of the first SQL statement in zSql. These routines only
3374 3430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compile the first statement in zSql, so *pzTail is left pointing to
3375 3431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** what remains uncompiled.
@@ -4394,12 +4450,12 @@
4394 4450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** DEPRECATED
4395 4451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4396 4452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These functions are [deprecated]. In order to maintain
4397 4453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** backwards compatibility with older code, these functions continue
4398 4454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be supported. However, new applications should avoid
4399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the use of these functions. To help encourage people to avoid
4400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** using these functions, we are not going to tell you what they do.
4455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the use of these functions. To encourage programmers to avoid
4456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** these functions, we will not explain what they do.
4401 4457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4402 4458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DEPRECATED
4403 4459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
4404 4460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
4405 4461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
@@ -5783,11 +5839,11 @@
5783 5839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is delivered up to the client application, the string will be automatically
5784 5840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** freed by sqlite3_free() and the zErrMsg field will be zeroed.
5785 5841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
5786 5842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct sqlite3_vtab {
5787 5843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule; /* The module for this virtual table */
5788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nRef; /* NO LONGER USED */
5844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRef; /* Number of open cursors */
5789 5845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zErrMsg; /* Error message from sqlite3_mprintf() */
5790 5846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Virtual table implementations will typically add additional fields */
5791 5847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
5792 5848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
5793 5849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -6461,11 +6517,11 @@
6461 6517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_LAST 25
6462 6518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6463 6519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6464 6520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: SQLite Runtime Status
6465 6521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This interface is used to retrieve runtime status information
6522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^These interfaces are used to retrieve runtime status information
6467 6523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** about the performance of SQLite, and optionally to reset various
6468 6524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** highwater marks. ^The first argument is an integer code for
6469 6525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the specific parameter to measure. ^(Recognized integer codes
6470 6526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are of the form [status parameters | SQLITE_STATUS_...].)^
6471 6527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The current value of the parameter is returned into *pCurrent.
@@ -6475,23 +6531,26 @@
6475 6531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value. For those parameters
6476 6532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** nothing is written into *pHighwater and the resetFlag is ignored.)^
6477 6533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(Other parameters record only the highwater mark and not the current
6478 6534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value. For these latter parameters nothing is written into *pCurrent.)^
6479 6535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
6481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** non-zero [error code] on failure.
6536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_status() and sqlite3_status64() routines return
6537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK on success and a non-zero [error code] on failure.
6482 6538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine is threadsafe but is not atomic. This routine can be
6484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** called while other threads are running the same or different SQLite
6485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interfaces. However the values returned in *pCurrent and
6486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** *pHighwater reflect the status of SQLite at different points in time
6487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and it is possible that another thread might change the parameter
6488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in between the times when *pCurrent and *pHighwater are written.
6539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If either the current value or the highwater mark is too large to
6540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be represented by a 32-bit integer, then the values returned by
6541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_status() are undefined.
6489 6542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6490 6543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_db_status()]
6491 6544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
6492 6545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
6546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_status64(
6547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op,
6548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *pCurrent,
6549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *pHighwater,
6550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int resetFlag
6551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
6493 6552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6494 6553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6495 6554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6496 6555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Status Parameters
6497 6556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {status parameters}
@@ -7157,24 +7216,24 @@
7157 7216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7158 7217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
7159 7218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not a permanent error and does not affect the return value of
7160 7219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_backup_finish().
7161 7220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]]
7221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [[sqlite3_backup_remaining()]] [[sqlite3_backup_pagecount()]]
7163 7222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b>
7164 7223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Each call to sqlite3_backup_step() sets two values inside
7166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the [sqlite3_backup] object: the number of pages still to be backed
7167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** up and the total number of pages in the source database file.
7168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces
7169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** retrieve these two values, respectively.
7170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
7171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The values returned by these functions are only updated by
7172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_backup_step(). ^If the source database is modified during a backup
7173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** operation, then the values are not updated to account for any extra
7174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pages that need to be updated or the size of the source database file
7175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** changing.
7224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_backup_remaining() routine returns the number of pages still
7225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be backed up at the conclusion of the most recent sqlite3_backup_step().
7226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_backup_pagecount() routine returns the total number of pages
7227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the source database at the conclusion of the most recent
7228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_backup_step().
7229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(The values returned by these functions are only updated by
7230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_backup_step(). If the source database is modified in a way that
7231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** changes the size of the source database or the number of pages remaining,
7232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** those changes are not reflected in the output of sqlite3_backup_pagecount()
7233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and sqlite3_backup_remaining() until after the next
7234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_backup_step().)^
7176 7235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7177 7236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <b>Concurrent Usage of Database Handles</b>
7178 7237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7179 7238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The source [database connection] may be used by the application for other
7180 7239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** purposes while a backup operation is underway or being initialized.
@@ -8018,19 +8077,21 @@
8018 8077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_MAX_FUNCTION_ARG
8019 8078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_MAX_FUNCTION_ARG 127
8020 8079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
8021 8080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8022 8081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The maximum number of in-memory pages to use for the main database
8024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table and for temporary tables. The SQLITE_DEFAULT_CACHE_SIZE
8082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The suggested maximum number of in-memory pages to use for
8083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the main database table and for temporary tables.
8084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
8085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-31093-59126 The default suggested cache size
8086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is 2000 pages.
8087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-48205-43578 The default suggested cache size can be
8088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** altered using the SQLITE_DEFAULT_CACHE_SIZE compile-time options.
8025 8089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8026 8090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DEFAULT_CACHE_SIZE
8027 8091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_DEFAULT_CACHE_SIZE 2000
8028 8092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
8029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_DEFAULT_TEMP_CACHE_SIZE
8030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SQLITE_DEFAULT_TEMP_CACHE_SIZE 500
8031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
8032 8093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8033 8094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8034 8095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The default number of frames to accumulate in the log file before
8035 8096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** checkpointing the database in WAL mode.
8036 8097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -8870,10 +8931,24 @@
8870 8931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
8871 8932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 0.5 -> -10 0.1 -> -33 0.0625 -> -40
8872 8933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8873 8934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef INT16_TYPE LogEst;
8874 8935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
8937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set the SQLITE_PTRSIZE macro to the number of bytes in a pointer
8938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
8939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_PTRSIZE
8940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # if defined(__SIZEOF_POINTER__)
8941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_PTRSIZE __SIZEOF_POINTER__
8942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \
8943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ defined(_M_ARM) || defined(__arm__) || defined(__x86)
8944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_PTRSIZE 4
8945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # else
8946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_PTRSIZE 8
8947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
8948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
8949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
8875 8950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8876 8951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros to determine whether the machine is big or little endian,
8877 8952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and whether or not that determination is run-time or compile-time.
8878 8953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
8879 8954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For best performance, an attempt is made to guess at the byte-order
@@ -9320,12 +9395,22 @@
9320 9395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_DATA_VERSION 15 /* A virtual meta-value */
9321 9396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9322 9397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
9323 9398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Values that may be OR'd together to form the second argument of an
9324 9399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3BtreeCursorHints() call.
9400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
9401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The BTREE_BULKLOAD flag is set on index cursors when the index is going
9402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be filled with content that is already in sorted order.
9403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
9404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The BTREE_SEEK_EQ flag is set on cursors that will get OP_SeekGE or
9405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** OP_SeekLE opcodes for a range search, but where the range of entries
9406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** selected will all have the same key. In other words, the cursor will
9407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be used only for equality key searches.
9408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
9325 9409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
9326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_BULKLOAD 0x00000001
9410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_BULKLOAD 0x00000001 /* Used to full index in sorted order */
9411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_SEEK_EQ 0x00000002 /* EQ seeks only - no range seeks */
9327 9412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9328 9413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCursor(
9329 9414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree*, /* BTree containing table to open */
9330 9415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTable, /* Index of root page */
9331 9416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wrFlag, /* 1 for writing. 0 for read-only */
@@ -9367,10 +9452,13 @@
9367 9452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
9368 9453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *);
9369 9454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
9370 9455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
9371 9456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *, unsigned int mask);
9457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
9458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3BtreeCursorHasHint(BtCursor*, unsigned int mask);
9459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
9372 9460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *pBt);
9373 9461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void);
9374 9462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9375 9463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
9376 9464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
@@ -9733,27 +9821,29 @@
9733 9821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_FkCounter 134 /* synopsis: fkctr[P1]+=P2 */
9734 9822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_FkIfZero 135 /* synopsis: if fkctr[P1]==0 goto P2 */
9735 9823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_MemMax 136 /* synopsis: r[P1]=max(r[P1],r[P2]) */
9736 9824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_IfPos 137 /* synopsis: if r[P1]>0 goto P2 */
9737 9825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_IfNeg 138 /* synopsis: r[P1]+=P3, if r[P1]<0 goto P2 */
9738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfZero 139 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
9739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_AggFinal 140 /* synopsis: accum=r[P1] N=P2 */
9740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IncrVacuum 141
9741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Expire 142
9742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_TableLock 143 /* synopsis: iDb=P1 root=P2 write=P3 */
9743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VBegin 144
9744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VCreate 145
9745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VDestroy 146
9746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VOpen 147
9747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VColumn 148 /* synopsis: r[P3]=vcolumn(P2) */
9748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VNext 149
9749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VRename 150
9750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Pagecount 151
9751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MaxPgcnt 152
9752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Init 153 /* synopsis: Start at P2 */
9753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Noop 154
9754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Explain 155
9826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfNotZero 139 /* synopsis: if r[P1]!=0 then r[P1]+=P3, goto P2 */
9827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DecrJumpZero 140 /* synopsis: if (--r[P1])==0 goto P2 */
9828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_JumpZeroIncr 141 /* synopsis: if (r[P1]++)==0 ) goto P2 */
9829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_AggFinal 142 /* synopsis: accum=r[P1] N=P2 */
9830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IncrVacuum 143
9831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Expire 144
9832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_TableLock 145 /* synopsis: iDb=P1 root=P2 write=P3 */
9833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VBegin 146
9834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VCreate 147
9835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VDestroy 148
9836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VOpen 149
9837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VColumn 150 /* synopsis: r[P3]=vcolumn(P2) */
9838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VNext 151
9839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VRename 152
9840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Pagecount 153
9841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MaxPgcnt 154
9842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Init 155 /* synopsis: Start at P2 */
9843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Noop 156
9844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Explain 157
9755 9845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9756 9846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9757 9847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Properties such as "out2" or "jump" that are specified in
9758 9848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comments following the "case" for each opcode in the vdbe.c
9759 9849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are encoded into bitvectors as follows:
@@ -9781,13 +9871,13 @@
9781 9871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 96 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\
9782 9872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 104 */ 0x00, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x00,\
9783 9873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 112 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00,\
9784 9874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 120 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
9785 9875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 128 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01,\
9786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x01, 0x00, 0x00,\
9787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,\
9788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ 0x02, 0x01, 0x00, 0x00,}
9876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ 0x08, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x01,\
9877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\
9878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ 0x00, 0x02, 0x02, 0x01, 0x00, 0x00,}
9789 9879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9790 9880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of opcodes.h *********************************************/
9791 9881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in vdbe.h ***********************/
9792 9882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9793 9883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -10865,10 +10955,11 @@
10865 10955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} init;
10866 10956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVdbeActive; /* Number of VDBEs currently running */
10867 10957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVdbeRead; /* Number of active VDBEs that read or write */
10868 10958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVdbeWrite; /* Number of active VDBEs that read and write */
10869 10959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVdbeExec; /* Number of nested calls to VdbeExec() */
10960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVDestroy; /* Number of active OP_VDestroy operations */
10870 10961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nExtension; /* Number of loaded extensions */
10871 10962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void **aExtension; /* Array of shared library handles */
10872 10963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xTrace)(void*,const char*); /* Trace function */
10873 10964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pTraceArg; /* Argument to the trace function */
10874 10965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xProfile)(void*,const char*,u64); /* Profiling function */
@@ -12022,11 +12113,11 @@
12022 12113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_ONEPASS_DESIRED 0x0004 /* Want to do one-pass UPDATE/DELETE */
12023 12114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_DUPLICATES_OK 0x0008 /* Ok to return a row more than once */
12024 12115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_OMIT_OPEN_CLOSE 0x0010 /* Table cursors are already open */
12025 12116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_FORCE_TABLE 0x0020 /* Do not use an index-only search */
12026 12117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_ONETABLE_ONLY 0x0040 /* Only code the 1st table in pTabList */
12027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 0x0080 // not currently used */
12118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_NO_AUTOINDEX 0x0080 /* Disallow automatic indexes */
12028 12119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_GROUPBY 0x0100 /* pOrderBy is really a GROUP BY */
12029 12120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_DISTINCTBY 0x0200 /* pOrderby is really a DISTINCT clause */
12030 12121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_WANT_DISTINCT 0x0400 /* All output needs to be distinct */
12031 12122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_SORTBYGROUP 0x0800 /* Support sqlite3WhereIsSorted() */
12032 12123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_REOPEN_IDX 0x1000 /* Try to use OP_ReopenIdx */
@@ -12459,11 +12550,12 @@
12459 12550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_APPEND 0x08 /* This is likely to be an append */
12460 12551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */
12461 12552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */
12462 12553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */
12463 12554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_BULKCSR 0x01 /* OP_Open** used to open bulk cursor */
12464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OPFLAG_P2ISREG 0x02 /* P2 to OP_Open** is a register number */
12555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OPFLAG_SEEKEQ 0x02 /* OP_Open** cursor uses EQ seek only */
12556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OPFLAG_P2ISREG 0x04 /* P2 to OP_Open** is a register number */
12465 12557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLAG_PERMUTE 0x01 /* OP_Compare: use the permutation */
12466 12558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12467 12559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
12468 12560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* Each trigger present in the database schema is stored as an instance of
12469 12561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* struct Trigger.
@@ -12863,14 +12955,19 @@
12863 12955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int);
12864 12956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MutexInit(void);
12865 12957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MutexEnd(void);
12866 12958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12867 12959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3StatusValue(int);
12869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3StatusAdd(int, int);
12960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_int64 sqlite3StatusValue(int);
12961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3StatusUp(int, int);
12962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3StatusDown(int, int);
12870 12963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3StatusSet(int, int);
12871 12964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Access to mutexes used by sqlite3_status() */
12966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void);
12967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void);
12968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12872 12969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_FLOATING_POINT
12873 12970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IsNaN(double);
12874 12971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
12875 12972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3IsNaN(X) 0
12876 12973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -13246,11 +13343,11 @@
13246 13343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ErrStr(int);
13247 13344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
13248 13345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
13249 13346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
13250 13347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
13251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr*, const Token*);
13348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr*, const Token*, int);
13252 13349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse*,Expr*,const char*);
13253 13350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr*);
13254 13351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *);
13255 13352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *);
13256 13353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int);
@@ -14633,18 +14730,10 @@
14633 14730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of the virtual machine. This structure contains the complete
14634 14731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** state of the virtual machine.
14635 14732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
14636 14733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
14637 14734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is really a pointer to an instance of this structure.
14638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
14639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
14640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** any virtual table method invocations made by the vdbe program. It is
14641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set to 2 for xDestroy method calls and 1 for all other methods. This
14642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** variable is used for two purposes: to allow xDestroy methods to execute
14643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** "DROP TABLE" statements and to prevent some nasty side effects of
14644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** malloc failure when SQLite is invoked recursively by a virtual table
14645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** method function.
14646 14735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14647 14736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Vdbe {
14648 14737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db; /* The database connection that owns this statement */
14649 14738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Op *aOp; /* Space to hold the virtual machine's program */
14650 14739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *aMem; /* The memory locations */
@@ -14671,11 +14760,10 @@
14671 14760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
14672 14761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nResColumn; /* Number of columns in one row of the result set */
14673 14762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 errorAction; /* Recovery action to do in case of an error */
14674 14763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 minWriteFileFormat; /* Minimum file format for writable database files */
14675 14764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft explain:2; /* True if EXPLAIN present on SQL command */
14676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bft inVtabMethod:2; /* See comments above */
14677 14765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft changeCntOn:1; /* True to update the change-counter */
14678 14766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft expired:1; /* True if the VM needs to be recompiled */
14679 14767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft runOnlyOnce:1; /* Automatically expire on reset */
14680 14768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft usesStmtJournal:1; /* True if uses a statement journal */
14681 14769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bft readOnly:1; /* True for statements that do not write */
@@ -14831,13 +14919,35 @@
14831 14919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14832 14920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Variables in which to record status information.
14833 14921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14834 14922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct sqlite3StatType sqlite3StatType;
14835 14923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static SQLITE_WSD struct sqlite3StatType {
14836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nowValue[10]; /* Current value */
14837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int mxValue[10]; /* Maximum value */
14924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_PTRSIZE>4
14925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nowValue[10]; /* Current value */
14926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 mxValue[10]; /* Maximum value */
14927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
14928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 nowValue[10]; /* Current value */
14929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 mxValue[10]; /* Maximum value */
14930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
14838 14931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} sqlite3Stat = { {0,}, {0,} };
14932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
14933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
14934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Elements of sqlite3Stat[] are protected by either the memory allocator
14935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mutex, or by the pcache1 mutex. The following array determines which.
14936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
14937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char statMutex[] = {
14938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_MEMORY_USED */
14939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 1, /* SQLITE_STATUS_PAGECACHE_USED */
14940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 1, /* SQLITE_STATUS_PAGECACHE_OVERFLOW */
14941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_SCRATCH_USED */
14942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_SCRATCH_OVERFLOW */
14943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_MALLOC_SIZE */
14944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_PARSER_STACK */
14945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 1, /* SQLITE_STATUS_PAGECACHE_SIZE */
14946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_SCRATCH_SIZE */
14947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* SQLITE_STATUS_MALLOC_COUNT */
14948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
14839 14949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14840 14950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14841 14951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The "wsdStat" macro will resolve to the status information
14842 14952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** state vector. If writable static data is unsupported on the target,
14843 14953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we have to locate the state vector at run-time. In the more common
@@ -14851,64 +14961,110 @@
14851 14961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define wsdStatInit
14852 14962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define wsdStat sqlite3Stat
14853 14963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
14854 14964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14855 14965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return the current value of a status parameter.
14966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the current value of a status parameter. The caller must
14967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be holding the appropriate mutex.
14857 14968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3StatusValue(int op){
14969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_int64 sqlite3StatusValue(int op){
14859 14970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStatInit;
14860 14971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
14972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op>=0 && op<ArraySize(statMutex) );
14973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(statMutex[op] ? sqlite3Pcache1Mutex()
14974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : sqlite3MallocMutex()) );
14861 14975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return wsdStat.nowValue[op];
14862 14976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14863 14977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14864 14978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add N to the value of a status record. It is assumed that the
14866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** caller holds appropriate locks.
14979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add N to the value of a status record. The caller must hold the
14980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** appropriate mutex. (Locking is checked by assert()).
14981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The StatusUp() routine can accept positive or negative values for N.
14983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value of N is added to the current status value and the high-water
14984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mark is adjusted if necessary.
14985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The StatusDown() routine lowers the current value by N. The highwater
14987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mark is unchanged. N must be non-negative for StatusDown().
14867 14988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3StatusAdd(int op, int N){
14989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3StatusUp(int op, int N){
14869 14990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStatInit;
14870 14991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
14992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op>=0 && op<ArraySize(statMutex) );
14993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(statMutex[op] ? sqlite3Pcache1Mutex()
14994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : sqlite3MallocMutex()) );
14871 14995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStat.nowValue[op] += N;
14872 14996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
14873 14997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStat.mxValue[op] = wsdStat.nowValue[op];
14874 14998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14875 14999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3StatusDown(int op, int N){
15001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wsdStatInit;
15002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( N>=0 );
15003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op>=0 && op<ArraySize(statMutex) );
15004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(statMutex[op] ? sqlite3Pcache1Mutex()
15005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : sqlite3MallocMutex()) );
15006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
15007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wsdStat.nowValue[op] -= N;
15008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
14876 15009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14877 15010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Set the value of a status to X.
15011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set the value of a status to X. The highwater mark is adjusted if
15012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** necessary. The caller must hold the appropriate mutex.
14879 15013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14880 15014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
14881 15015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStatInit;
14882 15016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
15017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op>=0 && op<ArraySize(statMutex) );
15018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(statMutex[op] ? sqlite3Pcache1Mutex()
15019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : sqlite3MallocMutex()) );
14883 15020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStat.nowValue[op] = X;
14884 15021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
14885 15022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStat.mxValue[op] = wsdStat.nowValue[op];
14886 15023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14887 15024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14888 15025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14889 15026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14890 15027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Query status information.
14891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
14892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This implementation assumes that reading or writing an aligned
14893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 32-bit integer is an atomic operation. If that assumption is not true,
14894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then this routine is not threadsafe.
14895 15028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
15029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_status64(
15030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op,
15031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *pCurrent,
15032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *pHighwater,
15033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int resetFlag
15034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
15035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex *pMutex;
14897 15036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStatInit;
14898 15037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
14899 15038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_MISUSE_BKPT;
14900 15039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14901 15040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_API_ARMOR
14902 15041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCurrent==0 || pHighwater==0 ) return SQLITE_MISUSE_BKPT;
14903 15042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMutex = statMutex[op] ? sqlite3Pcache1Mutex() : sqlite3MallocMutex();
15044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(pMutex);
14904 15045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pCurrent = wsdStat.nowValue[op];
14905 15046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pHighwater = wsdStat.mxValue[op];
14906 15047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( resetFlag ){
14907 15048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsdStat.mxValue[op] = wsdStat.nowValue[op];
14908 15049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(pMutex);
15051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)pMutex; /* Prevent warning when SQLITE_THREADSAFE=0 */
14909 15052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
15053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
15054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
15055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iCur, iHwtr;
15056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
15057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_API_ARMOR
15058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCurrent==0 || pHighwater==0 ) return SQLITE_MISUSE_BKPT;
15059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
15060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_status64(op, &iCur, &iHwtr, resetFlag);
15061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==0 ){
15062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pCurrent = (int)iCur;
15063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pHighwater = (int)iHwtr;
15064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
15065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
14910 15066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14911 15067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14912 15068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14913 15069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Query status information for a single database connection
14914 15070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -20358,10 +20514,17 @@
20358 20514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20359 20515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nearlyFull;
20360 20516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
20361 20517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20362 20518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define mem0 GLOBAL(struct Mem0Global, mem0)
20519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
20520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
20521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the memory allocator mutex. sqlite3_status() needs it.
20522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
20523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void){
20524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return mem0.mutex;
20525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
20363 20526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20364 20527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
20365 20528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine runs when the memory allocator sees that the
20366 20529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** total memory allocation is about to exceed the soft heap
20367 20530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** limit.
@@ -20381,11 +20544,11 @@
20381 20544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3MemoryAlarm(
20382 20545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
20383 20546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pArg,
20384 20547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iThreshold
20385 20548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
20386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nUsed;
20549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nUsed;
20387 20550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
20388 20551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.alarmCallback = xCallback;
20389 20552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.alarmArg = pArg;
20390 20553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.alarmThreshold = iThreshold;
20391 20554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
@@ -20550,11 +20713,11 @@
20550 20713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
20551 20714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(mem0.mutex) );
20552 20715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFull = sqlite3GlobalConfig.m.xRoundup(n);
20553 20716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
20554 20717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mem0.alarmCallback!=0 ){
20555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
20718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
20556 20719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nUsed >= mem0.alarmThreshold - nFull ){
20557 20720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.nearlyFull = 1;
20558 20721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MallocAlarm(nFull);
20559 20722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20560 20723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.nearlyFull = 0;
@@ -20567,12 +20730,12 @@
20567 20730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3GlobalConfig.m.xMalloc(nFull);
20568 20731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20569 20732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20570 20733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
20571 20734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFull = sqlite3MallocSize(p);
20572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
20573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
20735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_MEMORY_USED, nFull);
20736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_MALLOC_COUNT, 1);
20574 20737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20575 20738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = p;
20576 20739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nFull;
20577 20740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20578 20741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -20645,18 +20808,18 @@
20645 20808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
20646 20809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
20647 20810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = mem0.pScratchFree;
20648 20811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.pScratchFree = mem0.pScratchFree->pNext;
20649 20812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.nScratchFree--;
20650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
20813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_SCRATCH_USED, 1);
20651 20814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20652 20815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20653 20816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20654 20817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3Malloc(n);
20655 20818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat && p ){
20656 20819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
20657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, sqlite3MallocSize(p));
20820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_SCRATCH_OVERFLOW, sqlite3MallocSize(p));
20658 20821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20659 20822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20660 20823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
20661 20824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20662 20825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_notheld(mem0.mutex) );
@@ -20693,23 +20856,23 @@
20693 20856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
20694 20857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSlot->pNext = mem0.pScratchFree;
20695 20858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.pScratchFree = pSlot;
20696 20859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.nScratchFree++;
20697 20860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
20698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
20861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_SCRATCH_USED, 1);
20699 20862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20700 20863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20701 20864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Release memory back to the heap */
20702 20865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
20703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
20866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_SCRATCH) );
20704 20867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
20705 20868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat ){
20706 20869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSize = sqlite3MallocSize(p);
20707 20870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
20708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
20709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
20710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
20871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_SCRATCH_OVERFLOW, iSize);
20872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_MEMORY_USED, iSize);
20873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_MALLOC_COUNT, 1);
20711 20874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
20712 20875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20713 20876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20714 20877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
20715 20878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -20736,26 +20899,26 @@
20736 20899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
20737 20900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3GlobalConfig.m.xSize(p);
20738 20901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20739 20902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
20740 20903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db==0 ){
20741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
20904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
20742 20905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
20743 20906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3MallocSize(p);
20744 20907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20745 20908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(db->mutex) );
20746 20909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isLookaside(db, p) ){
20747 20910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return db->lookaside.sz;
20748 20911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20749 20912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20751 20914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3GlobalConfig.m.xSize(p);
20752 20915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20753 20916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20754 20917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20755 20918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API sqlite3_uint64 sqlite3_msize(void *p){
20756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
20919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
20757 20920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
20758 20921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (sqlite3_uint64)sqlite3GlobalConfig.m.xSize(p);
20759 20922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20760 20923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20761 20924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -20762,15 +20925,15 @@
20762 20925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free memory previously obtained from sqlite3Malloc().
20763 20926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20764 20927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_free(void *p){
20765 20928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 ) return; /* IMP: R-49053-54554 */
20766 20929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
20767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
20930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) );
20768 20931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat ){
20769 20932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
20770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
20771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
20933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_MEMORY_USED, sqlite3MallocSize(p));
20934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_MALLOC_COUNT, 1);
20772 20935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
20773 20936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20774 20937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20775 20938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
20776 20939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -20807,11 +20970,11 @@
20807 20970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->lookaside.nOut--;
20808 20971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
20809 20972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20810 20973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20811 20974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20813 20976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
20814 20977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
20815 20978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
20816 20979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20817 20980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -20820,11 +20983,11 @@
20820 20983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20821 20984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
20822 20985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld, nNew, nDiff;
20823 20986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pNew;
20824 20987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
20825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
20988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(pOld, (u8)~MEMTYPE_HEAP) );
20826 20989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOld==0 ){
20827 20990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3Malloc(nBytes); /* IMP: R-04300-56712 */
20828 20991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20829 20992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nBytes==0 ){
20830 20993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pOld); /* IMP: R-26507-47431 */
@@ -20854,11 +21017,11 @@
20854 21017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MallocAlarm((int)nBytes);
20855 21018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
20856 21019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20857 21020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
20858 21021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nNew = sqlite3MallocSize(pNew);
20859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
21022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
20860 21023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20861 21024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
20862 21025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20863 21026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
20864 21027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -20987,11 +21150,11 @@
20987 21150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pNew, p, db->lookaside.sz);
20988 21151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, p);
20989 21152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20990 21153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20991 21154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
21155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
20993 21156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
20994 21157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3_realloc64(p, n);
20995 21158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pNew ){
20996 21159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mallocFailed = 1;
20997 21160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -24969,27 +25132,29 @@
24969 25132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 134 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
24970 25133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 135 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
24971 25134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 136 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
24972 25135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 137 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
24973 25136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 138 */ "IfNeg" OpHelp("r[P1]+=P3, if r[P1]<0 goto P2"),
24974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 139 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
24975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 140 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
24976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 141 */ "IncrVacuum" OpHelp(""),
24977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 142 */ "Expire" OpHelp(""),
24978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 143 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
24979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 144 */ "VBegin" OpHelp(""),
24980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 145 */ "VCreate" OpHelp(""),
24981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 146 */ "VDestroy" OpHelp(""),
24982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 147 */ "VOpen" OpHelp(""),
24983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 148 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
24984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 149 */ "VNext" OpHelp(""),
24985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 150 */ "VRename" OpHelp(""),
24986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 151 */ "Pagecount" OpHelp(""),
24987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ "MaxPgcnt" OpHelp(""),
24988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 153 */ "Init" OpHelp("Start at P2"),
24989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 154 */ "Noop" OpHelp(""),
24990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 155 */ "Explain" OpHelp(""),
25137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 139 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]+=P3, goto P2"),
25138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 140 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
25139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 141 */ "JumpZeroIncr" OpHelp("if (r[P1]++)==0 ) goto P2"),
25140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 142 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
25141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 143 */ "IncrVacuum" OpHelp(""),
25142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 144 */ "Expire" OpHelp(""),
25143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 145 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
25144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 146 */ "VBegin" OpHelp(""),
25145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 147 */ "VCreate" OpHelp(""),
25146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 148 */ "VDestroy" OpHelp(""),
25147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 149 */ "VOpen" OpHelp(""),
25148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 150 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
25149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 151 */ "VNext" OpHelp(""),
25150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ "VRename" OpHelp(""),
25151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 153 */ "Pagecount" OpHelp(""),
25152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 154 */ "MaxPgcnt" OpHelp(""),
25153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 155 */ "Init" OpHelp("Start at P2"),
25154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 156 */ "Noop" OpHelp(""),
25155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 157 */ "Explain" OpHelp(""),
24991 25156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
24992 25157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return azName[i];
24993 25158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24994 25159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24995 25160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -25065,22 +25230,10 @@
25065 25230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# else
25066 25231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_ENABLE_LOCKING_STYLE 0
25067 25232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# endif
25068 25233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25069 25234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
25071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Define the OS_VXWORKS pre-processor macro to 1 if building on
25072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** vxworks, or 0 otherwise.
25073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
25074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef OS_VXWORKS
25075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # if defined(__RTP__) || defined(_WRS_KERNEL)
25076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define OS_VXWORKS 1
25077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # else
25078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define OS_VXWORKS 0
25079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # endif
25080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
25081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
25082 25235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25083 25236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** standard include files.
25084 25237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25085 25238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/types.h>
25086 25239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/stat.h>
@@ -25091,22 +25244,23 @@
25091 25244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <errno.h>
25092 25245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
25093 25246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/mman.h>
25094 25247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25095 25248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS
25249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE
25097 25250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/ioctl.h>
25098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # if OS_VXWORKS
25099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # include <semaphore.h>
25100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # include <limits.h>
25101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # else
25102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # include <sys/file.h>
25103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # include <sys/param.h>
25104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # endif
25251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <sys/file.h>
25252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <sys/param.h>
25105 25253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_LOCKING_STYLE */
25106 25254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
25255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS
25256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* # include <sys/ioctl.h> */
25257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <semaphore.h>
25258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <limits.h>
25259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* OS_VXWORKS */
25260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
25261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
25108 25262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/mount.h>
25109 25263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25110 25264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25111 25265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef HAVE_UTIME
25112 25266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <utime.h>
@@ -25142,10 +25296,14 @@
25142 25296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25143 25297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25144 25298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Maximum supported path-length.
25145 25299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25146 25300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MAX_PATHNAME 512
25301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
25302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Always cast the getpid() return type for compatibility with
25303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** kernel modules in VxWorks. */
25304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osGetpid(X) (pid_t)getpid()
25147 25305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25148 25306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25149 25307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Only set the lastErrno if the error code is a real error and not
25150 25308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a normal expected return code of SQLITE_BUSY or SQLITE_OK
25151 25309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -25231,11 +25389,11 @@
25231 25389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25232 25390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This variable holds the process id (pid) from when the xRandomness()
25233 25391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** method was called. If xOpen() is called from a different process id,
25234 25392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indicating that a fork() has occurred, the PRNG will be reset.
25235 25393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int randomnessPid = 0;
25394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static pid_t randomnessPid = 0;
25237 25395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25238 25396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25239 25397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values for the unixFile.ctrlFlags bitmask:
25240 25398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25241 25399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_EXCL 0x01 /* Connections from one process only */
@@ -25249,10 +25407,11 @@
25249 25407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
25250 25408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_DELETE 0x20 /* Delete on close */
25251 25409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_URI 0x40 /* Filename might have query parameters */
25252 25410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_NOLOCK 0x80 /* Do no file locking */
25253 25411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UNIXFILE_WARNED 0x0100 /* verifyDbFile() warnings issued */
25412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_BLOCK 0x0200 /* Next SHM lock might block */
25254 25413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25255 25414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25256 25415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Include code that is common to all os_*.c files
25257 25416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25258 25417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include os_common.h in the middle of os_unix.c ***************/
@@ -25587,11 +25746,11 @@
25587 25746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osFcntl ((int(*)(int,int,...))aSyscall[7].pCurrent)
25588 25747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25589 25748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "read", (sqlite3_syscall_ptr)read, 0 },
25590 25749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osRead ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
25591 25750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(USE_PREAD) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
25751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25593 25752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pread", (sqlite3_syscall_ptr)pread, 0 },
25594 25753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
25595 25754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pread", (sqlite3_syscall_ptr)0, 0 },
25596 25755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25597 25756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPread ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
@@ -25604,11 +25763,11 @@
25604 25763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPread64 ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
25605 25764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25606 25765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "write", (sqlite3_syscall_ptr)write, 0 },
25607 25766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
25608 25767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(USE_PREAD) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
25768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25610 25769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pwrite", (sqlite3_syscall_ptr)pwrite, 0 },
25611 25770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
25612 25771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pwrite", (sqlite3_syscall_ptr)0, 0 },
25613 25772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
25614 25773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPwrite ((ssize_t(*)(int,const void*,size_t,off_t))\
@@ -26743,11 +26902,12 @@
26743 26902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tErrno = 0;
26744 26903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26745 26904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
26746 26905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h,
26747 26906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azFileLock(eFileLock), azFileLock(pFile->eFileLock),
26748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared , getpid()));
26907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared,
26908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetpid(0)));
26749 26909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26750 26910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is already a lock of this type or more restrictive on the
26751 26911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unixFile, do nothing. Don't use the end_lock: exit path, as
26752 26912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unixEnterMutex() hasn't been called yet.
26753 26913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -26951,11 +27111,11 @@
26951 27111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
26952 27112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26953 27113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
26954 27114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock,
26955 27115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
26956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- getpid()));
27116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetpid(0)));
26957 27117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26958 27118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock<=SHARED_LOCK );
26959 27119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock<=eFileLock ){
26960 27120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
26961 27121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -27378,11 +27538,11 @@
27378 27538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zLockFile = (char *)pFile->lockingContext;
27379 27539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
27380 27540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27381 27541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
27382 27542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("UNLOCK %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock,
27383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->eFileLock, getpid()));
27543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->eFileLock, osGetpid(0)));
27384 27544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock<=SHARED_LOCK );
27385 27545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27386 27546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no-op if possible */
27387 27547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock==eFileLock ){
27388 27548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -27441,14 +27601,13 @@
27441 27601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a single exclusive lock. In other words, SHARED, RESERVED, and
27442 27602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PENDING locks are the same thing as an EXCLUSIVE lock. SQLite
27443 27603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** still works when you do this, but concurrency is reduced since
27444 27604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** only a single process can be reading the database at a time.
27445 27605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
27446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off or if
27447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** compiling for VXWORKS.
27606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off
27448 27607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
27608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE
27450 27609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27451 27610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27452 27611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Retry flock() calls that fail with EINTR
27453 27612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27454 27613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef EINTR
@@ -27597,11 +27756,11 @@
27597 27756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int flockUnlock(sqlite3_file *id, int eFileLock) {
27598 27757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27599 27758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27600 27759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
27601 27760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("UNLOCK %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock,
27602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->eFileLock, getpid()));
27761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->eFileLock, osGetpid(0)));
27603 27762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock<=SHARED_LOCK );
27604 27763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27605 27764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no-op if possible */
27606 27765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock==eFileLock ){
27607 27766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -27658,11 +27817,11 @@
27658 27817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine checks if there is a RESERVED lock held on the specified
27659 27818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file by this or any other process. If such a lock is held, set *pResOut
27660 27819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to a non-zero value otherwise *pResOut is set to zero. The return value
27661 27820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27662 27821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int semCheckReservedLock(sqlite3_file *id, int *pResOut) {
27822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int semXCheckReservedLock(sqlite3_file *id, int *pResOut) {
27664 27823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
27665 27824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int reserved = 0;
27666 27825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27667 27826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27668 27827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
@@ -27725,11 +27884,11 @@
27725 27884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** access the file.
27726 27885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
27727 27886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine will only increase a lock. Use the sqlite3OsUnlock()
27728 27887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine to lower a locking level.
27729 27888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int semLock(sqlite3_file *id, int eFileLock) {
27889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int semXLock(sqlite3_file *id, int eFileLock) {
27731 27890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27732 27891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sem_t *pSem = pFile->pInode->pSem;
27733 27892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
27734 27893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27735 27894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if we already have a lock, it is exclusive.
@@ -27758,18 +27917,18 @@
27758 27917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** must be either NO_LOCK or SHARED_LOCK.
27759 27918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
27760 27919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the locking level of the file descriptor is already at or below
27761 27920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the requested locking level, this routine is a no-op.
27762 27921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int semUnlock(sqlite3_file *id, int eFileLock) {
27922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int semXUnlock(sqlite3_file *id, int eFileLock) {
27764 27923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27765 27924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sem_t *pSem = pFile->pInode->pSem;
27766 27925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27767 27926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
27768 27927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSem );
27769 27928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("UNLOCK %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock,
27770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->eFileLock, getpid()));
27929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->eFileLock, osGetpid(0)));
27771 27930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock<=SHARED_LOCK );
27772 27931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27773 27932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no-op if possible */
27774 27933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock==eFileLock ){
27775 27934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -27795,14 +27954,14 @@
27795 27954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27796 27955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27797 27956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27798 27957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Close a file.
27799 27958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int semClose(sqlite3_file *id) {
27959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int semXClose(sqlite3_file *id) {
27801 27960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( id ){
27802 27961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- semUnlock(id, NO_LOCK);
27962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ semXUnlock(id, NO_LOCK);
27804 27963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
27805 27964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex();
27806 27965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releaseInodeInfo(pFile);
27807 27966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixLeaveMutex();
27808 27967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
closeUnixFile(id);
@@ -27979,11 +28138,11 @@
27979 28138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27980 28139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27981 28140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
27982 28141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h,
27983 28142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
azFileLock(eFileLock), azFileLock(pFile->eFileLock),
27984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
28143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ azFileLock(pInode->eFileLock), pInode->nShared , osGetpid(0)));
27985 28144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27986 28145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is already a lock of this type or more restrictive on the
27987 28146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unixFile, do nothing. Don't use the afp_end_lock: exit path, as
27988 28147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unixEnterMutex() hasn't been called yet.
27989 28148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -28165,11 +28324,11 @@
28165 28324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
28166 28325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28167 28326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
28168 28327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock,
28169 28328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
28170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- getpid()));
28329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetpid(0)));
28171 28330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28172 28331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock<=SHARED_LOCK );
28173 28332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock<=eFileLock ){
28174 28333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
28175 28334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -28990,10 +29149,14 @@
28990 29149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Information and control of an open file handle.
28991 29150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
28992 29151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixFileControl(sqlite3_file *id, int op, void *pArg){
28993 29152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
28994 29153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
29154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_WAL_BLOCK: {
29155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags |= UNIXFILE_BLOCK;
29156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
29157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28995 29158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LOCKSTATE: {
28996 29159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*(int*)pArg = pFile->eFileLock;
28997 29160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
28998 29161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28999 29162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LAST_ERRNO: {
@@ -29204,11 +29367,13 @@
29204 29367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
29205 29368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function should not be called directly by other code in this file.
29206 29369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Instead, it should be called via macro osGetpagesize().
29207 29370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29208 29371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixGetpagesize(void){
29209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(_BSD_SOURCE)
29372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS
29373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1024;
29374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(_BSD_SOURCE)
29210 29375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return getpagesize();
29211 29376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
29212 29377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (int)sysconf(_SC_PAGESIZE);
29213 29378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29214 29379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -29297,37 +29462,42 @@
29297 29462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
29298 29463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking
29299 29464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** otherwise.
29300 29465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29301 29466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixShmSystemLock(
29302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */
29467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unixFile *pFile, /* Open connection to the WAL file */
29303 29468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lockType, /* F_UNLCK, F_RDLCK, or F_WRLCK */
29304 29469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ofst, /* First byte of the locking range */
29305 29470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n /* Number of bytes to lock */
29306 29471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
29307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct flock f; /* The posix advisory locking structure */
29308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK; /* Result code form fcntl() */
29472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unixShmNode *pShmNode; /* Apply locks to this open shared-memory segment */
29473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct flock f; /* The posix advisory locking structure */
29474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Result code form fcntl() */
29309 29475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29310 29476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Access to the unixShmNode object is serialized by the caller */
29477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pShmNode = pFile->pInode->pShmNode;
29311 29478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
29312 29479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29313 29480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shared locks never span more than one byte */
29314 29481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n==1 || lockType!=F_RDLCK );
29315 29482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29316 29483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Locks are within range */
29317 29484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n>=1 && n<SQLITE_SHM_NLOCK );
29318 29485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29319 29486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pShmNode->h>=0 ){
29487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int lkType;
29320 29488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize the locking parameters */
29321 29489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&f, 0, sizeof(f));
29322 29490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f.l_type = lockType;
29323 29491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f.l_whence = SEEK_SET;
29324 29492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f.l_start = ofst;
29325 29493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f.l_len = n;
29326 29494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = osFcntl(pShmNode->h, F_SETLK, &f);
29495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lkType = (pFile->ctrlFlags & UNIXFILE_BLOCK)!=0 ? F_SETLKW : F_SETLK;
29496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = osFcntl(pShmNode->h, lkType, &f);
29328 29497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY;
29498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags &= ~UNIXFILE_BLOCK;
29329 29499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29330 29500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29331 29501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Update the global lock state and do debug tracing */
29332 29502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
29333 29503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ u16 mask;
@@ -29533,17 +29703,17 @@
29533 29703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29534 29704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if another process is holding the dead-man switch.
29535 29705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If not, truncate the file to zero length.
29536 29706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29537 29707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
29538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
29708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
29539 29709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( robust_ftruncate(pShmNode->h, 0) ){
29540 29710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
29541 29711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29542 29712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29543 29713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1);
29714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1);
29545 29715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29546 29716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) goto shm_open_err;
29547 29717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29548 29718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29549 29719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29771,11 +29941,11 @@
29771 29941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
allMask |= pX->sharedMask;
29772 29942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29773 29943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29774 29944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Unlock the system-level locks */
29775 29945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (mask & allMask)==0 ){
29776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
29946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = unixShmSystemLock(pDbFd, F_UNLCK, ofst+UNIX_SHM_BASE, n);
29777 29947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29778 29948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
29779 29949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29780 29950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29781 29951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Undo the local locks */
@@ -29799,11 +29969,11 @@
29799 29969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29800 29970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29801 29971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Get shared locks at the system level, if necessary */
29802 29972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29803 29973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (allShared & mask)==0 ){
29804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
29974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = unixShmSystemLock(pDbFd, F_RDLCK, ofst+UNIX_SHM_BASE, n);
29805 29975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29806 29976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
29807 29977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29808 29978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29809 29979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29824,20 +29994,20 @@
29824 29994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29825 29995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Get the exclusive locks at the system level. Then if successful
29826 29996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** also mark the local connection as being locked.
29827 29997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29828 29998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n);
29999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = unixShmSystemLock(pDbFd, F_WRLCK, ofst+UNIX_SHM_BASE, n);
29830 30000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29831 30001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (p->sharedMask & mask)==0 );
29832 30002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->exclMask |= mask;
29833 30003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29834 30004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29835 30005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29836 30006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(pShmNode->mutex);
29837 30007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n",
29838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->id, getpid(), p->sharedMask, p->exclMask));
30008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->id, osGetpid(0), p->sharedMask, p->exclMask));
29839 30009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29840 30010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29841 30011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29842 30012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
29843 30013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implement a memory barrier or memory fence on shared memory.
@@ -30236,11 +30406,11 @@
30236 30406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dotlockUnlock, /* xUnlock method */
30237 30407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dotlockCheckReservedLock, /* xCheckReservedLock method */
30238 30408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0 /* xShmMap method */
30239 30409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
30240 30410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
30411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE
30242 30412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IOMETHODS(
30243 30413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flockIoFinder, /* Finder function name */
30244 30414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flockIoMethods, /* sqlite3_io_methods object name */
30245 30415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1, /* shared memory is disabled */
30246 30416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flockClose, /* xClose method */
@@ -30254,14 +30424,14 @@
30254 30424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
30255 30425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IOMETHODS(
30256 30426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
semIoFinder, /* Finder function name */
30257 30427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
semIoMethods, /* sqlite3_io_methods object name */
30258 30428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1, /* shared memory is disabled */
30259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- semClose, /* xClose method */
30260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- semLock, /* xLock method */
30261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- semUnlock, /* xUnlock method */
30262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- semCheckReservedLock, /* xCheckReservedLock method */
30429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ semXClose, /* xClose method */
30430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ semXLock, /* xLock method */
30431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ semXUnlock, /* xUnlock method */
30432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ semXCheckReservedLock, /* xCheckReservedLock method */
30263 30433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0 /* xShmMap method */
30264 30434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)
30265 30435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
30266 30436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30267 30437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
@@ -30381,19 +30551,17 @@
30381 30551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const sqlite3_io_methods
30382 30552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
30383 30553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30384 30554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
30385 30555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE
30387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
30388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This "finder" function attempts to determine the best locking strategy
30389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for the database file "filePath". It then returns the sqlite3_io_methods
30390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** object that implements that strategy.
30391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
30392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This is for VXWorks only.
30556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS
30557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
30558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This "finder" function for VxWorks checks to see if posix advisory
30559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** locking works. If it does, then that is what is used. If it does not
30560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** work, then fallback to named semaphore locking.
30393 30561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const sqlite3_io_methods *autolockIoFinderImpl(
30562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const sqlite3_io_methods *vxworksIoFinderImpl(
30395 30563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *filePath, /* name of the database file */
30396 30564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pNew /* the open file object */
30397 30565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
30398 30566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct flock lockInfo;
30399 30567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -30415,13 +30583,13 @@
30415 30583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
30416 30584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return &semIoMethods;
30417 30585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30418 30586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30419 30587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const sqlite3_io_methods
30420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
30588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(*const vxworksIoFinder)(const char*,unixFile*) = vxworksIoFinderImpl;
30421 30589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
30590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* OS_VXWORKS */
30423 30591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30424 30592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
30425 30593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An abstract type for a pointer to an IO method finder function:
30426 30594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30427 30595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
@@ -30930,12 +31098,12 @@
30930 31098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Detect a pid change and reset the PRNG. There is a race condition
30931 31099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** here such that two or more threads all trying to open databases at
30932 31100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same instant might all reset the PRNG. But multiple resets
30933 31101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are harmless.
30934 31102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( randomnessPid!=getpid() ){
30936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- randomnessPid = getpid();
31103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( randomnessPid!=osGetpid(0) ){
31104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ randomnessPid = osGetpid(0);
30937 31105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_randomness(0,0);
30938 31106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30939 31107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30940 31108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(p, 0, sizeof(unixFile));
30941 31109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -31322,11 +31490,11 @@
31322 31490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When testing, initializing zBuf[] to zero is all we do. That means
31323 31491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that we always use the same random number sequence. This makes the
31324 31492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tests repeatable.
31325 31493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31326 31494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(zBuf, 0, nBuf);
31327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- randomnessPid = getpid();
31495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ randomnessPid = osGetpid(0);
31328 31496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_TEST)
31329 31497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
31330 31498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd, got;
31331 31499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd = robust_open("/dev/urandom", O_RDONLY, 0);
31332 31500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd<0 ){
@@ -31643,11 +31811,11 @@
31643 31811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
31644 31812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# ifdef _CS_DARWIN_USER_TEMP_DIR
31645 31813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
31646 31814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){
31647 31815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("GETLOCKPATH failed %s errno=%d pid=%d\n",
31648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lPath, errno, getpid()));
31816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lPath, errno, osGetpid(0)));
31649 31817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_LOCK;
31650 31818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31651 31819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
len = strlcat(lPath, "sqliteplocks", maxLen);
31652 31820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31653 31821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# else
@@ -31665,11 +31833,11 @@
31665 31833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char c = dbPath[i];
31666 31834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lPath[i+len] = (c=='/')?'_':c;
31667 31835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31668 31836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lPath[i+len]='\0';
31669 31837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
strlcat(lPath, ":auto:", maxLen);
31670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("GETLOCKPATH proxy lock path=%s pid=%d\n", lPath, getpid()));
31838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("GETLOCKPATH proxy lock path=%s pid=%d\n", lPath, osGetpid(0)));
31671 31839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
31672 31840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31673 31841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31674 31842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31675 31843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Creates the lock file and any missing directories in lockPath
@@ -31692,20 +31860,20 @@
31692 31860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( osMkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){
31693 31861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int err=errno;
31694 31862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( err!=EEXIST ) {
31695 31863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("CREATELOCKPATH FAILED creating %s, "
31696 31864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"'%s' proxy lock path=%s pid=%d\n",
31697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- buf, strerror(err), lockPath, getpid()));
31865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ buf, strerror(err), lockPath, osGetpid(0)));
31698 31866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return err;
31699 31867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31700 31868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31701 31869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31702 31870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
start=i+1;
31703 31871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31704 31872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
buf[i] = lockPath[i];
31705 31873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("CREATELOCKPATH proxy lock path=%s pid=%d\n", lockPath, getpid()));
31874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("CREATELOCKPATH proxy lock path=%s pid=%d\n", lockPath, osGetpid(0)));
31707 31875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
31708 31876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31709 31877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31710 31878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31711 31879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Create a new VFS file descriptor (stored in memory obtained from
@@ -32006,11 +32174,12 @@
32006 32174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int readLen = 0;
32007 32175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tryOldLockPath = 0;
32008 32176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int forceNewLockPath = 0;
32009 32177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32010 32178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("TAKECONCH %d for %s pid=%d\n", conchFile->h,
32011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()));
32179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"),
32180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetpid(0)));
32012 32181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32013 32182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = proxyGetHostID(myHostID, &pError);
32014 32183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (rc&0xff)==SQLITE_IOERR ){
32015 32184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
storeLastErrno(pFile, pError);
32016 32185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto end_takeconch;
@@ -32216,11 +32385,11 @@
32216 32385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32217 32386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx = (proxyLockingContext *)pFile->lockingContext;
32218 32387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
conchFile = pCtx->conchFile;
32219 32388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("RELEASECONCH %d for %s pid=%d\n", conchFile->h,
32220 32389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"),
32221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- getpid()));
32390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetpid(0)));
32222 32391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCtx->conchHeld>0 ){
32223 32392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
32224 32393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32225 32394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx->conchHeld = 0;
32226 32395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("RELEASECONCH %d %s\n", conchFile->h,
@@ -32358,11 +32527,11 @@
32358 32527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
32359 32528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lockPath=(char *)path;
32360 32529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32361 32530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32362 32531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("TRANSPROXY %d for %s pid=%d\n", pFile->h,
32363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (lockPath ? lockPath : ":auto:"), getpid()));
32532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (lockPath ? lockPath : ":auto:"), osGetpid(0)));
32364 32533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32365 32534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx = sqlite3_malloc( sizeof(*pCtx) );
32366 32535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCtx==0 ){
32367 32536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
32368 32537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -32699,26 +32868,28 @@
32699 32868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Note that the sqlite3_vfs.pNext field of the VFS object is modified
32700 32869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by the SQLite core when the VFS is registered. So the following
32701 32870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** array cannot be const.
32702 32871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32703 32872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_vfs aVfs[] = {
32704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE && (OS_VXWORKS || defined(__APPLE__))
32873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
32705 32874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix", autolockIoFinder ),
32875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif OS_VXWORKS
32876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNIXVFS("unix", vxworksIoFinder ),
32706 32877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
32707 32878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix", posixIoFinder ),
32708 32879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
32709 32880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-none", nolockIoFinder ),
32710 32881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-dotfile", dotlockIoFinder ),
32711 32882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-excl", posixIoFinder ),
32712 32883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
32713 32884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-namedsem", semIoFinder ),
32714 32885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
32715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE
32886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS
32716 32887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-posix", posixIoFinder ),
32717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !OS_VXWORKS
32888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
32889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE
32718 32890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-flock", flockIoFinder ),
32719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
32720 32891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
32721 32892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
32722 32893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-afp", afpIoFinder ),
32723 32894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-nfs", nfsIoFinder ),
32724 32895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNIXVFS("unix-proxy", proxyIoFinder ),
@@ -39072,16 +39243,24 @@
39072 39243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pcache2.xUnpin(p->pCache->pCache, p->pPage, 0);
39073 39244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39074 39245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39075 39246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
39076 39247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
39077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Compute the number of pages of cache requested.
39248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Compute the number of pages of cache requested. p->szCache is the
39249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cache size requested by the "PRAGMA cache_size" statement.
39250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
39251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
39078 39252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
39079 39253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int numberOfCachePages(PCache *p){
39080 39254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->szCache>=0 ){
39255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-42059-47211 If the argument N is positive then the
39256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** suggested cache size is set to N. */
39081 39257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->szCache;
39082 39258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
39259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-61436-13639 If the argument N is negative, then
39260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of cache pages is adjusted to use approximately abs(N*1024)
39261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bytes of memory. */
39083 39262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
39084 39263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39085 39264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39086 39265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
39087 39266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*************************************************** General Interfaces ******
@@ -39817,20 +39996,20 @@
39817 39996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in pcache1 need to be protected via mutex.
39818 39997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
39819 39998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void *pcache1Alloc(int nByte){
39820 39999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p = 0;
39821 40000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
39822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
39823 40001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nByte<=pcache1.szSlot ){
39824 40002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(pcache1.mutex);
39825 40003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = (PgHdr1 *)pcache1.pFree;
39826 40004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
39827 40005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pFree = pcache1.pFree->pNext;
39828 40006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.nFreeSlot--;
39829 40007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
39830 40008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pcache1.nFreeSlot>=0 );
39831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
40009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
40010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_PAGECACHE_USED, 1);
39832 40011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39833 40012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(pcache1.mutex);
39834 40013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39835 40014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 ){
39836 40015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool. Get
@@ -39839,11 +40018,12 @@
39839 40018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3Malloc(nByte);
39840 40019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS
39841 40020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
39842 40021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sz = sqlite3MallocSize(p);
39843 40022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(pcache1.mutex);
39844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
40023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
40024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusUp(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
39845 40025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(pcache1.mutex);
39846 40026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39847 40027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
39848 40028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
39849 40029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -39857,11 +40037,11 @@
39857 40037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFreed = 0;
39858 40038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 ) return 0;
39859 40039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p>=pcache1.pStart && p<pcache1.pEnd ){
39860 40040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgFreeslot *pSlot;
39861 40041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(pcache1.mutex);
39862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
40042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_PAGECACHE_USED, 1);
39863 40043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSlot = (PgFreeslot*)p;
39864 40044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSlot->pNext = pcache1.pFree;
39865 40045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pFree = pSlot;
39866 40046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.nFreeSlot++;
39867 40047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
@@ -39871,11 +40051,11 @@
39871 40051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
39872 40052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
39873 40053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFreed = sqlite3MallocSize(p);
39874 40054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS
39875 40055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(pcache1.mutex);
39876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -nFreed);
40056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusDown(SQLITE_STATUS_PAGECACHE_OVERFLOW, nFreed);
39877 40057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(pcache1.mutex);
39878 40058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
39879 40059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
39880 40060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39881 40061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nFreed;
@@ -40607,10 +40787,18 @@
40607 40787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
40608 40788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
40609 40789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the size of the header on each page of this PCACHE implementation.
40610 40790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
40611 40791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return ROUND8(sizeof(PgHdr1)); }
40792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
40793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
40794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the global mutex used by this PCACHE implementation. The
40795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_status() routine needs access to this mutex.
40796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
40797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void){
40798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pcache1.mutex;
40799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
40612 40800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
40613 40801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
40614 40802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
40615 40803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called to free superfluous dynamically allocated memory
40616 40804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** held by the pager system. Memory in use by any SQLite pager allocated
@@ -49380,13 +49568,14 @@
49380 49568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->exclusiveMode ) return;
49381 49569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
49382 49570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED);
49383 49571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx)));
49384 49572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int walLockExclusive(Wal *pWal, int lockIdx, int n){
49573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int walLockExclusive(Wal *pWal, int lockIdx, int n, int fBlock){
49386 49574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
49387 49575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->exclusiveMode ) return SQLITE_OK;
49576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fBlock ) sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_WAL_BLOCK, 0);
49388 49577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
49389 49578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE);
49390 49579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal,
49391 49580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
walLockName(lockIdx), n, rc ? "failed" : "ok"));
49392 49581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
@@ -49668,11 +49857,11 @@
49668 49857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 );
49669 49858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
49670 49859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pWal->writeLock );
49671 49860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
49672 49861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLock = SQLITE_SHM_NLOCK - iLock;
49673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, iLock, nLock);
49862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, iLock, nLock, 0);
49674 49863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
49675 49864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
49676 49865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49677 49866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WALTRACE(("WAL%p: recovery begin...\n", pWal));
49678 49867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -50202,11 +50391,11 @@
50202 50391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lockIdx, /* Offset of first byte to lock */
50203 50392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n /* Number of bytes to lock */
50204 50393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
50205 50394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
50206 50395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do {
50207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, lockIdx, n);
50396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, lockIdx, n, 0);
50208 50397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) );
50209 50398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
50210 50399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50211 50400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50212 50401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -50635,11 +50824,11 @@
50635 50824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->readOnly & WAL_SHM_RDONLY ){
50636 50825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){
50637 50826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
walUnlockShared(pWal, WAL_WRITE_LOCK);
50638 50827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_READONLY_RECOVERY;
50639 50828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){
50829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1, 1)) ){
50641 50830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal->writeLock = 1;
50642 50831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){
50643 50832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
badHdr = walIndexTryHdr(pWal, pChanged);
50644 50833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( badHdr ){
50645 50834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the wal-index header is still malformed even while holding
@@ -50841,11 +51030,11 @@
50841 51030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
50842 51031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pWal->readOnly & WAL_SHM_RDONLY)==0
50843 51032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (mxReadMark<pWal->hdr.mxFrame || mxI==0)
50844 51033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
50845 51034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<WAL_NREADER; i++){
50846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
51035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1, 0);
50847 51036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
50848 51037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame;
50849 51038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxI = i;
50850 51039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
50851 51040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -51097,11 +51286,11 @@
51097 51286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51098 51287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51099 51288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Only one writer allowed at a time. Get the write lock. Return
51100 51289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_BUSY if unable.
51101 51290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
51102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1);
51291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1, 0);
51103 51292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
51104 51293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
51105 51294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51106 51295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal->writeLock = 1;
51107 51296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -51242,11 +51431,11 @@
51242 51431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
volatile WalCkptInfo *pInfo = walCkptInfo(pWal);
51243 51432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pInfo->nBackfill==pWal->hdr.mxFrame );
51244 51433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pInfo->nBackfill>0 ){
51245 51434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 salt1;
51246 51435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_randomness(4, &salt1);
51247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
51436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1, 0);
51248 51437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
51249 51438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If all readers are using WAL_READ_LOCK(0) (in other words if no
51250 51439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** readers are currently using the WAL), then the transactions
51251 51440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** frames will overwrite the start of the existing log. Update the
51252 51441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** wal-index header to reflect this.
@@ -51567,11 +51756,11 @@
51567 51756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->readOnly ) return SQLITE_READONLY;
51568 51757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WALTRACE(("WAL%p: checkpoint begins\n", pWal));
51569 51758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51570 51759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* IMPLEMENTATION-OF: R-62028-47212 All calls obtain an exclusive
51571 51760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "checkpoint" lock on the database file. */
51572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1);
51761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1, 0);
51573 51762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
51574 51763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* EVIDENCE-OF: R-10421-19736 If any other process is running a
51575 51764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** checkpoint operation at the same time, the lock cannot be obtained and
51576 51765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_BUSY is returned.
51577 51766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** EVIDENCE-OF: R-53820-33897 Even if there is a busy-handler configured,
@@ -52569,10 +52758,11 @@
52569 52758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52570 52759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
52571 52760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Exit the recursive mutex on a Btree.
52572 52761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
52573 52762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
52763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(p->db->mutex) );
52574 52764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->sharable ){
52575 52765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->wantToLock>0 );
52576 52766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->wantToLock--;
52577 52767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->wantToLock==0 ){
52578 52768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unlockBtreeMutex(p);
@@ -54747,12 +54937,12 @@
54747 54937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
54748 54938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following asserts make sure that structures used by the btree are
54749 54939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the right size. This is to guard against size changes that result
54750 54940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when compiling on a different architecture.
54751 54941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
54752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sizeof(i64)==8 || sizeof(i64)==4 );
54753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sizeof(u64)==8 || sizeof(u64)==4 );
54942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sizeof(i64)==8 );
54943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sizeof(u64)==8 );
54754 54944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sizeof(u32)==4 );
54755 54945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sizeof(u16)==2 );
54756 54946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sizeof(Pgno)==4 );
54757 54947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54758 54948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt = sqlite3MallocZero( sizeof(*pBt) );
@@ -60210,11 +60400,12 @@
60210 60400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the previous call, as the overflow cell data will have been
60211 60401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** copied either into the body of a database page or into the new
60212 60402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pSpace buffer passed to the latter call to balance_nonroot().
60213 60403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60214 60404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
60215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1, pCur->hints);
60405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1,
60406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->hints&BTREE_BULKLOAD);
60216 60407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFree ){
60217 60408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If pFree is not NULL, it points to the pSpace buffer used
60218 60409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by a previous call to balance_nonroot(). Its contents are
60219 60410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** now stored either on real database pages or within the
60220 60411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** new pSpace buffer, so it may be safely freed here. */
@@ -61873,17 +62064,26 @@
61873 62064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt->btsFlags &= ~BTS_NO_WAL;
61874 62065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
61875 62066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61876 62067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61877 62068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
61878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set the mask of hint flags for cursor pCsr. Currently the only valid
61879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** values are 0 and BTREE_BULKLOAD.
62069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set the mask of hint flags for cursor pCsr.
61880 62070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61881 62071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *pCsr, unsigned int mask){
61882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( mask==BTREE_BULKLOAD || mask==0 );
62072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( mask==BTREE_BULKLOAD || mask==BTREE_SEEK_EQ || mask==0 );
61883 62073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->hints = mask;
61884 62074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
62077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
62078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the cursor has a hint specified. This routine is
62079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only used from within assert() statements
62080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
62081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3BtreeCursorHasHint(BtCursor *pCsr, unsigned int mask){
62082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (pCsr->hints & mask)!=0;
62083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
62084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
61885 62085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61886 62086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
61887 62087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the given Btree is read-only.
61888 62088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61889 62089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
@@ -63773,11 +63973,11 @@
63773 63973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by calling sqlite3ValueNew().
63774 63974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
63775 63975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Otherwise, if the second argument is non-zero, then this function is
63776 63976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** being called indirectly by sqlite3Stat4ProbeSetValue(). If it has not
63777 63977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** already been allocated, allocate the UnpackedRecord structure that
63778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that function will return to its caller here. Then return a pointer
63978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that function will return to its caller here. Then return a pointer to
63779 63979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an sqlite3_value within the UnpackedRecord.a[] array.
63780 63980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
63781 63981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
63782 63982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
63783 63983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
@@ -63817,10 +64017,117 @@
63817 64017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(p);
63818 64018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* defined(SQLITE_ENABLE_STAT3_OR_STAT4) */
63819 64019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3ValueNew(db);
63820 64020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63821 64021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
64023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The expression object indicated by the second argument is guaranteed
64024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be a scalar SQL function. If
64025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
64026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * all function arguments are SQL literals,
64027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * the SQLITE_FUNC_CONSTANT function flag is set, and
64028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * the SQLITE_FUNC_NEEDCOLL function flag is not set,
64029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
64030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then this routine attempts to invoke the SQL function. Assuming no
64031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** error occurs, output parameter (*ppVal) is set to point to a value
64032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** object containing the result before returning SQLITE_OK.
64033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
64034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Affinity aff is applied to the result of the function before returning.
64035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the result is a text value, the sqlite3_value object uses encoding
64036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** enc.
64037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
64038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the conditions above are not met, this function returns SQLITE_OK
64039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and sets (*ppVal) to NULL. Or, if an error occurs, (*ppVal) is set to
64040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NULL and an SQLite error code returned.
64041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
64042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
64043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int valueFromFunction(
64044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db, /* The database connection */
64045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p, /* The expression to evaluate */
64046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 enc, /* Encoding to use */
64047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 aff, /* Affinity to use */
64048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **ppVal, /* Write the new value here */
64049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct ValueNewStat4Ctx *pCtx /* Second argument for valueNew() */
64050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
64051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context ctx; /* Context object for function invocation */
64052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal = 0; /* Function arguments */
64053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal = 0; /* Size of apVal[] array */
64054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDef *pFunc = 0; /* Function definition */
64055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pVal = 0; /* New value */
64056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
64057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nName; /* Size of function name in bytes */
64058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pList = 0; /* Function arguments */
64059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Iterator variable */
64060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCtx!=0 );
64062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (p->flags & EP_TokenOnly)==0 );
64063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList = p->x.pList;
64064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList ) nVal = pList->nExpr;
64065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nName = sqlite3Strlen30(p->u.zToken);
64066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFunc = sqlite3FindFunction(db, p->u.zToken, nName, nVal, enc, 0);
64067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFunc );
64068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pFunc->funcFlags & SQLITE_FUNC_CONSTANT)==0
64069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)
64070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
64071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
64072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList ){
64075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ apVal = (sqlite3_value**)sqlite3DbMallocZero(db, sizeof(apVal[0]) * nVal);
64076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( apVal==0 ){
64077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
64078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto value_from_function_out;
64079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nVal; i++){
64081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3ValueFromExpr(db, pList->a[i].pExpr, enc, aff, &apVal[i]);
64082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( apVal[i]==0 || rc!=SQLITE_OK ) goto value_from_function_out;
64083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = valueNew(db, pCtx);
64087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVal==0 ){
64088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
64089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto value_from_function_out;
64090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCtx->pParse->rc==SQLITE_OK );
64093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&ctx, 0, sizeof(ctx));
64094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ctx.pOut = pVal;
64095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ctx.pFunc = pFunc;
64096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFunc->xFunc(&ctx, nVal, apVal);
64097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ctx.isError ){
64098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = ctx.isError;
64099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(pCtx->pParse, "%s", sqlite3_value_text(pVal));
64100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
64101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueApplyAffinity(pVal, aff, SQLITE_UTF8);
64102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK );
64103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeChangeEncoding(pVal, enc);
64104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal) ){
64105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_TOOBIG;
64106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCtx->pParse->nErr++;
64107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCtx->pParse->rc = rc;
64110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ value_from_function_out:
64112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
64113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = 0;
64114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( apVal ){
64116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nVal; i++){
64117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueFree(apVal[i]);
64118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, apVal);
64120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppVal = pVal;
64123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
64124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
64126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define valueFromFunction(a,b,c,d,e,f) SQLITE_OK
64127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* defined(SQLITE_ENABLE_STAT3_OR_STAT4) */
64128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
63822 64129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
63823 64130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Extract a value from the supplied expression in the manner described
63824 64131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** above sqlite3ValueFromExpr(). Allocate the sqlite3_value object
63825 64132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using valueNew().
63826 64133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -63848,10 +64155,16 @@
63848 64155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppVal = 0;
63849 64156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
63850 64157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63851 64158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (op = pExpr->op)==TK_UPLUS ) pExpr = pExpr->pLeft;
63852 64159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
64160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Compressed expressions only appear when parsing the DEFAULT clause
64162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on a table column definition, and hence only when pCtx==0. This
64163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** check ensures that an EP_TokenOnly expression is never passed down
64164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into valueFromFunction(). */
64165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pExpr->flags & EP_TokenOnly)==0 || pCtx==0 );
63853 64166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63854 64167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_CAST ){
63855 64168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aff = sqlite3AffinityType(pExpr->u.zToken,0);
63856 64169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = valueFromExpr(db, pExpr->pLeft, enc, aff, ppVal, pCtx);
63857 64170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( rc!=SQLITE_OK );
@@ -63924,10 +64237,16 @@
63924 64237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zVal[nVal]=='\'' );
63925 64238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
63926 64239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, SQLITE_DYNAMIC);
63927 64240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63928 64241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
64242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
64244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( op==TK_FUNCTION && pCtx!=0 ){
64245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = valueFromFunction(db, pExpr, enc, affinity, &pVal, pCtx);
64246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63929 64248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63930 64249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppVal = pVal;
63931 64250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
63932 64251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63933 64252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
no_mem:
@@ -65377,11 +65696,11 @@
65377 65696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65378 65697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65379 65698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
65380 65699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case P4_VTAB: {
65381 65700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
65382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
65701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(nTemp, zTemp, "vtab:%p", pVtab);
65383 65702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65384 65703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65385 65704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
65386 65705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case P4_INTARRAY: {
65387 65706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(nTemp, zTemp, "intarray");
@@ -66041,13 +66360,13 @@
66041 66360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66042 66361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
66043 66362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( pCx->pVtabCursor ){
66044 66363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
66045 66364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule = pVtabCursor->pVtab->pModule;
66046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 1;
66365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pVtabCursor->pVtab->nRef>0 );
66366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVtabCursor->pVtab->nRef--;
66047 66367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pModule->xClose(pVtabCursor);
66048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 0;
66049 66368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66050 66369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
66051 66370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66052 66371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66053 66372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -66402,11 +66721,11 @@
66402 66721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66403 66722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Delete the master journal file. This commits the transaction. After
66404 66723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** doing this the directory is synced again before any individual
66405 66724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** transaction files are deleted.
66406 66725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3OsDelete(pVfs, zMaster, 1);
66726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsDelete(pVfs, zMaster, needSync);
66408 66727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zMaster);
66409 66728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMaster = 0;
66410 66729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
66411 66730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
66412 66731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -68615,10 +68934,14 @@
68615 68934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68616 68935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
68617 68936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3ValueText(pVal, SQLITE_UTF16LE);
68618 68937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68619 68938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_UTF16 */
68939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five
68940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating
68941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point number string BLOB NULL
68942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
68620 68943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
68621 68944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 aType[] = {
68622 68945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_BLOB, /* 0x00 */
68623 68946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_NULL, /* 0x01 */
68624 68947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_TEXT, /* 0x02 */
@@ -68811,11 +69134,11 @@
68811 69134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68812 69135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
68813 69136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx->isError = errCode;
68814 69137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCtx->fErrorOrAux = 1;
68815 69138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
68816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCtx->pVdbe->rcApp = errCode;
69139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode;
68817 69140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
68818 69141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCtx->pOut->flags & MEM_Null ){
68819 69142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1,
68820 69143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_UTF8, SQLITE_STATIC);
68821 69144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -69074,20 +69397,30 @@
69074 69397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p && p->pFunc );
69075 69398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->pOut->db;
69076 69399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69077 69400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69078 69401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return the current time for a statement
69402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the current time for a statement. If the current time
69403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is requested more than once within the same run of a single prepared
69404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement, the exact same time is returned for each invocation regardless
69405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the amount of time that elapses between invocations. In other words,
69406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the time returned is always the time of the first call.
69080 69407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69081 69408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
69082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v = p->pVdbe;
69083 69409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
69084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( v->iCurrentTime==0 ){
69085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, &v->iCurrentTime);
69086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) v->iCurrentTime = 0;
69410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_ENABLE_STAT3_OR_STAT4
69411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *piTime = &p->pVdbe->iCurrentTime;
69412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pVdbe!=0 );
69413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
69414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iTime = 0;
69415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *piTime = p->pVdbe!=0 ? &p->pVdbe->iCurrentTime : &iTime;
69416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
69417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *piTime==0 ){
69418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, piTime);
69419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ) *piTime = 0;
69087 69420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return v->iCurrentTime;
69421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return *piTime;
69089 69422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69090 69423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69091 69424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69092 69425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following is the implementation of an SQL function that always
69093 69426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fails with an error message stating that the function is used in the
@@ -69153,10 +69486,15 @@
69153 69486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69154 69487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
69155 69488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AuxData *pAuxData;
69156 69489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69157 69490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
69491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_STAT3_OR_STAT4
69492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCtx->pVdbe==0 ) return 0;
69493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
69494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCtx->pVdbe!=0 );
69495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
69158 69496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
69159 69497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break;
69160 69498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69161 69499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69162 69500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (pAuxData ? pAuxData->pAux : 0);
@@ -69176,10 +69514,15 @@
69176 69514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AuxData *pAuxData;
69177 69515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *pVdbe = pCtx->pVdbe;
69178 69516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69179 69517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
69180 69518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iArg<0 ) goto failed;
69519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
69520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVdbe==0 ) goto failed;
69521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
69522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pVdbe!=0 );
69523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
69181 69524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69182 69525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
69183 69526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break;
69184 69527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69185 69528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAuxData==0 ){
@@ -71290,11 +71633,11 @@
71290 71633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71291 71634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: String8 * P2 * P4 *
71292 71635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: r[P2]='P4'
71293 71636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71294 71637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 points to a nul terminated UTF-8 string. This opcode is transformed
71295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** into a String before it is executed for the first time. During
71638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into a String opcode before it is executed for the first time. During
71296 71639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this transformation, the length of string P4 is computed and stored
71297 71640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as the P1 parameter.
71298 71641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71299 71642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_String8: { /* same as TK_STRING, out2-prerelease */
71300 71643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4.z!=0 );
@@ -71322,22 +71665,34 @@
71322 71665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto too_big;
71323 71666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71324 71667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fall through to the next case, OP_String */
71325 71668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71326 71669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: String P1 P2 * P4 *
71670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: String P1 P2 P3 P4 P5
71328 71671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: r[P2]='P4' (len=P1)
71329 71672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71330 71673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The string value P4 of length P1 (bytes) is stored in register P2.
71674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If P5!=0 and the content of register P3 is greater than zero, then
71676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the datatype of the register P2 is converted to BLOB. The content is
71677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the same sequence of bytes, it is merely interpreted as a BLOB instead
71678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of a string, as if it had been CAST.
71331 71679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71332 71680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_String: { /* out2-prerelease */
71333 71681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4.z!=0 );
71334 71682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Str|MEM_Static|MEM_Term;
71335 71683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->z = pOp->p4.z;
71336 71684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->n = pOp->p1;
71337 71685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->enc = encoding;
71338 71686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UPDATE_MAX_BLOBSIZE(pOut);
71687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOp->p5 ){
71688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p3>0 );
71689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p3<=(p->nMem-p->nCursor) );
71690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn3 = &aMem[pOp->p3];
71691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIn3->flags & MEM_Int );
71692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIn3->u.i ) pOut->flags = MEM_Blob|MEM_Static|MEM_Term;
71693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71339 71694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
71340 71695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71341 71696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71342 71697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Null P1 P2 P3 * *
71343 71698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: r[P2..P3]=NULL
@@ -71780,11 +72135,11 @@
71780 72135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** max() aggregate will set to 1 if the current row is not the minimum or
71781 72136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** maximum. The P1 register is initialized to 0 by this instruction.
71782 72137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71783 72138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The interface used by the implementation of the aforementioned functions
71784 72139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to retrieve the collation sequence set by this opcode is not available
71785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** publicly, only to user functions defined in func.c.
72140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** publicly. Only built-in functions have access to this feature.
71786 72141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71787 72142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_CollSeq: {
71788 72143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_COLLSEQ );
71789 72144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p1 ){
71790 72145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetInt64(&aMem[pOp->p1], 0);
@@ -73325,11 +73680,16 @@
73325 73680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the value of this counter needs to be restored too. */
73326 73681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nStmtDefCons = db->nDeferredCons;
73327 73682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nStmtDefImmCons = db->nDeferredImmCons;
73328 73683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73329 73684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Gather the schema version number for checking */
73685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Gather the schema version number for checking:
73686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-32195-19465 The schema version is used by SQLite
73687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each time a query is executed to ensure that the internal cache of the
73688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** schema used when compiling the SQL query matches the schema of the
73689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database against which the compiled query is actually executed.
73690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
73331 73691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta);
73332 73692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGen = db->aDb[pOp->p1].pSchema->iGeneration;
73333 73693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
73334 73694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGen = iMeta = 0;
73335 73695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -73493,35 +73853,33 @@
73493 73853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cursors or a single read/write cursor but not both.
73494 73854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
73495 73855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also OpenRead.
73496 73856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73497 73857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_ReopenIdx: {
73498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCursor *pCur;
73499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
73500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->p5==0 );
73501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->p4type==P4_KEYINFO );
73502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCur = p->apCsr[pOp->p1];
73503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCur && pCur->pgnoRoot==(u32)pOp->p2 ){
73504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->iDb==pOp->p3 ); /* Guaranteed by the code generator */
73505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
73506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
73507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the cursor is not currently open or is open on a different
73508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** index, then fall through into OP_OpenRead to force a reopen */
73509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
73510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenRead:
73511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenWrite: {
73512 73858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nField;
73513 73859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
73514 73860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int p2;
73515 73861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb;
73516 73862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wrFlag;
73517 73863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *pX;
73518 73864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCur;
73519 73865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *pDb;
73520 73866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (pOp->p5&(OPFLAG_P2ISREG|OPFLAG_BULKCSR))==pOp->p5 );
73522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 );
73867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ );
73868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p4type==P4_KEYINFO );
73869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur = p->apCsr[pOp->p1];
73870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCur && pCur->pgnoRoot==(u32)pOp->p2 ){
73871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->iDb==pOp->p3 ); /* Guaranteed by the code generator */
73872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto open_cursor_set_hints;
73873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the cursor is not currently open or is open on a different
73875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index, then fall through into OP_OpenRead to force a reopen */
73876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenRead:
73877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenWrite:
73878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pOp->p5&(OPFLAG_P2ISREG|OPFLAG_BULKCSR|OPFLAG_SEEKEQ))==pOp->p5 );
73880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ );
73523 73881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->bIsReader );
73524 73882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx
73525 73883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->readOnly==0 );
73526 73884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73527 73885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->expired ){
@@ -73580,18 +73938,21 @@
73580 73938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->nullRow = 1;
73581 73939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->isOrdered = 1;
73582 73940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pgnoRoot = p2;
73583 73941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->pCursor);
73584 73942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pKeyInfo = pKeyInfo;
73585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( OPFLAG_BULKCSR==BTREE_BULKLOAD );
73586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3BtreeCursorHints(pCur->pCursor, (pOp->p5 & OPFLAG_BULKCSR));
73587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
73588 73943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the VdbeCursor.isTable variable. Previous versions of
73589 73944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite used to check if the root-page flags were sane at this point
73590 73945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and report database corruption if they were not, but this check has
73591 73946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** since moved into the btree layer. */
73592 73947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->isTable = pOp->p4type!=P4_KEYINFO;
73948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ open_cursor_set_hints:
73950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( OPFLAG_BULKCSR==BTREE_BULKLOAD );
73951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( OPFLAG_SEEKEQ==BTREE_SEEK_EQ );
73952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BtreeCursorHints(pCur->pCursor,
73953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pOp->p5 & (OPFLAG_BULKCSR|OPFLAG_SEEKEQ)));
73593 73954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
73594 73955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73595 73956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73596 73957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: OpenEphemeral P1 P2 * P4 P5
73597 73958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: nColumn=P2
@@ -73848,10 +74209,26 @@
73848 74209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
oc = pOp->opcode;
73849 74210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->nullRow = 0;
73850 74211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
73851 74212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->seekOp = pOp->opcode;
73852 74213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
74214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
74215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* For a cursor with the BTREE_SEEK_EQ hint, only the OP_SeekGE and
74216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** OP_SeekLE opcodes are allowed, and these must be immediately followed
74217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by an OP_IdxGT or OP_IdxLT opcode, respectively, with the same key.
74218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
74219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
74220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3BtreeCursorHasHint(pC->pCursor, BTREE_SEEK_EQ) ){
74221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_SeekGE || pOp->opcode==OP_SeekLE );
74222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp[1].opcode==OP_IdxLT || pOp[1].opcode==OP_IdxGT );
74223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp[1].p1==pOp[0].p1 );
74224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp[1].p2==pOp[0].p2 );
74225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp[1].p3==pOp[0].p3 );
74226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp[1].p4.i==pOp[0].p4.i );
74227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
74228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
74229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73853 74230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pC->isTable ){
73854 74231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The input value in P3 might be of any type: integer, real, string,
73855 74232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** blob, or NULL. But it needs to be an integer before we can do
73856 74233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the seek, so convert it. */
73857 74234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
@@ -75187,34 +75564,19 @@
75187 75564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75188 75565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Clear
75189 75566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75190 75567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Destroy: { /* out2-prerelease */
75191 75568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iMoved;
75192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCnt;
75193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *pVdbe;
75194 75569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb;
75195 75570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75196 75571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
75197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_VIRTUALTABLE
75198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCnt = 0;
75199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pVdbe=db->pVdbe; pVdbe; pVdbe = pVdbe->pNext){
75200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pVdbe->magic==VDBE_MAGIC_RUN && pVdbe->bIsReader
75201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pVdbe->inVtabMethod<2 && pVdbe->pc>=0
75202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
75203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCnt++;
75204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
75205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
75206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
75207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCnt = db->nVdbeRead;
75208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
75209 75572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Null;
75210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iCnt>1 ){
75573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->nVdbeRead > db->nVDestroy+1 ){
75211 75574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_LOCKED;
75212 75575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->errorAction = OE_Abort;
75213 75576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
75214 75577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = pOp->p3;
75215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iCnt==1 );
75216 75578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( DbMaskTest(p->btreeMask, iDb) );
75217 75579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iMoved = 0; /* Not needed. Only to silence a warning. */
75218 75580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeDropTable(db->aDb[iDb].pBt, pOp->p1, &iMoved);
75219 75581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Int;
75220 75582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = iMoved;
@@ -75843,14 +76205,16 @@
75843 76205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_AUTOINCREMENT */
75844 76206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75845 76207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: IfPos P1 P2 * * *
75846 76208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: if r[P1]>0 goto P2
75847 76209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the value of register P1 is 1 or greater, jump to P2.
76210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register P1 must contain an integer.
76211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the value of register P1 is 1 or greater, jump to P2 and
76212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** add the literal value P3 to register P1.
75849 76213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It is illegal to use this instruction on a register that does
75851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not contain an integer. An assertion fault will result if you try.
76214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the initial value of register P1 is less than 1, then the
76215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value is unchanged and control passes through to the next instruction.
75852 76216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75853 76217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IfPos: { /* jump, in1 */
75854 76218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
75855 76219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1->flags&MEM_Int );
75856 76220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken( pIn1->u.i>0, 2);
@@ -75875,27 +76239,63 @@
75875 76239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
75876 76240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75877 76241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
75878 76242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75879 76243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: IfZero P1 P2 P3 * *
75881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Synopsis: r[P1]+=P3, if r[P1]==0 goto P2
76244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: IfNotZero P1 P2 P3 * *
76245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: if r[P1]!=0 then r[P1]+=P3, goto P2
75882 76246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The register P1 must contain an integer. Add literal P3 to the
75884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value in register P1. If the result is exactly 0, jump to P2.
76247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register P1 must contain an integer. If the content of register P1 is
76248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** initially nonzero, then add P3 to P1 and jump to P2. If register P1 is
76249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** initially zero, leave it unchanged and fall through.
75885 76250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IfZero: { /* jump, in1 */
76251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IfNotZero: { /* jump, in1 */
76252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn1 = &aMem[pOp->p1];
76253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIn1->flags&MEM_Int );
76254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeBranchTaken(pIn1->u.i<0, 2);
76255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIn1->u.i ){
76256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn1->u.i += pOp->p3;
76257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pc = pOp->p2 - 1;
76258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
76260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: DecrJumpZero P1 P2 * * *
76263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: if (--r[P1])==0 goto P2
76264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register P1 must hold an integer. Decrement the value in register P1
76266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then jump to P2 if the new value is exactly zero.
76267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_DecrJumpZero: { /* jump, in1 */
75887 76269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
75888 76270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1->flags&MEM_Int );
75889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIn1->u.i += pOp->p3;
76271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn1->u.i--;
75890 76272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(pIn1->u.i==0, 2);
75891 76273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIn1->u.i==0 ){
75892 76274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
75893 76275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75894 76276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
75895 76277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75896 76278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: JumpZeroIncr P1 P2 * * *
76281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: if (r[P1]++)==0 ) goto P2
76282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The register P1 must contain an integer. If register P1 is initially
76284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zero, then jump to P2. Increment register P1 regardless of whether or
76285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not the jump is taken.
76286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_JumpZeroIncr: { /* jump, in1 */
76288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn1 = &aMem[pOp->p1];
76289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIn1->flags&MEM_Int );
76290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeBranchTaken(pIn1->u.i==0, 2);
76291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pIn1->u.i++)==0 ){
76292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pc = pOp->p2 - 1;
76293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
76295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
75897 76297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: AggStep * P2 P3 P4 P5
75898 76298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: accum=r[P3] step(r[P2@P5])
75899 76299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75900 76300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Execute the step function for an aggregate. The
75901 76301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function has P5 arguments. P4 is a pointer to the FuncDef
@@ -76229,17 +76629,33 @@
76229 76629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
76230 76630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76231 76631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
76232 76632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76233 76633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
76234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: VCreate P1 * * P4 *
76634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: VCreate P1 P2 * * *
76235 76635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** P4 is the name of a virtual table in database P1. Call the xCreate method
76237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for that table.
76636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** P2 is a register that holds the name of a virtual table in database
76637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** P1. Call the xCreate method for that table.
76238 76638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76239 76639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_VCreate: {
76240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
76640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Mem sMem; /* For storing the record being decoded */
76641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTab; /* Name of the virtual table */
76642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&sMem, 0, sizeof(sMem));
76644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sMem.db = db;
76645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Because P2 is always a static string, it is impossible for the
76646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3VdbeMemCopy() to fail */
76647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (aMem[pOp->p2].flags & MEM_Str)!=0 );
76648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (aMem[pOp->p2].flags & MEM_Static)!=0 );
76649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeMemCopy(&sMem, &aMem[pOp->p2]);
76650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK );
76651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTab = (const char*)sqlite3_value_text(&sMem);
76652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( zTab || db->mallocFailed );
76653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zTab ){
76654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VtabCallCreate(db, pOp->p1, zTab, &p->zErrMsg);
76655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemRelease(&sMem);
76241 76657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
76242 76658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76243 76659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
76244 76660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76245 76661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -76247,13 +76663,13 @@
76247 76663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76248 76664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 is the name of a virtual table in database P1. Call the xDestroy method
76249 76665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of that table.
76250 76666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76251 76667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_VDestroy: {
76252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 2;
76668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->nVDestroy++;
76253 76669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
76254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 0;
76670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->nVDestroy--;
76255 76671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
76256 76672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76257 76673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
76258 76674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76259 76675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -76265,18 +76681,21 @@
76265 76681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76266 76682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_VOpen: {
76267 76683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCur;
76268 76684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor *pVtabCursor;
76269 76685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
76270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_module *pModule;
76686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const sqlite3_module *pModule;
76271 76687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76272 76688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->bIsReader );
76273 76689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur = 0;
76274 76690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVtabCursor = 0;
76275 76691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVtab = pOp->p4.pVtab->pVtab;
76276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pModule = (sqlite3_module *)pVtab->pModule;
76277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(pVtab && pModule);
76692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVtab==0 || NEVER(pVtab->pModule==0) ){
76693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_LOCKED;
76694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
76695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pModule = pVtab->pModule;
76278 76697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pModule->xOpen(pVtab, &pVtabCursor);
76279 76698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VtabImportErrmsg(p, pVtab);
76280 76699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK==rc ){
76281 76700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize sqlite3_vtab_cursor base class */
76282 76701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVtabCursor->pVtab = pVtab;
@@ -76283,10 +76702,11 @@
76283 76702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76284 76703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize vdbe cursor object */
76285 76704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
76286 76705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur ){
76287 76706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pVtabCursor = pVtabCursor;
76707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVtab->nRef++;
76288 76708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
76289 76709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mallocFailed = 1;
76290 76710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pModule->xClose(pVtabCursor);
76291 76711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76292 76712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -76348,13 +76768,11 @@
76348 76768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apArg = p->apArg;
76349 76769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i = 0; i<nArg; i++){
76350 76770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apArg[i] = &pArgc[i+1];
76351 76771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76352 76772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 1;
76354 76773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pModule->xFilter(pVtabCursor, iQuery, pOp->p4.z, nArg, apArg);
76355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 0;
76356 76774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VtabImportErrmsg(p, pVtab);
76357 76775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
76358 76776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
res = pModule->xEof(pVtabCursor);
76359 76777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76360 76778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(res!=0,2);
@@ -76440,13 +76858,11 @@
76440 76858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** underlying implementation to return an error if one occurs during
76441 76859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xNext(). Instead, if an error occurs, true is returned (indicating that
76442 76860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** data is available) and the error code returned when xColumn or
76443 76861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** some other method is next invoked on the save virtual table cursor.
76444 76862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 1;
76446 76863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pModule->xNext(pCur->pVtabCursor);
76447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inVtabMethod = 0;
76448 76864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VtabImportErrmsg(p, pVtab);
76449 76865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
76450 76866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
res = pModule->xEof(pCur->pVtabCursor);
76451 76867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76452 76868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(!res,2);
@@ -76517,11 +76933,11 @@
76517 76933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P5 is the error actions (OE_Replace, OE_Fail, OE_Ignore, etc) to
76518 76934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** apply in the case of a constraint failure on an insert or update.
76519 76935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76520 76936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_VUpdate: {
76521 76937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
76522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_module *pModule;
76938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const sqlite3_module *pModule;
76523 76939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg;
76524 76940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
76525 76941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite_int64 rowid;
76526 76942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem **apArg;
76527 76943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pX;
@@ -76529,11 +76945,15 @@
76529 76945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback
76530 76946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
76531 76947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
76532 76948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
76533 76949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVtab = pOp->p4.pVtab->pVtab;
76534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pModule = (sqlite3_module *)pVtab->pModule;
76950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVtab==0 || NEVER(pVtab->pModule==0) ){
76951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_LOCKED;
76952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
76953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pModule = pVtab->pModule;
76535 76955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nArg = pOp->p2;
76536 76956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_VTAB );
76537 76957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pModule->xUpdate) ){
76538 76958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 vtabOnConflict = db->vtabOnConflict;
76539 76959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apArg = p->apArg;
@@ -78399,10 +78819,11 @@
78399 78819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db, /* Database handle doing sort */
78400 78820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nExtend, /* Attempt to extend file to this size */
78401 78821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file **ppFd
78402 78822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
78403 78823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
78824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3FaultSim(202) ) return SQLITE_IOERR_ACCESS;
78404 78825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsOpenMalloc(db->pVfs, 0, ppFd,
78405 78826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_TEMP_JOURNAL |
78406 78827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
78407 78828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &rc
78408 78829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
@@ -81990,14 +82411,15 @@
81990 82411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and the pExpr parameter is returned unchanged.
81991 82412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
81992 82413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(
81993 82414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing context */
81994 82415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr, /* Add the "COLLATE" clause to this expression */
81995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const Token *pCollName /* Name of collating sequence */
82416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Token *pCollName, /* Name of collating sequence */
82417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int dequote /* True to dequote pCollName */
81996 82418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
81997 82419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCollName->n>0 ){
81998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, 1);
82420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, dequote);
81999 82421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
82000 82422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pLeft = pExpr;
82001 82423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->flags |= EP_Collate|EP_Skip;
82002 82424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = pNew;
82003 82425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -82007,11 +82429,11 @@
82007 82429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, const char *zC){
82008 82430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token s;
82009 82431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zC!=0 );
82010 82432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.z = zC;
82011 82433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.n = sqlite3Strlen30(s.z);
82012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3ExprAddCollateToken(pParse, pExpr, &s);
82434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3ExprAddCollateToken(pParse, pExpr, &s, 0);
82013 82435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82014 82436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82015 82437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
82016 82438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Skip over any TK_COLLATE or TK_AS operators and any unlikely()
82017 82439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or likelihood() function at the root of an expression.
@@ -82317,10 +82739,11 @@
82317 82739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
82318 82740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Also propagate all EP_Propagate flags from the Expr.x.pList into
82319 82741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Expr.flags.
82320 82742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
82321 82743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){
82744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ) return;
82322 82745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
exprSetHeight(p);
82323 82746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCheckHeight(pParse, p->nHeight);
82324 82747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82325 82748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82326 82749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -87031,11 +87454,14 @@
87031 87454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Ensure the default expression is something that sqlite3ValueFromExpr()
87032 87455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can handle (i.e. not CURRENT_TIME etc.)
87033 87456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
87034 87457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pDflt ){
87035 87458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *pVal = 0;
87036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
87459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
87460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal);
87461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
87462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
87037 87463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mallocFailed = 1;
87038 87464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
87039 87465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87040 87466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pVal ){
87041 87467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default");
@@ -93094,10 +93520,11 @@
93094 93520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93095 93521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->onError==OE_Default ){
93096 93522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx->onError = pIndex->onError;
93097 93523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93098 93524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRet = pIdx;
93099 93526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_create_index;
93100 93527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93101 93528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93102 93529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93103 93530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -95553,11 +95980,13 @@
95553 95980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95554 95981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
95555 95982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the collating function associated with a function.
95556 95983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95557 95984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
95558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeOp *pOp = &context->pVdbe->aOp[context->iOp-1];
95985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeOp *pOp;
95986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( context->pVdbe!=0 );
95987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp = &context->pVdbe->aOp[context->iOp-1];
95559 95988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_CollSeq );
95560 95989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_COLLSEQ );
95561 95990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pOp->p4.pColl;
95562 95991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95563 95992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -97181,10 +97610,15 @@
97181 97610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pExpr points to an expression which implements a function. If
97182 97611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it is appropriate to apply the LIKE optimization to that function
97183 97612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then set aWc[0] through aWc[2] to the wildcard characters and
97184 97613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return TRUE. If the function is not a LIKE-style function then
97185 97614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return FALSE.
97615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
97616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** *pIsNocase is set to true if uppercase and lowercase are equivalent for
97617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the function (default for LIKE). If the function makes the distinction
97618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
97619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false.
97186 97620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97187 97621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
97188 97622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *pDef;
97189 97623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->op!=TK_FUNCTION
97190 97624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !pExpr->x.pList
@@ -102972,10 +103406,21 @@
102972 103406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102973 103407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102974 103408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Send an SQLITE_FCNTL_PRAGMA file-control to the underlying VFS
102975 103409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** connection. If it returns SQLITE_OK, then assume that the VFS
102976 103410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** handled the pragma and generate a no-op prepared statement.
103411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
103412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-12238-55120 Whenever a PRAGMA statement is parsed,
103413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an SQLITE_FCNTL_PRAGMA file control is sent to the open sqlite3_file
103414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** object corresponding to the database file to which the pragma
103415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement refers.
103416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
103417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-29875-31678 The argument to the SQLITE_FCNTL_PRAGMA
103418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file control is an array of pointers to strings (char**) in which the
103419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** second element of the array is the name of the pragma and the third
103420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** element is the argument to the pragma or NULL if the pragma has no
103421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument.
102977 103422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
102978 103423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFcntl[0] = 0;
102979 103424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFcntl[1] = zLeft;
102980 103425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFcntl[2] = zRight;
102981 103426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFcntl[3] = 0;
@@ -103732,34 +104177,46 @@
103732 104177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
103733 104178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
103734 104179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx = sqlite3FindIndex(db, zRight, zDb);
103735 104180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx ){
103736 104181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
103737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int mx = pPragma->iArg ? pIdx->nColumn : pIdx->nKeyCol;
104182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mx;
104183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pPragma->iArg ){
104184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* PRAGMA index_xinfo (newer version with more rows and columns) */
104185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mx = pIdx->nColumn;
104186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem = 6;
104187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
104188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* PRAGMA index_info (legacy version) */
104189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mx = pIdx->nKeyCol;
104190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem = 3;
104191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
103738 104192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = pIdx->pTable;
103739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetNumCols(v, 6);
103740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem = 6;
104193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetNumCols(v, pParse->nMem);
103741 104194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CodeVerifySchema(pParse, iDb);
103742 104195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
103743 104196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
103744 104197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
103745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "desc", SQLITE_STATIC);
103746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "coll", SQLITE_STATIC);
103747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "key", SQLITE_STATIC);
104198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pPragma->iArg ){
104199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "desc", SQLITE_STATIC);
104200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "coll", SQLITE_STATIC);
104201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "key", SQLITE_STATIC);
104202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
103748 104203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<mx; i++){
103749 104204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 cnum = pIdx->aiColumn[i];
103750 104205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
103751 104206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2);
103752 104207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cnum<0 ){
103753 104208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, 3);
103754 104209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
103755 104210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0);
103756 104211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, pIdx->aSortOrder[i], 4);
103758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, pIdx->azColl[i], 0);
103759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, i<pIdx->nKeyCol, 6);
103760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6);
104212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pPragma->iArg ){
104213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, pIdx->aSortOrder[i], 4);
104214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, pIdx->azColl[i], 0);
104215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, i<pIdx->nKeyCol, 6);
104216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_ResultRow, 1, pParse->nMem);
103761 104218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103762 104219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103763 104220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103764 104221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
103765 104222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -104457,12 +104914,13 @@
104457 104914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
104458 104915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104459 104916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
104460 104917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PRAGMA shrink_memory
104461 104918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
104462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This pragma attempts to free as much memory as possible from the
104463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** current database connection.
104919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-23445-46109 This pragma causes the database
104920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** connection on which it is invoked to free up as much memory as it
104921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can, by calling sqlite3_db_release_memory().
104464 104922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104465 104923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case PragTyp_SHRINK_MEMORY: {
104466 104924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_db_release_memory(db);
104467 104925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
104468 104926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104487,12 +104945,16 @@
104487 104945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104488 104946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
104489 104947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PRAGMA soft_heap_limit
104490 104948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PRAGMA soft_heap_limit = N
104491 104949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
104492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Call sqlite3_soft_heap_limit64(N). Return the result. If N is omitted,
104493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** use -1.
104950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-26343-45930 This pragma invokes the
104951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_soft_heap_limit64() interface with the argument N, if N is
104952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** specified and is a non-negative integer.
104953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-64451-07163 The soft_heap_limit pragma always
104954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns the same integer that would be returned by the
104955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_soft_heap_limit64(-1) C-language function.
104494 104956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104495 104957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case PragTyp_SOFT_HEAP_LIMIT: {
104496 104958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 N;
104497 104959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRight && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK ){
104498 104960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_soft_heap_limit64(N);
@@ -106065,24 +106527,21 @@
106065 106527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
106066 106528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = OP_IdxInsert;
106067 106529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106068 106530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, op, pSort->iECursor, regRecord);
106069 106531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect->iLimit ){
106070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr1, addr2;
106532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr;
106071 106533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLimit;
106072 106534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect->iOffset ){
106073 106535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLimit = pSelect->iOffset+1;
106074 106536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
106075 106537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLimit = pSelect->iLimit;
106076 106538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit); VdbeCoverage(v);
106078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
106079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
106080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr1);
106539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp3(v, OP_IfNotZero, iLimit, 0, -1); VdbeCoverage(v);
106081 106540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Last, pSort->iECursor);
106082 106541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Delete, pSort->iECursor);
106083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr2);
106542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addr);
106084 106543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106085 106544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106086 106545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
106087 106546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
106088 106547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add code to implement the OFFSET
@@ -106475,11 +106934,11 @@
106475 106934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Jump to the end of the loop if the LIMIT is reached. Except, if
106476 106935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** there is a sorter, in which case the sorter has already limited
106477 106936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the output for us.
106478 106937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
106479 106938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSort==0 && p->iLimit ){
106480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1); VdbeCoverage(v);
106939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v);
106481 106940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106482 106941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106483 106942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
106484 106943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
106485 106944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate a KeyInfo object sufficient for an index of N key columns and
@@ -107328,11 +107787,11 @@
107328 107787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107329 107788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
107330 107789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, p->pLimit, iLimit);
107331 107790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v);
107332 107791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "LIMIT counter"));
107333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak); VdbeCoverage(v);
107792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v);
107334 107793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107335 107794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pOffset ){
107336 107795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iOffset = iOffset = ++pParse->nMem;
107337 107796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem++; /* Allocate an extra register for limit+offset */
107338 107797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, p->pOffset, iOffset);
@@ -107547,11 +108006,11 @@
107547 108006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrCont = sqlite3VdbeMakeLabel(v);
107548 108007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeOffset(v, regOffset, addrCont);
107549 108008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
selectInnerLoop(pParse, p, p->pEList, iCurrent,
107550 108009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, 0, pDest, addrCont, addrBreak);
107551 108010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regLimit ){
107552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_IfZero, regLimit, addrBreak, -1);
108011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak);
107553 108012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
107554 108013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107555 108014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, addrCont);
107556 108015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
107557 108016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Execute the recursive SELECT taking the single row in Current as
@@ -107772,11 +108231,11 @@
107772 108231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107773 108232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = 0;
107774 108233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iLimit = pPrior->iLimit;
107775 108234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iOffset = pPrior->iOffset;
107776 108235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iLimit ){
107777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit); VdbeCoverage(v);
108236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v);
107778 108237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "Jump ahead if LIMIT reached"));
107779 108238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107780 108239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainSetInteger(iSub2, pParse->iNextSelectId);
107781 108240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, p, &dest);
107782 108241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( rc!=SQLITE_OK );
@@ -108173,11 +108632,11 @@
108173 108632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108174 108633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108175 108634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Jump to the end of the loop if the LIMIT is reached.
108176 108635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108177 108636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iLimit ){
108178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1); VdbeCoverage(v);
108637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v);
108179 108638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108180 108639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108181 108640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate the subroutine return
108182 108641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108183 108642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, iContinue);
@@ -109540,11 +109999,11 @@
109540 109999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkSelect(pWalker, bMayRecursive ? pSel->pPrior : pSel);
109541 110000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109542 110001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior);
109543 110002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEList = pLeft->pEList;
109544 110003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCte->pCols ){
109545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pEList->nExpr!=pCte->pCols->nExpr ){
110004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pEList && pEList->nExpr!=pCte->pCols->nExpr ){
109546 110005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns",
109547 110006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCte->zName, pEList->nExpr, pCte->pCols->nExpr
109548 110007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
109549 110008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->pWith = pSavedWith;
109550 110009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
@@ -113966,10 +114425,11 @@
113966 114425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
113967 114426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db->init.busy ){
113968 114427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zStmt;
113969 114428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zWhere;
113970 114429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb;
114430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iReg;
113971 114431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v;
113972 114432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113973 114433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compute the complete text of the CREATE VIRTUAL TABLE statement */
113974 114434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pEnd ){
113975 114435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n;
@@ -114000,12 +114460,14 @@
114000 114460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ChangeCookie(pParse, iDb);
114001 114461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114002 114462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
114003 114463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
114004 114464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
114005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0,
114006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
114465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
114466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iReg = ++pParse->nMem;
114467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, iReg, 0, pTab->zName, 0);
114468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_VCreate, iDb, iReg);
114007 114469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114008 114470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114009 114471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we are rereading the sqlite_master table create the in-memory
114010 114472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** record of the table. The xConnect() method is not called until
114011 114473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the first time the virtual table is used in an SQL statement. This
@@ -114354,15 +114816,19 @@
114354 114816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
114355 114817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
114356 114818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114357 114819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
114358 114820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){
114359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VTable *p = vtabDisconnectAll(db, pTab);
114360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( rc==SQLITE_OK );
114821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VTable *p;
114822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p=pTab->pVTable; p; p=p->pNext){
114823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pVtab );
114824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pVtab->nRef>0 ){
114825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_LOCKED;
114826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
114827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
114828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = vtabDisconnectAll(db, pTab);
114362 114829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = p->pMod->pModule->xDestroy(p->pVtab);
114363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114364 114830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
114365 114831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
114366 114832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->pVTable==p && p->pNext==0 );
114367 114833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pVtab = 0;
114368 114834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->pVTable = 0;
@@ -114787,10 +115253,12 @@
114787 115253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrNxt; /* Jump here to start the next IN combination */
114788 115254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrSkip; /* Jump here for next iteration of skip-scan */
114789 115255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrCont; /* Jump here to continue with the next loop cycle */
114790 115256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrFirst; /* First instruction of interior of the loop */
114791 115257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrBody; /* Beginning of the body of this loop */
115258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iLikeRepCntr; /* LIKE range processing counter register */
115259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrLikeRep; /* LIKE range processing address */
114792 115260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 iFrom; /* Which entry in the FROM clause */
114793 115261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 op, p3, p5; /* Opcode, P3 & P5 of the opcode that ends the loop */
114794 115262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int p1, p2; /* Operands of the opcode used to ends the loop */
114795 115263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union { /* Information that depends on pWLoop->wsFlags */
114796 115264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct {
@@ -114971,11 +115439,11 @@
114971 115439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereOrInfo *pOrInfo; /* Extra information if (eOperator & WO_OR)!=0 */
114972 115440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereAndInfo *pAndInfo; /* Extra information if (eOperator& WO_AND)!=0 */
114973 115441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} u;
114974 115442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst truthProb; /* Probability of truth for this expression */
114975 115443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 eOperator; /* A WO_xx value describing <op> */
114976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 wtFlags; /* TERM_xxx bit flags. See below */
115444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 wtFlags; /* TERM_xxx bit flags. See below */
114977 115445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 nChild; /* Number of children that must disable us */
114978 115446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC; /* The clause this term is part of */
114979 115447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */
114980 115448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */
114981 115449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
@@ -114993,10 +115461,13 @@
114993 115461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
114994 115462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TERM_VNULL 0x80 /* Manufactured x>NULL or x<=NULL term */
114995 115463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
114996 115464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TERM_VNULL 0x00 /* Disabled if not using stat3 */
114997 115465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
115466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TERM_LIKEOPT 0x100 /* Virtual terms from the LIKE optimization */
115467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TERM_LIKECOND 0x200 /* Conditionally this LIKE operator term */
115468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TERM_LIKE 0x400 /* The original LIKE operator */
114998 115469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114999 115470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115000 115471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of the WhereScan object is used as an iterator for locating
115001 115472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** terms in the WHERE clause that are useful to the query planner.
115002 115473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -115368,11 +115839,11 @@
115368 115839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WARNING: This routine might reallocate the space used to store
115369 115840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WhereTerms. All pointers to WhereTerms should be invalidated after
115370 115841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** calling this routine. Such pointers may be reinitialized by referencing
115371 115842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the pWC->a[] array.
115372 115843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){
115844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int whereClauseInsert(WhereClause *pWC, Expr *p, u16 wtFlags){
115374 115845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pTerm;
115375 115846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idx;
115376 115847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( wtFlags & TERM_VIRTUAL );
115377 115848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWC->nTerm>=pWC->nSlot ){
115378 115849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pOld = pWC->a;
@@ -115793,11 +116264,15 @@
115793 116264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check to see if the given expression is a LIKE or GLOB operator that
115794 116265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can be optimized using inequality constraints. Return TRUE if it is
115795 116266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** so and false if not.
115796 116267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115797 116268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In order for the operator to be optimizible, the RHS must be a string
115798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** literal that does not begin with a wildcard.
116269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** literal that does not begin with a wildcard. The LHS must be a column
116270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that may only be NULL, a string, or a BLOB, never a number. (This means
116271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that virtual tables cannot participate in the LIKE optimization.) If the
116272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** collating sequence for the column on the LHS must be appropriate for
116273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the operator.
115799 116274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115800 116275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int isLikeOrGlob(
115801 116276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing and code generating context */
115802 116277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr, /* Test this expression */
115803 116278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr **ppPrefix, /* Pointer to TK_STRING expression with pattern prefix */
@@ -115822,11 +116297,11 @@
115822 116297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
115823 116298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pList = pExpr->x.pList;
115824 116299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft = pList->a[1].pExpr;
115825 116300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLeft->op!=TK_COLUMN
115826 116301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
115827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || IsVirtual(pLeft->pTab)
116302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || IsVirtual(pLeft->pTab) /* Value might be numeric */
115828 116303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115829 116304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
115830 116305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be the name of an indexed column with TEXT affinity. */
115831 116306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
115832 116307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115931,10 +116406,83 @@
115931 116406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void markTermAsChild(WhereClause *pWC, int iChild, int iParent){
115932 116407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC->a[iChild].iParent = iParent;
115933 116408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC->a[iChild].truthProb = pWC->a[iParent].truthProb;
115934 116409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC->a[iParent].nChild++;
115935 116410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the N-th AND-connected subterm of pTerm. Or if pTerm is not
116414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a conjunction, then return just pTerm when N==0. If N is exceeds
116415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of available subterms, return NULL.
116416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static WhereTerm *whereNthSubterm(WhereTerm *pTerm, int N){
116418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->eOperator!=WO_AND ){
116419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return N==0 ? pTerm : 0;
116420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( N<pTerm->u.pAndInfo->wc.nTerm ){
116422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return &pTerm->u.pAndInfo->wc.a[N];
116423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
116425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Subterms pOne and pTwo are contained within WHERE clause pWC. The
116429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** two subterms are in disjunction - they are OR-ed together.
116430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If these two terms are both of the form: "A op B" with the same
116432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A and B values but different operators and if the operators are
116433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compatible (if one is = and the other is <, for example) then
116434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** add a new virtual AND term to pWC that is the combination of the
116435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** two.
116436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Some examples:
116438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x<y OR x=y --> x<=y
116440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x=y OR x=y --> x=y
116441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x<=y OR x<y --> x<=y
116442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following is NOT generated:
116444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x<y OR x>y --> x!=y
116446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void whereCombineDisjuncts(
116448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pSrc, /* the FROM clause */
116449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereClause *pWC, /* The complete WHERE clause */
116450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pOne, /* First disjunct */
116451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pTwo /* Second disjunct */
116452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
116453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 eOp = pOne->eOperator | pTwo->eOperator;
116454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db; /* Database connection (for malloc) */
116455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pNew; /* New virtual expression */
116456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op; /* Operator for the combined expression */
116457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idxNew; /* Index in pWC of the next virtual term */
116458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pOne->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
116460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pTwo->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
116461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (eOp & (WO_EQ|WO_LT|WO_LE))!=eOp
116462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (eOp & (WO_EQ|WO_GT|WO_GE))!=eOp ) return;
116463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOne->pExpr->pLeft!=0 && pOne->pExpr->pRight!=0 );
116464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTwo->pExpr->pLeft!=0 && pTwo->pExpr->pRight!=0 );
116465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprCompare(pOne->pExpr->pLeft, pTwo->pExpr->pLeft, -1) ) return;
116466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprCompare(pOne->pExpr->pRight, pTwo->pExpr->pRight, -1) )return;
116467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If we reach this point, it means the two subterms can be combined */
116468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (eOp & (eOp-1))!=0 ){
116469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eOp & (WO_LT|WO_LE) ){
116470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eOp = WO_LE;
116471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
116472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( eOp & (WO_GT|WO_GE) );
116473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eOp = WO_GE;
116474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db = pWC->pWInfo->pParse->db;
116477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = sqlite3ExprDup(db, pOne->pExpr, 0);
116478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ) return;
116479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(op=TK_EQ; eOp!=(WO_EQ<<(op-TK_EQ)); op++){ assert( op<TK_GE ); }
116480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->op = op;
116481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
116482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exprAnalyze(pSrc, pWC, idxNew);
116483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
115936 116484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115937 116485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
115938 116486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115939 116487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Analyze a term that consists of two or more OR-connected
115940 116488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subterms. So in:
@@ -115956,10 +116504,11 @@
115956 116504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (A) t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5
115957 116505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (B) x=expr1 OR expr2=x OR x=expr3
115958 116506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (C) t1.x=t2.y OR (t1.x=t2.z AND t1.y=15)
115959 116507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (D) x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*')
115960 116508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (E) (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6)
116509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (F) x>A OR (x=A AND y>=B)
115961 116510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115962 116511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CASE 1:
115963 116512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115964 116513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If all subterms are of the form T.C=expr for some single column of C and
115965 116514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a single table T (as shown in example B above) then create a new virtual
@@ -115971,10 +116520,20 @@
115971 116520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then create a new virtual term like this:
115972 116521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115973 116522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** x IN (expr1,expr2,expr3)
115974 116523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115975 116524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CASE 2:
116525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If there are exactly two disjuncts one side has x>A and the other side
116527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** has x=A (for the same x and A) then add a new virtual conjunct term to the
116528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE clause of the form "x>=A". Example:
116529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x>A OR (x=A AND y>B) adds: x>=A
116531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The added conjunct can sometimes be helpful in query planning.
116533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CASE 3:
115976 116535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115977 116536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If all subterms are indexable by a single table T, then set
115978 116537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115979 116538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WhereTerm.eOperator = WO_OR
115980 116539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WhereTerm.u.pOrInfo->indexable |= the cursor number for table T
@@ -116098,15 +116657,29 @@
116098 116657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116099 116658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116100 116659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116101 116660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116102 116661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Record the set of tables that satisfy case 2. The set might be
116662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Record the set of tables that satisfy case 3. The set might be
116104 116663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** empty.
116105 116664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116106 116665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrInfo->indexable = indexable;
116107 116666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->eOperator = indexable==0 ? 0 : WO_OR;
116667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* For a two-way OR, attempt to implementation case 2.
116669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( indexable && pOrWc->nTerm==2 ){
116671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOne = 0;
116672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pOne;
116673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (pOne = whereNthSubterm(&pOrWc->a[0],iOne++))!=0 ){
116674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iTwo = 0;
116675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pTwo;
116676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (pTwo = whereNthSubterm(&pOrWc->a[1],iTwo++))!=0 ){
116677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ whereCombineDisjuncts(pSrc, pWC, pOne, pTwo);
116678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116108 116681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116109 116682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116110 116683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** chngToIN holds a set of tables that *might* satisfy case 1. But
116111 116684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we have to do some additional checking to see if case 1 really
116112 116685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is satisfied.
@@ -116233,11 +116806,11 @@
116233 116806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm = &pWC->a[idxTerm];
116234 116807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
markTermAsChild(pWC, idxNew, idxTerm);
116235 116808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
116236 116809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pList);
116237 116810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */
116811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm->eOperator = WO_NOOP; /* case 1 trumps case 3 */
116239 116812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116240 116813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116241 116814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116242 116815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
116243 116816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116271,11 +116844,11 @@
116271 116844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask prereqLeft; /* Prerequesites of the pExpr->pLeft */
116272 116845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask prereqAll; /* Prerequesites of pExpr */
116273 116846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask extraRight = 0; /* Extra dependencies on LEFT JOIN */
116274 116847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pStr1 = 0; /* RHS of LIKE/GLOB operator */
116275 116848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isComplete = 0; /* RHS of LIKE/GLOB ends with wildcard */
116276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int noCase = 0; /* LIKE/GLOB distinguishes case */
116849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int noCase = 0; /* uppercase equivalent to lowercase */
116277 116850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op; /* Top-level operator. pExpr->op */
116278 116851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse = pWInfo->pParse; /* Parsing context */
116279 116852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db; /* Database connection */
116280 116853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116281 116854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
@@ -116409,16 +116982,19 @@
116409 116982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116410 116983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
116411 116984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Add constraints to reduce the search space on a LIKE or GLOB
116412 116985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operator.
116413 116986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
116987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A like pattern of the form "x LIKE 'aBc%'" is changed into constraints
116415 116988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** x>='abc' AND x<'abd' AND x LIKE 'abc%'
116989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x>='ABC' AND x<'abd' AND x LIKE 'aBc%'
116417 116990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116418 116991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The last character of the prefix "abc" is incremented to form the
116419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** termination condition "abd".
116992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** termination condition "abd". If case is not significant (the default
116993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for LIKE) then the lower-bound is made all uppercase and the upper-
116994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bound is made all lowercase so that the bounds also work when comparing
116995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** BLOBs.
116420 116996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116421 116997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWC->op==TK_AND
116422 116998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
116423 116999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
116424 117000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pLeft; /* LHS of LIKE/GLOB operator */
@@ -116425,14 +117001,30 @@
116425 117001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pStr2; /* Copy of pStr1 - RHS of LIKE/GLOB operator */
116426 117002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pNewExpr1;
116427 117003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pNewExpr2;
116428 117004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idxNew1;
116429 117005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idxNew2;
116430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Token sCollSeqName; /* Name of collating sequence */
117006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zCollSeqName; /* Name of collating sequence */
117007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
116431 117008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116432 117009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft = pExpr->x.pList->a[1].pExpr;
116433 117010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr2 = sqlite3ExprDup(db, pStr1, 0);
117011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Convert the lower bound to upper-case and the upper bound to
117013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** lower-case (upper-case is less than lower-case in ASCII) so that
117014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the range constraints also work for BLOBs
117015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( noCase && !pParse->db->mallocFailed ){
117017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
117018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char c;
117019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm->wtFlags |= TERM_LIKE;
117020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; (c = pStr1->u.zToken[i])!=0; i++){
117021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pStr1->u.zToken[i] = sqlite3Toupper(c);
117022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pStr2->u.zToken[i] = sqlite3Tolower(c);
117023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116434 117026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db->mallocFailed ){
116435 117027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 c, *pC; /* Last character before the first wildcard */
116436 117028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
116437 117029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = *pC;
116438 117030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( noCase ){
@@ -116445,26 +117037,25 @@
116445 117037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c=='A'-1 ) isComplete = 0;
116446 117038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = sqlite3UpperToLower[c];
116447 117039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116448 117040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pC = c + 1;
116449 117041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sCollSeqName.z = noCase ? "NOCASE" : "BINARY";
116451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sCollSeqName.n = 6;
117042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCollSeqName = noCase ? "NOCASE" : "BINARY";
116452 117043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewExpr1 = sqlite3ExprDup(db, pLeft, 0);
116453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNewExpr1 = sqlite3PExpr(pParse, TK_GE,
116454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprAddCollateToken(pParse,pNewExpr1,&sCollSeqName),
117044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewExpr1 = sqlite3PExpr(pParse, TK_GE,
117045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName),
116455 117046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr1, 0);
116456 117047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transferJoinMarkings(pNewExpr1, pExpr);
116457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
117048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idxNew1 = whereClauseInsert(pWC, pNewExpr1, wtFlags);
116458 117049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( idxNew1==0 );
116459 117050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
exprAnalyze(pSrc, pWC, idxNew1);
116460 117051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewExpr2 = sqlite3ExprDup(db, pLeft, 0);
116461 117052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
116462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprAddCollateToken(pParse,pNewExpr2,&sCollSeqName),
117053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprAddCollateString(pParse,pNewExpr2,zCollSeqName),
116463 117054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStr2, 0);
116464 117055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
transferJoinMarkings(pNewExpr2, pExpr);
116465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
117056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idxNew2 = whereClauseInsert(pWC, pNewExpr2, wtFlags);
116466 117057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( idxNew2==0 );
116467 117058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
exprAnalyze(pSrc, pWC, idxNew2);
116468 117059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm = &pWC->a[idxTerm];
116469 117060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isComplete ){
116470 117061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
markTermAsChild(pWC, idxNew1, idxTerm);
@@ -117074,15 +117665,18 @@
117074 117665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
117075 117666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117076 117667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Estimate the location of a particular key among all keys in an
117077 117668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index. Store the results in aStat as follows:
117078 117669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
117079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** aStat[0] Est. number of rows less than pVal
117080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** aStat[1] Est. number of rows equal to pVal
117670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aStat[0] Est. number of rows less than pRec
117671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aStat[1] Est. number of rows equal to pRec
117081 117672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
117082 117673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the index of the sample that is the smallest sample that
117083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is greater than or equal to pRec.
117674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is greater than or equal to pRec. Note that this index is not an index
117675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into the aSample[] array - it is an index into a virtual set of samples
117676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** based on the contents of aSample[] and the number of fields in record
117677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pRec.
117084 117678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117085 117679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int whereKeyStats(
117086 117680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Database connection */
117087 117681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx, /* Index to consider domain of */
117088 117682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord *pRec, /* Vector of values to consider */
@@ -117089,71 +117683,162 @@
117089 117683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int roundUp, /* Round up if true. Round down if false */
117090 117684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tRowcnt *aStat /* OUT: stats written here */
117091 117685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
117092 117686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IndexSample *aSample = pIdx->aSample;
117093 117687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCol; /* Index of required stats in anEq[] etc. */
117688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Index of first sample >= pRec */
117689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iSample; /* Smallest sample larger than or equal to pRec */
117094 117690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iMin = 0; /* Smallest sample not yet tested */
117095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i = pIdx->nSample; /* Smallest sample larger than or equal to pRec */
117096 117691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTest; /* Next sample to test */
117097 117692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res; /* Result of comparison operation */
117693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nField; /* Number of fields in pRec */
117694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt iLower = 0; /* anLt[] + anEq[] of largest sample pRec is > */
117098 117695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117099 117696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DEBUG
117100 117697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER( pParse );
117101 117698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
117102 117699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRec!=0 );
117103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCol = pRec->nField - 1;
117104 117700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIdx->nSample>0 );
117105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pRec->nField>0 && iCol<pIdx->nSampleCol );
117701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRec->nField>0 && pRec->nField<=pIdx->nSampleCol );
117702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do a binary search to find the first sample greater than or equal
117704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to pRec. If pRec contains a single field, the set of samples to search
117705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is simply the aSample[] array. If the samples in aSample[] contain more
117706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than one fields, all fields following the first are ignored.
117707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pRec contains N fields, where N is more than one, then as well as the
117709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** samples in aSample[] (truncated to N fields), the search also has to
117710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** consider prefixes of those samples. For example, if the set of samples
117711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in aSample is:
117712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aSample[0] = (a, 5)
117714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aSample[1] = (a, 10)
117715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aSample[2] = (b, 5)
117716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aSample[3] = (c, 100)
117717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aSample[4] = (c, 105)
117718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Then the search space should ideally be the samples above and the
117720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unique prefixes [a], [b] and [c]. But since that is hard to organize,
117721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the code actually searches this set:
117722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0: (a)
117724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1: (a, 5)
117725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2: (a, 10)
117726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3: (a, 10)
117727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 4: (b)
117728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5: (b, 5)
117729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 6: (c)
117730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 7: (c, 100)
117731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 8: (c, 105)
117732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 9: (c, 105)
117733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For each sample in the aSample[] array, N samples are present in the
117735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** effective sample array. In the above, samples 0 and 1 are based on
117736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sample aSample[0]. Samples 2 and 3 on aSample[1] etc.
117737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Often, sample i of each block of N effective samples has (i+1) fields.
117739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Except, each sample may be extended to ensure that it is greater than or
117740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** equal to the previous sample in the array. For example, in the above,
117741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sample 2 is the first sample of a block of N samples, so at first it
117742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** appears that it should be 1 field in size. However, that would make it
117743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** smaller than sample 1, so the binary search would not work. As a result,
117744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it is extended to two fields. The duplicates that this creates do not
117745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cause any problems.
117746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nField = pRec->nField;
117748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol = 0;
117749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iSample = pIdx->nSample * nField;
117106 117750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
117107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iTest = (iMin+i)/2;
117108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- res = sqlite3VdbeRecordCompare(aSample[iTest].n, aSample[iTest].p, pRec);
117751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iSamp; /* Index in aSample[] of test sample */
117752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n; /* Number of fields in test sample */
117753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iTest = (iMin+iSample)/2;
117755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iSamp = iTest / nField;
117756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iSamp>0 ){
117757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The proposed effective sample is a prefix of sample aSample[iSamp].
117758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Specifically, the shortest prefix of at least (1 + iTest%nField)
117759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fields that is greater than the previous effective sample. */
117760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(n=(iTest % nField) + 1; n<nField; n++){
117761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[iSamp-1].anLt[n-1]!=aSample[iSamp].anLt[n-1] ) break;
117762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = iTest + 1;
117765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = n;
117768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = sqlite3VdbeRecordCompare(aSample[iSamp].n, aSample[iSamp].p, pRec);
117109 117769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( res<0 ){
117770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLower = aSample[iSamp].anLt[n-1] + aSample[iSamp].anEq[n-1];
117771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iMin = iTest+1;
117772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( res==0 && n<nField ){
117773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLower = aSample[iSamp].anLt[n-1];
117110 117774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iMin = iTest+1;
117775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = -1;
117111 117776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i = iTest;
117777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iSample = iTest;
117778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCol = n-1;
117113 117779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( res && iMin<i );
117780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( res && iMin<iSample );
117781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = iSample / nField;
117115 117782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117116 117783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
117117 117784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The following assert statements check that the binary search code
117118 117785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** above found the right answer. This block serves no purpose other
117119 117786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than to invoke the asserts. */
117120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( res==0 ){
117121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If (res==0) is true, then sample $i must be equal to pRec */
117122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( i<pIdx->nSample );
117123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( 0==sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)
117124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pParse->db->mallocFailed );
117125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
117126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Otherwise, pRec must be smaller than sample $i and larger than
117127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sample ($i-1). */
117128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( i==pIdx->nSample
117129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)>0
117130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pParse->db->mallocFailed );
117131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( i==0
117132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0
117133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pParse->db->mallocFailed );
117787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->db->mallocFailed==0 ){
117788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( res==0 ){
117789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If (res==0) is true, then pRec must be equal to sample i. */
117790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i<pIdx->nSample );
117791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iCol==nField-1 );
117792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = nField;
117793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( 0==sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)
117794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pParse->db->mallocFailed
117795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
117796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Unless i==pIdx->nSample, indicating that pRec is larger than
117798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all samples in the aSample[] array, pRec must be smaller than the
117799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (iCol+1) field prefix of sample i. */
117800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i<=pIdx->nSample && i>=0 );
117801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = iCol+1;
117802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i==pIdx->nSample
117803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)>0
117804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pParse->db->mallocFailed );
117805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* if i==0 and iCol==0, then record pRec is smaller than all samples
117807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the aSample[] array. Otherwise, if (iCol>0) then pRec must
117808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be greater than or equal to the (iCol) field prefix of sample i.
117809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If (i>0), then pRec must also be greater than sample (i-1). */
117810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCol>0 ){
117811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = iCol;
117812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)<=0
117813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pParse->db->mallocFailed );
117814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>0 ){
117816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = nField;
117817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0
117818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pParse->db->mallocFailed );
117819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117134 117821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117135 117822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* ifdef SQLITE_DEBUG */
117136 117823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* At this point, aSample[i] is the first sample that is greater than
117138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or equal to pVal. Or if i==pIdx->nSample, then all samples are less
117139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** than pVal. If aSample[i]==pVal, then res==0.
117140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
117141 117824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( res==0 ){
117825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Record pRec is equal to sample i */
117826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iCol==nField-1 );
117142 117827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aStat[0] = aSample[i].anLt[iCol];
117143 117828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aStat[1] = aSample[i].anEq[iCol];
117144 117829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tRowcnt iLower, iUpper, iGap;
117146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i==0 ){
117147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iLower = 0;
117148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iUpper = aSample[0].anLt[iCol];
117830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* At this point, the (iCol+1) field prefix of aSample[i] is the first
117831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec
117832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is larger than all samples in the array. */
117833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt iUpper, iGap;
117834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=pIdx->nSample ){
117835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iUpper = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]);
117149 117836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 nRow0 = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]);
117151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iUpper = i>=pIdx->nSample ? nRow0 : aSample[i].anLt[iCol];
117152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iLower = aSample[i-1].anEq[iCol] + aSample[i-1].anLt[iCol];
117837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iUpper = aSample[i].anLt[iCol];
117153 117838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aStat[1] = pIdx->aAvgEq[iCol];
117839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117155 117840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iLower>=iUpper ){
117156 117841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGap = 0;
117157 117842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117158 117843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGap = iUpper - iLower;
117159 117844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -117161,11 +117846,15 @@
117161 117846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGap = (iGap*2)/3;
117162 117847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117163 117848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iGap = iGap/3;
117164 117849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117165 117850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aStat[0] = iLower + iGap;
117851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aStat[1] = pIdx->aAvgEq[iCol];
117166 117852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Restore the pRec->nField value before returning. */
117855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->nField = nField;
117167 117856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return i;
117168 117857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117169 117858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
117170 117859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117171 117860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -117635,24 +118324,47 @@
117635 118324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by indices, we disable them to prevent redundant tests in the inner
117636 118325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** loop. We would get the correct results if nothing were ever disabled,
117637 118326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** but joins might run a little slower. The trick is to disable as much
117638 118327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as we can without disabling too much. If we disabled in (1), we'd get
117639 118328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the wrong answer. See ticket #813.
118329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If all the children of a term are disabled, then that term is also
118331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** automatically disabled. In this way, terms get disabled if derived
118332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** virtual terms are tested first. For example:
118333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** x GLOB 'abc*' AND x>='abc' AND x<'acd'
118335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** \___________/ \______/ \_____/
118336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parent child1 child2
118337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Only the parent term was in the original WHERE clause. The child1
118339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and child2 terms were added by the LIKE optimization. If both of
118340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the virtual child terms are valid, then testing of the parent can be
118341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** skipped.
118342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usually the parent term is marked as TERM_CODED. But if the parent
118344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** term was originally TERM_LIKE, then the parent gets TERM_LIKECOND instead.
118345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The TERM_LIKECOND marking indicates that the term should be coded inside
118346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a conditional such that is only evaluated on the second pass of a
118347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** LIKE-optimization loop, when scanning BLOBs instead of strings.
117640 118348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117641 118349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
117642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTerm
118350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLoop = 0;
118351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pTerm
117643 118352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pTerm->wtFlags & TERM_CODED)==0
117644 118353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
117645 118354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pLevel->notReady & pTerm->prereqAll)==0
117646 118355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
117647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTerm->wtFlags |= TERM_CODED;
117648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTerm->iParent>=0 ){
117649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
117650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (--pOther->nChild)==0 ){
117651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- disableTerm(pLevel, pOther);
117652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
118356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nLoop && (pTerm->wtFlags & TERM_LIKE)!=0 ){
118357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm->wtFlags |= TERM_LIKECOND;
118358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
118359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm->wtFlags |= TERM_CODED;
117653 118360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->iParent<0 ) break;
118362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm = &pTerm->pWC->a[pTerm->iParent];
118363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm->nChild--;
118364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->nChild!=0 ) break;
118365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLoop++;
117654 118366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117655 118367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117656 118368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117657 118369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117658 118370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Code an OP_Affinity opcode to apply the column affinity string zAff
@@ -118132,11 +118844,38 @@
118132 118844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118133 118845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
118134 118846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define addScanStatus(a, b, c, d) ((void)d)
118135 118847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
118136 118848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
118849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
118850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the most recently coded instruction is a constant range contraint
118851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that originated from the LIKE optimization, then change the P3 to be
118852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pLoop->iLikeRepCntr and set P5.
118853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The LIKE optimization trys to evaluate "x LIKE 'abc%'" as a range
118855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression: "x>='ABC' AND x<'abd'". But this requires that the range
118856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** scan loop run twice, once for strings and a second time for BLOBs.
118857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The OP_String opcodes on the second pass convert the upper and lower
118858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bound string contants to blobs. This routine makes the necessary changes
118859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the OP_String opcodes for that to happen.
118860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void whereLikeOptimizationStringFixup(
118862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v, /* prepared statement under construction */
118863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereLevel *pLevel, /* The loop that contains the LIKE operator */
118864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pTerm /* The upper or lower bound just coded */
118865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
118866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_LIKEOPT ){
118867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeOp *pOp;
118868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pLevel->iLikeRepCntr>0 );
118869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp = sqlite3VdbeGetOp(v, -1);
118870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp!=0 );
118871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_String8
118872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pTerm->pWC->pWInfo->pParse->db->mallocFailed );
118873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p3 = pLevel->iLikeRepCntr;
118874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p5 = 1;
118875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118138 118877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118139 118878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
118140 118879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code for the start of the iLevel-th loop in the WHERE clause
118141 118880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation described by pWInfo.
118142 118881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -118462,14 +119201,29 @@
118462 119201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118463 119202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = nEq;
118464 119203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLoop->wsFlags & WHERE_BTM_LIMIT ){
118465 119204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRangeStart = pLoop->aLTerm[j++];
118466 119205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nExtraReg = 1;
119206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Like optimization range constraints always occur in pairs */
119207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pRangeStart->wtFlags & TERM_LIKEOPT)==0 ||
119208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pLoop->wsFlags & WHERE_TOP_LIMIT)!=0 );
118467 119209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118468 119210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLoop->wsFlags & WHERE_TOP_LIMIT ){
118469 119211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRangeEnd = pLoop->aLTerm[j++];
118470 119212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nExtraReg = 1;
119213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pRangeEnd->wtFlags & TERM_LIKEOPT)!=0 ){
119214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRangeStart!=0 ); /* LIKE opt constraints */
119215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRangeStart->wtFlags & TERM_LIKEOPT ); /* occur in pairs */
119216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->iLikeRepCntr = ++pParse->nMem;
119217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( bRev );
119218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( pIdx->aSortOrder[nEq]==SQLITE_SO_DESC );
119219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer,
119220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRev ^ (pIdx->aSortOrder[nEq]==SQLITE_SO_DESC),
119221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->iLikeRepCntr);
119222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "LIKE loop counter"));
119223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLevel->addrLikeRep = sqlite3VdbeCurrentAddr(v);
119224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118471 119225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRangeStart==0
118472 119226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (j = pIdx->aiColumn[nEq])>=0
118473 119227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pIdx->pTable->aCol[j].notNull==0
118474 119228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118475 119229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bSeekPastNull = 1;
@@ -118508,10 +119262,11 @@
118508 119262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Seek the index cursor to the start of the range. */
118509 119263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nConstraint = nEq;
118510 119264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRangeStart ){
118511 119265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pRight = pRangeStart->pExpr->pRight;
118512 119266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, pRight, regBase+nEq);
119267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ whereLikeOptimizationStringFixup(v, pLevel, pRangeStart);
118513 119268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pRangeStart->wtFlags & TERM_VNULL)==0
118514 119269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3ExprCanBeNull(pRight)
118515 119270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118516 119271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt);
118517 119272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
@@ -118553,10 +119308,11 @@
118553 119308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nConstraint = nEq;
118554 119309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRangeEnd ){
118555 119310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pRight = pRangeEnd->pExpr->pRight;
118556 119311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
118557 119312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, pRight, regBase+nEq);
119313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd);
118558 119314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pRangeEnd->wtFlags & TERM_VNULL)==0
118559 119315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3ExprCanBeNull(pRight)
118560 119316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118561 119317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt);
118562 119318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
@@ -118780,11 +119536,12 @@
118780 119536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** eliminating duplicates from other WHERE clauses, the action for each
118781 119537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sub-WHERE clause is to to invoke the main loop body as a subroutine.
118782 119538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118783 119539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wctrlFlags = WHERE_OMIT_OPEN_CLOSE
118784 119540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
| WHERE_FORCE_TABLE
118785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | WHERE_ONETABLE_ONLY;
119541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ | WHERE_ONETABLE_ONLY
119542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ | WHERE_NO_AUTOINDEX;
118786 119543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pOrWc->nTerm; ii++){
118787 119544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pOrTerm = &pOrWc->a[ii];
118788 119545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
118789 119546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereInfo *pSubWInfo; /* Info for single OR-term scan */
118790 119547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pOrExpr = pOrTerm->pExpr; /* Current OR clause term */
@@ -118942,10 +119699,11 @@
118942 119699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Insert code to test every subexpression that can be completely
118943 119700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** computed using the current set of tables.
118944 119701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118945 119702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
118946 119703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pE;
119704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int skipLikeAddr = 0;
118947 119705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->wtFlags & TERM_VIRTUAL );
118948 119706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->wtFlags & TERM_CODED );
118949 119707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
118950 119708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTerm->prereqAll & pLevel->notReady)!=0 ){
118951 119709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pWInfo->untestedTerms==0
@@ -118955,12 +119713,18 @@
118955 119713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118956 119714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pE = pTerm->pExpr;
118957 119715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pE!=0 );
118958 119716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
118959 119717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
119718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_LIKECOND ){
119720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pLevel->iLikeRepCntr>0 );
119721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ skipLikeAddr = sqlite3VdbeAddOp1(v, OP_IfNot, pLevel->iLikeRepCntr);
119722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
118960 119723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118961 119724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
119725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr);
118962 119726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_CODED;
118963 119727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118964 119728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118965 119729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Insert code to test for implied constraints based on transitivity
118966 119730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the "==" operator.
@@ -119621,10 +120385,14 @@
119621 120385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
119622 120386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue; /* ignore IS [NOT] NULL constraints on NOT NULL columns */
119623 120387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
119624 120388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->prereqRight & pNew->maskSelf ) continue;
119625 120389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not allow the upper bound of a LIKE optimization range constraint
120391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to mix with a lower range bound from some other source */
120392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_LIKEOPT && pTerm->eOperator==WO_LT ) continue;
120393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119626 120394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags = saved_wsFlags;
119627 120395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.btree.nEq = saved_nEq;
119628 120396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nLTerm = saved_nLTerm;
119629 120397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
119630 120398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->aLTerm[pNew->nLTerm++] = pTerm;
@@ -119664,10 +120432,21 @@
119664 120432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eOp & WO_GT );
119665 120433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eOp & WO_GE );
119666 120434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT;
119667 120435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBtm = pTerm;
119668 120436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTop = 0;
120437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_LIKEOPT ){
120438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Range contraints that come from the LIKE optimization are
120439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** always used in pairs. */
120440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTop = &pTerm[1];
120441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm );
120442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTop->wtFlags & TERM_LIKEOPT );
120443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTop->eOperator==WO_LT );
120444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */
120445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->aLTerm[pNew->nLTerm++] = pTop;
120446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->wsFlags |= WHERE_TOP_LIMIT;
120447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119669 120448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
119670 120449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eOp & (WO_LT|WO_LE) );
119671 120450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eOp & WO_LT );
119672 120451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eOp & WO_LE );
119673 120452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT;
@@ -119974,10 +120753,11 @@
119974 120753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rLogSize = estLog(rSize);
119975 120754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119976 120755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
119977 120756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Automatic indexes */
119978 120757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pBuilder->pOrSet
120758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pWInfo->wctrlFlags & WHERE_NO_AUTOINDEX)==0
119979 120759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0
119980 120760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pSrc->pIndex==0
119981 120761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !pSrc->viaCoroutine
119982 120762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !pSrc->notIndexed
119983 120763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& HasRowid(pTab)
@@ -120857,14 +121637,14 @@
120857 121637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( aSortCost==0 || &pSpace[nSpace]==(char*)&aSortCost[nOrderBy] );
120858 121638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( aSortCost!=0 || &pSpace[nSpace]==(char*)pX );
120859 121639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120860 121640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Seed the search with a single WherePath containing zero WhereLoops.
120861 121641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
120862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** TUNING: Do not let the number of iterations go above 25. If the cost
120863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of computing an automatic index is not paid back within the first 25
121642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** TUNING: Do not let the number of iterations go above 28. If the cost
121643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of computing an automatic index is not paid back within the first 28
120864 121644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rows, then do not use the automatic index. */
120865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aFrom[0].nRow = MIN(pParse->nQueryLoop, 46); assert( 46==sqlite3LogEst(25) );
121645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aFrom[0].nRow = MIN(pParse->nQueryLoop, 48); assert( 48==sqlite3LogEst(28) );
120866 121646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFrom = 1;
120867 121647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( aFrom[0].isOrdered==0 );
120868 121648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nOrderBy ){
120869 121649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If nLoop is zero, then there are no FROM terms in the query. Since
120870 121650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in this case the query may return a maximum of one row, the results
@@ -121658,10 +122438,16 @@
121658 122438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIx->pSchema==pTab->pSchema );
121659 122439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iIndexCur>=0 );
121660 122440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op ){
121661 122441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, op, iIndexCur, pIx->tnum, iDb);
121662 122442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetP4KeyInfo(pParse, pIx);
122443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0
122444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pLoop->wsFlags & (WHERE_COLUMN_RANGE|WHERE_SKIPSCAN))==0
122445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0
122446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
122447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ); /* Hint to COMDB2 */
122448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121663 122449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pIx->zName));
121664 122450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121665 122451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121666 122452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iDb>=0 ) sqlite3CodeVerifySchema(pParse, iDb);
121667 122453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notReady &= ~getMask(&pWInfo->sMaskSet, pTabItem->iCursor);
@@ -121758,10 +122544,20 @@
121758 122544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLevel->addrSkip ){
121759 122545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrSkip);
121760 122546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName));
121761 122547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, pLevel->addrSkip);
121762 122548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, pLevel->addrSkip-2);
122549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
122550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLevel->addrLikeRep ){
122551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op;
122552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3VdbeGetOp(v, pLevel->addrLikeRep-1)->p1 ){
122553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = OP_DecrJumpZero;
122554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
122555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = OP_JumpZeroIncr;
122556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
122557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, op, pLevel->iLikeRepCntr, pLevel->addrLikeRep);
122558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
121763 122559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121764 122560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLevel->iLeftJoin ){
121765 122561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
121766 122562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0
121767 122563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pLoop->wsFlags & WHERE_INDEXED)!=0 );
@@ -124649,11 +125445,11 @@
124649 125445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
spanSet(&yygotominor.yy346, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
124650 125446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124651 125447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
124652 125448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 193: /* expr ::= expr COLLATE ID|STRING */
124653 125449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
124654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- yygotominor.yy346.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy346.pExpr, &yymsp[0].minor.yy0);
125450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ yygotominor.yy346.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy346.pExpr, &yymsp[0].minor.yy0, 1);
124655 125451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yygotominor.yy346.zStart = yymsp[-2].minor.yy346.zStart;
124656 125452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
124657 125453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124658 125454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
124659 125455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 194: /* expr ::= CAST LP expr AS typetoken RP */
@@ -124929,20 +125725,20 @@
124929 125725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 241: /* uniqueflag ::= */
124930 125726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{yygotominor.yy328 = OE_None;}
124931 125727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
124932 125728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 244: /* idxlist ::= idxlist COMMA nm collate sortorder */
124933 125729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
124934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0);
125730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0, 1);
124935 125731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, p);
124936 125732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListSetName(pParse,yygotominor.yy14,&yymsp[-2].minor.yy0,1);
124937 125733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListCheckLength(pParse, yygotominor.yy14, "index");
124938 125734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( yygotominor.yy14 ) yygotominor.yy14->a[yygotominor.yy14->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy328;
124939 125735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124940 125736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
124941 125737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 245: /* idxlist ::= nm collate sortorder */
124942 125738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
124943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0);
125739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0, 1);
124944 125740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yygotominor.yy14 = sqlite3ExprListAppend(pParse,0, p);
124945 125741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListSetName(pParse, yygotominor.yy14, &yymsp[-2].minor.yy0, 1);
124946 125742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListCheckLength(pParse, yygotominor.yy14, "index");
124947 125743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( yygotominor.yy14 ) yygotominor.yy14->a[yygotominor.yy14->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy328;
124948 125744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -126197,13 +126993,15 @@
126197 126993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zTail = &zSql[i];
126198 126994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126199 126995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);
126200 126996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126201 126997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef YYTRACKMAXSTACKDEPTH
126998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(sqlite3MallocMutex());
126202 126999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,
126203 127000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserStackPeak(pEngine)
126204 127001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
127002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(sqlite3MallocMutex());
126205 127003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* YYDEBUG */
126206 127004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserFree(pEngine, sqlite3_free);
126207 127005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->lookaside.bEnabled = enableLookaside;
126208 127006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
126209 127007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->rc = SQLITE_NOMEM;
@@ -126769,10 +127567,15 @@
126769 127567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_wsd_init(4096, 24);
126770 127568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
126771 127569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
126772 127570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126773 127571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
127572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
127573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the following assert() fails on some obscure processor/compiler
127574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** combination, the work-around is to set the correct pointer
127575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size at compile-time using -DSQLITE_PTRSIZE=n compile-time option */
127576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( SQLITE_PTRSIZE==sizeof(char*) );
126774 127577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126775 127578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If SQLite is already completely initialized, then this call
126776 127579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to sqlite3_initialize() should be a no-op. But the initialization
126777 127580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** must be complete. So isInit must not be set until the very end
126778 127581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of this routine.
@@ -126982,30 +127785,32 @@
126982 127785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Mutex configuration options are only available in a threadsafe
126983 127786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compile.
126984 127787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
126985 127788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-54466-46756 */
126986 127789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_CONFIG_SINGLETHREAD: {
126987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Disable all mutexing */
126988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bCoreMutex = 0;
126989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bFullMutex = 0;
127790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-02748-19096 This option sets the threading mode to
127791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Single-thread. */
127792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bCoreMutex = 0; /* Disable mutex on core */
127793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bFullMutex = 0; /* Disable mutex on connections */
126990 127794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
126991 127795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126992 127796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
126993 127797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */
126994 127798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_CONFIG_MULTITHREAD: {
126995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Disable mutexing of database connections */
126996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Enable mutexing of core data structures */
126997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bCoreMutex = 1;
126998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bFullMutex = 0;
127799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-14374-42468 This option sets the threading mode to
127800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Multi-thread. */
127801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bCoreMutex = 1; /* Enable mutex on core */
127802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bFullMutex = 0; /* Disable mutex on connections */
126999 127803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
127000 127804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
127001 127805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
127002 127806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */
127003 127807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_CONFIG_SERIALIZED: {
127004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Enable all mutexing */
127005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bCoreMutex = 1;
127006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.bFullMutex = 1;
127808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-41220-51800 This option sets the threading mode to
127809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Serialized. */
127810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bCoreMutex = 1; /* Enable mutex on core */
127811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bFullMutex = 1; /* Enable mutex on connections */
127007 127812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
127008 127813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
127009 127814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
127010 127815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */
127011 127816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_CONFIG_MUTEX: {
@@ -127113,11 +127918,12 @@
127113 127918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */
127114 127919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
127115 127920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_CONFIG_HEAP: {
127116 127921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* EVIDENCE-OF: R-19854-42126 There are three arguments to
127117 127922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the
127118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** number of bytes in the memory buffer, and the minimum allocation size. */
127923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of bytes in the memory buffer, and the minimum allocation size.
127924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
127119 127925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
127120 127926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.nHeap = va_arg(ap, int);
127121 127927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.mnReq = va_arg(ap, int);
127122 127928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
127123 127929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.mnReq<1 ){
@@ -127218,11 +128024,13 @@
127218 128024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be
127219 128025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** silently truncated if necessary so that it does not exceed the
127220 128026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE
127221 128027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compile-time option.
127222 128028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
127223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ) mxMmap = SQLITE_MAX_MMAP_SIZE;
128029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){
128030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mxMmap = SQLITE_MAX_MMAP_SIZE;
128031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
127224 128032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE;
127225 128033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( szMmap>mxMmap) szMmap = mxMmap;
127226 128034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.mxMmap = mxMmap;
127227 128035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.szMmap = szMmap;
127228 128036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -129062,11 +129870,23 @@
129062 129870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
129063 129871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFile = sqlite3_malloc(nByte);
129064 129872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !zFile ) return SQLITE_NOMEM;
129065 129873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129066 129874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIn = 5;
129067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_ALLOW_URI_AUTHORITY
129875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ALLOW_URI_AUTHORITY
129876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(zUri+5, "///", 3)==0 ){
129877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iIn = 7;
129878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The following condition causes URIs with five leading / characters
129879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** like file://///host/path to be converted into UNCs like //host/path.
129880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The correct URI for that UNC has only two or four leading / characters
129881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file://host/path or file:////host/path. But 5 leading slashes is a
129882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** common error, we are told, so we handle it as a special case. */
129883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(zUri+7, "///", 3)==0 ){ iIn++; }
129884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( strncmp(zUri+5, "//localhost/", 12)==0 ){
129885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iIn = 16;
129886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
129887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
129068 129888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Discard the scheme and authority segments of the URI. */
129069 129889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUri[5]=='/' && zUri[6]=='/' ){
129070 129890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIn = 7;
129071 129891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
129072 129892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
@@ -129505,11 +130325,12 @@
129505 130325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
129506 130326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129507 130327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
opendb_out:
129508 130328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zOpen);
129509 130329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db ){
129510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
130330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( db->mutex!=0 || isThreadsafe==0
130331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || sqlite3GlobalConfig.bFullMutex==0 );
129511 130332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
129512 130333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
129513 130334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_errcode(db);
129514 130335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db!=0 || rc==SQLITE_NOMEM );
129515 130336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_NOMEM ){
@@ -130250,21 +131071,21 @@
130250 131071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_TESTCTRL_ISINIT: {
130251 131072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR;
130252 131073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
130253 131074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
130254 131075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, onOff, tnum);
131076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, onOff, tnum);
130256 131077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
130257 131078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This test control is used to create imposter tables. "db" is a pointer
130258 131079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the database connection. dbName is the database name (ex: "main" or
130259 131080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "temp") which will receive the imposter. "onOff" turns imposter mode on
130260 131081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or off. "tnum" is the root page of the b-tree to which the imposter
130261 131082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table should connect.
130262 131083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
130263 131084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Enable imposter mode only when the schema has already been parsed. Then
130264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** run a single CREATE TABLE statement to construct the imposter table in the
130265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parsed schema. Then turn imposter mode back off again.
131085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** run a single CREATE TABLE statement to construct the imposter table in
131086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the parsed schema. Then turn imposter mode back off again.
130266 131087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
130267 131088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If onOff==0 and tnum>0 then reset the schema for all databases, causing
130268 131089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the schema to be reparsed the next time it is needed. This has the
130269 131090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** effect of erasing all imposter tables.
130270 131091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -132506,15 +133327,20 @@
132506 133327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the output value undefined. Otherwise SQLITE_OK is returned.
132507 133328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
132508 133329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used when parsing the "prefix=" FTS4 parameter.
132509 133330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132510 133331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3GobbleInt(const char **pp, int *pnOut){
133332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int MAX_NPREFIX = 10000000;
132511 133333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *p; /* Iterator pointer */
132512 133334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nInt = 0; /* Output value */
132513 133335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132514 133336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=*pp; p[0]>='0' && p[0]<='9'; p++){
132515 133337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nInt = nInt * 10 + (p[0] - '0');
133338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nInt>MAX_NPREFIX ){
133339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nInt = 0;
133340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
133341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
132516 133342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132517 133343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==*pp ) return SQLITE_ERROR;
132518 133344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOut = nInt;
132519 133345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = p;
132520 133346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -132553,27 +133379,33 @@
132553 133379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132554 133380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132555 133381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132556 133382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex);
132557 133383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*apIndex = aIndex;
132558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pnIndex = nIndex;
132559 133384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aIndex ){
132560 133385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
132561 133386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132562 133387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132563 133388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex);
132564 133389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zParam ){
132565 133390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *p = zParam;
132566 133391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
132567 133392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<nIndex; i++){
132568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nPrefix;
133393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPrefix = 0;
132569 133394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fts3GobbleInt(&p, &nPrefix) ) return SQLITE_ERROR;
132570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aIndex[i].nPrefix = nPrefix;
133395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nPrefix>=0 );
133396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nPrefix==0 ){
133397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nIndex--;
133398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i--;
133399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
133400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aIndex[i].nPrefix = nPrefix;
133401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
132571 133402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p++;
132572 133403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132573 133404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132574 133405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnIndex = nIndex;
132575 133407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
132576 133408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
132577 133409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132578 133410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
132579 133411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called when initializing an FTS4 table that uses the
@@ -140349,11 +141181,11 @@
140349 141181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nName = sqlite3_value_bytes(argv[0])+1;
140350 141182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140351 141183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( argc==2 ){
140352 141184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pOld;
140353 141185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = sqlite3_value_bytes(argv[1]);
140354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n!=sizeof(pPtr) ){
141186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName==0 || n!=sizeof(pPtr) ){
140355 141187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error(context, "argument type mismatch", -1);
140356 141188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
140357 141189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140358 141190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPtr = *(void **)sqlite3_value_blob(argv[1]);
140359 141191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
@@ -140360,11 +141192,13 @@
140360 141192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOld==pPtr ){
140361 141193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error(context, "out of memory", -1);
140362 141194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
140363 141195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140364 141196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
140365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
141197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName ){
141198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
141199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140366 141200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pPtr ){
140367 141201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
140368 141202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error(context, zErr, -1);
140369 141203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zErr);
140370 141204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
@@ -140441,10 +141275,14 @@
140441 141275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy = sqlite3_mprintf("%s", zArg);
140442 141276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !zCopy ) return SQLITE_NOMEM;
140443 141277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zEnd = &zCopy[strlen(zCopy)];
140444 141278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140445 141279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = (char *)sqlite3Fts3NextToken(zCopy, &n);
141280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ){
141281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( n==0 );
141282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = zCopy;
141283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140446 141284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[n] = '\0';
140447 141285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3Dequote(z);
140448 141286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140449 141287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
140450 141288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !m ){
@@ -143086,11 +143924,14 @@
143086 143924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143087 143925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is a comparison function used as a qsort() callback when sorting
143088 143926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an array of pending terms by term. This occurs as part of flushing
143089 143927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the contents of the pending-terms hash table to the database.
143090 143928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
143929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int SQLITE_CDECL fts3CompareElemByTerm(
143930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const void *lhs,
143931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const void *rhs
143932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
143092 143933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
143093 143934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
143094 143935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
143095 143936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs);
143096 143937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143097 143938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!