From a21494ade639e2e270b448ec6c5325b4be0ec7c5 Mon Sep 17 00:00:00 2001 From: DrKLO Date: Sat, 1 Mar 2014 02:28:25 +0400 Subject: [PATCH] Update to 1.3.26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Applied patch from https://github.com/DrKLO/Telegram/pull/99 . Thanks. Added German localization. Thanks to all from https://github.com/DrKLO/Telegram/pull/129 Experimental audio (will not go to market yet, we will switch to opus codec) Improved text drawing perfomance (now Telegram can draw even «War and Peace» in one message) Ability to send multiple photos and documents from external apps Contacts fixes Memory usage optimizations in network code (receiving data) Partly switched to native ByteBuffers (decoding received data) Added support of Telegram API Layer 12 Bug fixes --- TMessagesProj/jni/jni.c | 34 +- TMessagesProj/jni/sqlite3.c | 16521 +++++++++------- TMessagesProj/jni/sqlite3.h | 196 +- .../libs/armeabi-v7a/libtmessages.so | Bin 602984 -> 619412 bytes TMessagesProj/libs/armeabi/libtmessages.so | Bin 557840 -> 561980 bytes TMessagesProj/libs/x86/libtmessages.so | Bin 1004352 -> 1028992 bytes TMessagesProj/src/main/AndroidManifest.xml | 26 +- .../main/java/jawnae/pyronet/ByteStream.java | 13 +- .../main/java/jawnae/pyronet/PyroClient.java | 23 +- .../jawnae/pyronet/PyroClientAdapter.java | 12 +- .../jawnae/pyronet/PyroClientListener.java | 2 - .../java/jawnae/pyronet/PyroSelector.java | 27 +- .../org/telegram/PhoneFormat/PhoneFormat.java | 9 +- .../telegram/messenger/AbsSerializedData.java | 35 + .../telegram/messenger/BackgroundService.java | 61 - .../telegram/messenger/BuffersStorage.java | 136 + .../telegram/messenger/ByteBufferDesc.java | 384 + .../messenger/ConnectionsManager.java | 111 +- .../messenger/ContactsController.java | 776 +- .../org/telegram/messenger/Datacenter.java | 32 +- .../messenger/ExportAuthorizationAction.java | 3 - .../telegram/messenger/FileLoadOperation.java | 49 +- .../org/telegram/messenger/FileLoader.java | 74 +- .../messenger/FileUploadOperation.java | 5 +- .../messenger/GcmBroadcastReceiver.java | 40 +- .../org/telegram/messenger/GcmService.java | 42 - .../telegram/messenger/HandshakeAction.java | 33 +- .../telegram/messenger/MediaController.java | 454 + .../messenger/MessagesController.java | 370 +- .../telegram/messenger/MessagesStorage.java | 315 +- .../telegram/messenger/NetworkMessage.java | 2 - .../org/telegram/messenger/RPCRequest.java | 3 - .../telegram/messenger/SerializedData.java | 55 +- .../{TL => messenger}/TLClassStore.java | 12 +- .../telegram/{TL => messenger}/TLObject.java | 14 +- .../org/telegram/{TL => messenger}/TLRPC.java | 1697 +- .../org/telegram/messenger/TcpConnection.java | 184 +- .../org/telegram/messenger/UserConfig.java | 36 +- .../org/telegram/messenger/Utilities.java | 67 +- .../org/telegram/objects/MessageObject.java | 162 +- .../org/telegram/objects/PhotoObject.java | 4 +- .../ui/Adapters/BaseFragmentAdapter.java | 41 + .../ui/Adapters/ContactsActivityAdapter.java | 231 + .../ContactsActivitySearchAdapter.java | 187 + .../org/telegram/ui/ApplicationActivity.java | 27 +- .../org/telegram/ui/ApplicationLoader.java | 8 +- .../java/org/telegram/ui/Cells/BaseCell.java | 9 - .../org/telegram/ui/Cells/ChatAudioCell.java | 396 + .../org/telegram/ui/Cells/ChatBaseCell.java | 461 + .../telegram/ui/Cells/ChatMessageCell.java | 197 +- .../org/telegram/ui/Cells/ChatOrUserCell.java | 31 +- .../org/telegram/ui/Cells/DialogCell.java | 15 +- .../java/org/telegram/ui/ChatActivity.java | 607 +- .../org/telegram/ui/ChatProfileActivity.java | 12 +- .../ui/ChatProfileChangeNameActivity.java | 2 +- .../org/telegram/ui/ContactAddActivity.java | 12 +- .../org/telegram/ui/ContactsActivity.java | 457 +- .../telegram/ui/CountrySelectActivity.java | 3 + .../telegram/ui/DocumentSelectActivity.java | 12 +- .../org/telegram/ui/GalleryImageViewer.java | 42 +- .../org/telegram/ui/GroupCreateActivity.java | 16 +- .../telegram/ui/GroupCreateFinalActivity.java | 2 +- .../org/telegram/ui/IdenticonActivity.java | 2 +- .../java/org/telegram/ui/LaunchActivity.java | 131 +- .../org/telegram/ui/LocationActivity.java | 2 +- .../telegram/ui/LoginActivityPhoneView.java | 5 +- .../ui/LoginActivityRegisterView.java | 4 +- .../org/telegram/ui/LoginActivitySmsView.java | 8 +- .../java/org/telegram/ui/MediaActivity.java | 37 +- .../org/telegram/ui/MessagesActivity.java | 7 +- .../org/telegram/ui/SettingsActivity.java | 115 +- .../org/telegram/ui/SettingsBlockedUsers.java | 4 +- .../ui/SettingsChangeNameActivity.java | 5 +- .../ui/SettingsNotificationsActivity.java | 4 +- .../ui/SettingsWallpapersActivity.java | 7 +- .../org/telegram/ui/UserProfileActivity.java | 17 +- .../org/telegram/ui/Views/AvatarUpdater.java | 2 +- .../telegram/ui/Views/BackupImageView.java | 2 +- .../org/telegram/ui/Views/ImageReceiver.java | 2 +- .../org/telegram/ui/Views/MessageLayout.java | 69 - .../telegram/ui/Views/NotificationView.java | 2 +- .../org/telegram/ui/Views/ProgressView.java | 63 + .../ui/Views/SectionedBaseAdapter.java | 4 +- .../java/org/telegram/ui/Views/SeekBar.java | 140 +- .../main/res/drawable-hdpi/audiocancel1.png | Bin 0 -> 438 bytes .../drawable-hdpi/audiocancel1_pressed.png | Bin 0 -> 441 bytes .../main/res/drawable-hdpi/audiocancel2.png | Bin 0 -> 439 bytes .../drawable-hdpi/audiocancel2_pressed.png | Bin 0 -> 443 bytes .../src/main/res/drawable-hdpi/audioload1.png | Bin 0 -> 229 bytes .../res/drawable-hdpi/audioload1_pressed.png | Bin 0 -> 229 bytes .../src/main/res/drawable-hdpi/audioload2.png | Bin 0 -> 229 bytes .../res/drawable-hdpi/audioload2_pressed.png | Bin 0 -> 229 bytes .../main/res/drawable-ldpi/audiocancel1.png | Bin 0 -> 283 bytes .../drawable-ldpi/audiocancel1_pressed.png | Bin 0 -> 283 bytes .../main/res/drawable-ldpi/audiocancel2.png | Bin 0 -> 283 bytes .../drawable-ldpi/audiocancel2_pressed.png | Bin 0 -> 287 bytes .../src/main/res/drawable-ldpi/audioload1.png | Bin 0 -> 179 bytes .../res/drawable-ldpi/audioload1_pressed.png | Bin 0 -> 179 bytes .../src/main/res/drawable-ldpi/audioload2.png | Bin 0 -> 179 bytes .../res/drawable-ldpi/audioload2_pressed.png | Bin 0 -> 179 bytes .../main/res/drawable-mdpi/audiocancel1.png | Bin 0 -> 321 bytes .../drawable-mdpi/audiocancel1_pressed.png | Bin 0 -> 322 bytes .../main/res/drawable-mdpi/audiocancel2.png | Bin 0 -> 318 bytes .../drawable-mdpi/audiocancel2_pressed.png | Bin 0 -> 320 bytes .../src/main/res/drawable-mdpi/audioload1.png | Bin 0 -> 189 bytes .../res/drawable-mdpi/audioload1_pressed.png | Bin 0 -> 189 bytes .../src/main/res/drawable-mdpi/audioload2.png | Bin 0 -> 189 bytes .../res/drawable-mdpi/audioload2_pressed.png | Bin 0 -> 187 bytes .../src/main/res/drawable-mdpi/ic_send.png | Bin 309 -> 381 bytes .../main/res/drawable-xhdpi/audiocancel1.png | Bin 0 -> 494 bytes .../drawable-xhdpi/audiocancel1_pressed.png | Bin 0 -> 493 bytes .../main/res/drawable-xhdpi/audiocancel2.png | Bin 0 -> 494 bytes .../drawable-xhdpi/audiocancel2_pressed.png | Bin 0 -> 495 bytes .../main/res/drawable-xhdpi/audioload1.png | Bin 0 -> 262 bytes .../res/drawable-xhdpi/audioload1_pressed.png | Bin 0 -> 262 bytes .../main/res/drawable-xhdpi/audioload2.png | Bin 0 -> 259 bytes .../res/drawable-xhdpi/audioload2_pressed.png | Bin 0 -> 263 bytes .../main/res/drawable-xxhdpi/audiocancel1.png | Bin 0 -> 573 bytes .../drawable-xxhdpi/audiocancel1_pressed.png | Bin 0 -> 565 bytes .../main/res/drawable-xxhdpi/audiocancel2.png | Bin 0 -> 549 bytes .../drawable-xxhdpi/audiocancel2_pressed.png | Bin 0 -> 548 bytes .../main/res/drawable-xxhdpi/audioload1.png | Bin 0 -> 328 bytes .../drawable-xxhdpi/audioload1_pressed.png | Bin 0 -> 329 bytes .../main/res/drawable-xxhdpi/audioload2.png | Bin 0 -> 330 bytes .../drawable-xxhdpi/audioload2_pressed.png | Bin 0 -> 327 bytes .../src/main/res/drawable/pause1_states.xml | 6 - .../src/main/res/drawable/pause2_states.xml | 6 - .../src/main/res/drawable/play1_states.xml | 6 - .../src/main/res/drawable/play2_states.xml | 6 - .../chat_group_incoming_forward_layout.xml | 87 - .../chat_group_incoming_text_layout.xml | 64 - .../layout/chat_incoming_forward_layout.xml | 66 - .../res/layout/chat_incoming_text_layout.xml | 42 - .../src/main/res/layout/chat_layout.xml | 88 +- .../res/layout/chat_outgoing_audio_layout.xml | 91 - .../layout/chat_outgoing_forward_layout.xml | 92 - .../res/layout/chat_outgoing_text_layout.xml | 68 - .../src/main/res/values-ar/strings.xml | 5 +- .../src/main/res/values-de/strings.xml | 354 + .../src/main/res/values-es/strings.xml | 9 +- TMessagesProj/src/main/res/values/strings.xml | 1 + 141 files changed, 15643 insertions(+), 10767 deletions(-) create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/AbsSerializedData.java delete mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/BackgroundService.java create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/BuffersStorage.java create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/ByteBufferDesc.java delete mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/GcmService.java create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java rename TMessagesProj/src/main/java/org/telegram/{TL => messenger}/TLClassStore.java (98%) rename TMessagesProj/src/main/java/org/telegram/{TL => messenger}/TLObject.java (66%) rename TMessagesProj/src/main/java/org/telegram/{TL => messenger}/TLRPC.java (83%) create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Adapters/BaseFragmentAdapter.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivityAdapter.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivitySearchAdapter.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatAudioCell.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatBaseCell.java delete mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Views/MessageLayout.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Views/ProgressView.java create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audiocancel1.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audiocancel1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audiocancel2.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audiocancel2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audioload1.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audioload1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audioload2.png create mode 100755 TMessagesProj/src/main/res/drawable-hdpi/audioload2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audiocancel1.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audiocancel1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audiocancel2.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audiocancel2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audioload1.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audioload1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audioload2.png create mode 100755 TMessagesProj/src/main/res/drawable-ldpi/audioload2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audiocancel1.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audiocancel1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audiocancel2.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audiocancel2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audioload1.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audioload1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audioload2.png create mode 100755 TMessagesProj/src/main/res/drawable-mdpi/audioload2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audiocancel1.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audiocancel1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audiocancel2.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audiocancel2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audioload1.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audioload1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audioload2.png create mode 100755 TMessagesProj/src/main/res/drawable-xhdpi/audioload2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audiocancel1.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audiocancel1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audiocancel2.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audiocancel2_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audioload1.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audioload1_pressed.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audioload2.png create mode 100755 TMessagesProj/src/main/res/drawable-xxhdpi/audioload2_pressed.png delete mode 100644 TMessagesProj/src/main/res/drawable/pause1_states.xml delete mode 100644 TMessagesProj/src/main/res/drawable/pause2_states.xml delete mode 100644 TMessagesProj/src/main/res/drawable/play1_states.xml delete mode 100644 TMessagesProj/src/main/res/drawable/play2_states.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_group_incoming_forward_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_group_incoming_text_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_incoming_forward_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_incoming_text_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_outgoing_audio_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_outgoing_forward_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_outgoing_text_layout.xml create mode 100644 TMessagesProj/src/main/res/values-de/strings.xml diff --git a/TMessagesProj/jni/jni.c b/TMessagesProj/jni/jni.c index 9f03d9be..452ac5b5 100644 --- a/TMessagesProj/jni/jni.c +++ b/TMessagesProj/jni/jni.c @@ -7,7 +7,7 @@ #include "aes.h" #include "log.h" -JNIEXPORT jbyteArray Java_org_telegram_messenger_Utilities_aesIgeEncryption(JNIEnv *env, jclass class, jbyteArray _what, jbyteArray _key, jbyteArray _iv, jboolean encrypt, jboolean changeIv) { +JNIEXPORT jbyteArray Java_org_telegram_messenger_Utilities_aesIgeEncryption(JNIEnv *env, jclass class, jbyteArray _what, jbyteArray _key, jbyteArray _iv, jboolean encrypt, jboolean changeIv, jint l) { unsigned char *what = (unsigned char *)(*env)->GetByteArrayElements(env, _what, NULL); unsigned char *key = (unsigned char *)(*env)->GetByteArrayElements(env, _key, NULL); unsigned char *__iv = (unsigned char *)(*env)->GetByteArrayElements(env, _iv, NULL); @@ -20,7 +20,7 @@ JNIEXPORT jbyteArray Java_org_telegram_messenger_Utilities_aesIgeEncryption(JNIE iv = __iv; } - int len = (*env)->GetArrayLength(env, _what); + int len = l == 0 ? (*env)->GetArrayLength(env, _what) : l; AES_KEY akey; if (!encrypt) { AES_set_decrypt_key(key, (*env)->GetArrayLength(env, _key) * 8, &akey); @@ -40,6 +40,36 @@ JNIEXPORT jbyteArray Java_org_telegram_messenger_Utilities_aesIgeEncryption(JNIE return _what; } +JNIEXPORT void Java_org_telegram_messenger_Utilities_aesIgeEncryption2(JNIEnv *env, jclass class, jobject _what, jbyteArray _key, jbyteArray _iv, jboolean encrypt, jboolean changeIv, jint l) { + jbyte *what = (*env)->GetDirectBufferAddress(env, _what); + unsigned char *key = (unsigned char *)(*env)->GetByteArrayElements(env, _key, NULL); + unsigned char *__iv = (unsigned char *)(*env)->GetByteArrayElements(env, _iv, NULL); + unsigned char *iv = 0; + + if (!changeIv) { + iv = (unsigned char *)malloc((*env)->GetArrayLength(env, _iv)); + memcpy(iv, __iv, (*env)->GetArrayLength(env, _iv)); + } else { + iv = __iv; + } + + AES_KEY akey; + if (!encrypt) { + AES_set_decrypt_key(key, (*env)->GetArrayLength(env, _key) * 8, &akey); + AES_ige_encrypt(what, what, l, &akey, iv, AES_DECRYPT); + } else { + AES_set_encrypt_key(key, (*env)->GetArrayLength(env, _key) * 8, &akey); + AES_ige_encrypt(what, what, l, &akey, iv, AES_ENCRYPT); + } + (*env)->ReleaseByteArrayElements(env, _key, key, JNI_ABORT); + if (!changeIv) { + (*env)->ReleaseByteArrayElements(env, _iv, __iv, JNI_ABORT); + free(iv); + } else { + (*env)->ReleaseByteArrayElements(env, _iv, __iv, 0); + } +} + uint64_t gcd(uint64_t a, uint64_t b){ while(a != 0 && b != 0) { while((b & 1) == 0) b >>= 1; diff --git a/TMessagesProj/jni/sqlite3.c b/TMessagesProj/jni/sqlite3.c index 8da37bff..d0a1ec23 100644 --- a/TMessagesProj/jni/sqlite3.c +++ b/TMessagesProj/jni/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.8.1. By combining all the individual C code files into this +** version 3.8.3.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -21,7 +21,6 @@ #define SQLITE_AMALGAMATION 1 #define SQLITE_ENABLE_FTS3 1 #define SQLITE_ENABLE_FTS3_PARENTHESIS 1 -//#define SQLITE_TEMP_STORE 3 #ifndef SQLITE_PRIVATE # define SQLITE_PRIVATE static @@ -139,9 +138,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.8.1" -#define SQLITE_VERSION_NUMBER 3008001 -#define SQLITE_SOURCE_ID "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a" +#define SQLITE_VERSION "3.8.3.1" +#define SQLITE_VERSION_NUMBER 3008003 +#define SQLITE_SOURCE_ID "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -402,7 +401,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -963,6 +993,10 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_BUSYHANDLER 15 #define SQLITE_FCNTL_TEMPFILENAME 16 #define SQLITE_FCNTL_MMAP_SIZE 18 +#define SQLITE_FCNTL_TRACE 19 +#define SQLITE_FCNTL_HAS_MOVED 20 +#define SQLITE_FCNTL_SYNC 21 +#define SQLITE_FCNTL_COMMIT_PHASETWO 22 /* ** CAPI3REF: Mutex Handle @@ -1407,7 +1441,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); ** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, ** that causes the corresponding memory allocation to fail. ** -** The xInit method initializes the memory allocator. (For example, +** The xInit method initializes the memory allocator. For example, ** it might allocate any require mutexes or initialize internal data ** structures. The xShutdown method is invoked (indirectly) by ** [sqlite3_shutdown()] and should deallocate any resources acquired @@ -1709,6 +1743,13 @@ struct sqlite3_mem_methods { ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ ** ^If either argument to this option is negative, then that argument is ** changed to its compile-time default. +** +** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] +**
SQLITE_CONFIG_WIN32_HEAPSIZE +**
^This option is only available if SQLite is compiled for Windows +** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined. +** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value +** that specifies the maximum size of the created heap. ** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -1733,6 +1774,7 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ /* ** CAPI3REF: Database Connection Configuration Options @@ -1809,19 +1851,21 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); /* ** CAPI3REF: Last Insert Rowid ** -** ^Each entry in an SQLite table has a unique 64-bit signed +** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables) +** has a unique 64-bit signed ** integer key called the [ROWID | "rowid"]. ^The rowid is always available ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those ** names are not also used by explicitly declared columns. ^If ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** ^This routine returns the [rowid] of the most recent -** successful [INSERT] into the database from the [database connection] -** in the first argument. ^As of SQLite version 3.7.7, this routines -** records the last insert rowid of both ordinary tables and [virtual tables]. -** ^If no successful [INSERT]s -** have ever occurred on that database connection, zero is returned. +** ^The sqlite3_last_insert_rowid(D) interface returns the [rowid] of the +** most recent successful [INSERT] into a rowid table or [virtual table] +** on database connection D. +** ^Inserts into [WITHOUT ROWID] tables are not recorded. +** ^If no successful [INSERT]s into rowid tables +** have ever occurred on the database connection D, +** then sqlite3_last_insert_rowid(D) returns zero. ** ** ^(If an [INSERT] occurs within a trigger or within a [virtual table] ** method, then this routine will return the [rowid] of the inserted @@ -2387,11 +2431,13 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); ** applications to access the same PRNG for other purposes. ** ** ^A call to this routine stores N bytes of randomness into buffer P. +** ^If N is less than one, then P can be a NULL pointer. ** -** ^The first time this routine is invoked (either internally or by -** the application) the PRNG is seeded using randomness obtained -** from the xRandomness method of the default [sqlite3_vfs] object. -** ^On all subsequent invocations, the pseudo-randomness is generated +** ^If this routine has not been previously called or if the previous +** call had N less than one, then the PRNG is seeded using randomness +** obtained from the xRandomness method of the default [sqlite3_vfs] object. +** ^If the previous call to this routine had an N of 1 or more then +** the pseudo-randomness is generated ** internally and without recourse to the [sqlite3_vfs] xRandomness ** method. */ @@ -2551,6 +2597,7 @@ SQLITE_API int sqlite3_set_authorizer( #define SQLITE_FUNCTION 31 /* NULL Function Name */ #define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ #define SQLITE_COPY 0 /* No longer used */ +#define SQLITE_RECURSIVE 33 /* NULL NULL */ /* ** CAPI3REF: Tracing And Profiling Functions @@ -3131,7 +3178,6 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** choice of query plan if the parameter is the left-hand side of a [LIKE] ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. -** the ** ** */ @@ -3793,19 +3839,19 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** ** NULL INTEGER Result is 0 ** NULL FLOAT Result is 0.0 -** NULL TEXT Result is NULL pointer -** NULL BLOB Result is NULL pointer +** NULL TEXT Result is a NULL pointer +** NULL BLOB Result is a NULL pointer ** INTEGER FLOAT Convert from integer to float ** INTEGER TEXT ASCII rendering of the integer ** INTEGER BLOB Same as INTEGER->TEXT -** FLOAT INTEGER Convert from float to integer +** FLOAT INTEGER [CAST] to INTEGER ** FLOAT TEXT ASCII rendering of the float -** FLOAT BLOB Same as FLOAT->TEXT -** TEXT INTEGER Use atoi() -** TEXT FLOAT Use atof() +** FLOAT BLOB [CAST] to BLOB +** TEXT INTEGER [CAST] to INTEGER +** TEXT FLOAT [CAST] to REAL ** TEXT BLOB No change -** BLOB INTEGER Convert to TEXT then use atoi() -** BLOB FLOAT Convert to TEXT then use atof() +** BLOB INTEGER [CAST] to INTEGER +** BLOB FLOAT [CAST] to REAL ** BLOB TEXT Add a zero terminator if needed ** ** )^ @@ -3861,7 +3907,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or ** [sqlite3_finalize()] is called. ^The memory space used to hold strings ** and BLOBs is freed automatically. Do not pass the pointers returned -** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into +** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** ** ^(If a memory allocation error occurs during the evaluation of any @@ -3970,15 +4016,24 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); ** ** ^The fourth parameter, eTextRep, specifies what ** [SQLITE_UTF8 | text encoding] this SQL function prefers for -** its parameters. Every SQL function implementation must be able to work -** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be -** more efficient with one encoding than another. ^An application may -** invoke sqlite3_create_function() or sqlite3_create_function16() multiple -** times with the same function but with different values of eTextRep. +** its parameters. The application should set this parameter to +** [SQLITE_UTF16LE] if the function implementation invokes +** [sqlite3_value_text16le()] on an input, or [SQLITE_UTF16BE] if the +** implementation invokes [sqlite3_value_text16be()] on an input, or +** [SQLITE_UTF16] if [sqlite3_value_text16()] is used, or [SQLITE_UTF8] +** otherwise. ^The same SQL function may be registered multiple times using +** different preferred text encodings, with different implementations for +** each encoding. ** ^When multiple implementations of the same function are available, SQLite ** will pick the one that involves the least amount of data conversion. -** If there is only a single implementation which does not care what text -** encoding is used, then the fourth argument should be [SQLITE_ANY]. +** +** ^The fourth parameter may optionally be ORed with [SQLITE_DETERMINISTIC] +** to signal that the function will always return the same result given +** the same inputs within a single SQL statement. Most SQL functions are +** deterministic. The built-in [random()] SQL function is an example of a +** function that is not deterministic. The SQLite query planner is able to +** perform additional optimizations on deterministic functions, so use +** of the [SQLITE_DETERMINISTIC] flag is recommended where possible. ** ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ @@ -4064,9 +4119,19 @@ SQLITE_API int sqlite3_create_function_v2( #define SQLITE_UTF16LE 2 #define SQLITE_UTF16BE 3 #define SQLITE_UTF16 4 /* Use native byte order */ -#define SQLITE_ANY 5 /* sqlite3_create_function only */ +#define SQLITE_ANY 5 /* Deprecated */ #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ +/* +** CAPI3REF: Function Flags +** +** These constants may be ORed together with the +** [SQLITE_UTF8 | preferred text encoding] as the fourth argument +** to [sqlite3_create_function()], [sqlite3_create_function16()], or +** [sqlite3_create_function_v2()]. +*/ +#define SQLITE_DETERMINISTIC 0x800 + /* ** CAPI3REF: Deprecated Functions ** DEPRECATED @@ -4838,12 +4903,13 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ** ^The sqlite3_update_hook() interface registers a callback function ** with the [database connection] identified by the first argument -** to be invoked whenever a row is updated, inserted or deleted. +** to be invoked whenever a row is updated, inserted or deleted in +** a rowid table. ** ^Any callback set by a previous call to this function ** for the same database connection is overridden. ** ** ^The second argument is a pointer to the function to invoke when a -** row is updated, inserted or deleted. +** row is updated, inserted or deleted in a rowid table. ** ^The first argument to the callback is a copy of the third argument ** to sqlite3_update_hook(). ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], @@ -4856,6 +4922,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ** ^(The update hook is not invoked when internal system tables are ** modified (i.e. sqlite_master and sqlite_sequence).)^ +** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. ** ** ^In the current implementation, the update hook ** is not invoked when duplication rows are deleted because of an @@ -4937,8 +5004,8 @@ SQLITE_API int sqlite3_release_memory(int); ** ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap ** memory as possible from database connection D. Unlike the -** [sqlite3_release_memory()] interface, this interface is effect even -** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is +** [sqlite3_release_memory()] interface, this interface is in effect even +** when the [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is ** omitted. ** ** See also: [sqlite3_release_memory()] @@ -5313,10 +5380,22 @@ struct sqlite3_module { ** the correct order to satisfy the ORDER BY clause so that no separate ** sorting step is required. ** -** ^The estimatedCost value is an estimate of the cost of doing the -** particular lookup. A full scan of a table with N entries should have -** a cost of N. A binary search of a table of N entries should have a -** cost of approximately log(N). +** ^The estimatedCost value is an estimate of the cost of a particular +** strategy. A cost of N indicates that the cost of the strategy is similar +** to a linear scan of an SQLite table with N rows. A cost of log(N) +** indicates that the expense of the operation is similar to that of a +** binary search on a unique indexed field of an SQLite table with N rows. +** +** ^The estimatedRows value is an estimate of the number of rows that +** will be returned by the strategy. +** +** IMPORTANT: The estimatedRows field was added to the sqlite3_index_info +** structure for SQLite version 3.8.2. If a virtual table extension is +** used with an SQLite version earlier than 3.8.2, the results of attempting +** to read or write the estimatedRows field are undefined (but are likely +** to included crashing the application). The estimatedRows field should +** therefore only be used if [sqlite3_libversion_number()] returns a +** value greater than or equal to 3008002. */ struct sqlite3_index_info { /* Inputs */ @@ -5341,7 +5420,9 @@ struct sqlite3_index_info { char *idxStr; /* String, possibly obtained from sqlite3_malloc */ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ int orderByConsumed; /* True if output is already ordered */ - double estimatedCost; /* Estimated cost of using this index */ + double estimatedCost; /* Estimated cost of using this index */ + /* Fields below are only available in SQLite 3.8.2 and later */ + sqlite3_int64 estimatedRows; /* Estimated number of rows returned */ }; /* @@ -5545,6 +5626,9 @@ typedef struct sqlite3_blob sqlite3_blob; ** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** +** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID] +** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables. +** ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces ** and the built-in [zeroblob] SQL function can be used, if desired, ** to create an empty, zero-filled blob in which to read or write using @@ -6068,7 +6152,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 #define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 #define SQLITE_TESTCTRL_EXPLAIN_STMT 19 -#define SQLITE_TESTCTRL_LAST 19 +#define SQLITE_TESTCTRL_NEVER_CORRUPT 20 +#define SQLITE_TESTCTRL_LAST 20 /* ** CAPI3REF: SQLite Runtime Status @@ -7762,6 +7847,13 @@ struct sqlite3_rtree_geometry { # undef NDEBUG #endif +/* +** Enable SQLITE_ENABLE_EXPLAIN_COMMENTS if SQLITE_DEBUG is turned on. +*/ +#if !defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) && defined(SQLITE_DEBUG) +# define SQLITE_ENABLE_EXPLAIN_COMMENTS 1 +#endif + /* ** The testcase() macro is used to aid in coverage testing. When ** doing coverage testing, the condition inside the argument to @@ -7954,163 +8046,165 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); /************** Continuing where we left off in sqliteInt.h ******************/ /************** Include parse.h in the middle of sqliteInt.h *****************/ /************** Begin file parse.h *******************************************/ -#define TK_SEMI 1 -#define TK_EXPLAIN 2 -#define TK_QUERY 3 -#define TK_PLAN 4 -#define TK_BEGIN 5 -#define TK_TRANSACTION 6 -#define TK_DEFERRED 7 -#define TK_IMMEDIATE 8 -#define TK_EXCLUSIVE 9 -#define TK_COMMIT 10 -#define TK_END 11 -#define TK_ROLLBACK 12 -#define TK_SAVEPOINT 13 -#define TK_RELEASE 14 -#define TK_TO 15 -#define TK_TABLE 16 -#define TK_CREATE 17 -#define TK_IF 18 -#define TK_NOT 19 -#define TK_EXISTS 20 -#define TK_TEMP 21 -#define TK_LP 22 -#define TK_RP 23 -#define TK_AS 24 -#define TK_COMMA 25 -#define TK_ID 26 -#define TK_INDEXED 27 -#define TK_ABORT 28 -#define TK_ACTION 29 -#define TK_AFTER 30 -#define TK_ANALYZE 31 -#define TK_ASC 32 -#define TK_ATTACH 33 -#define TK_BEFORE 34 -#define TK_BY 35 -#define TK_CASCADE 36 -#define TK_CAST 37 -#define TK_COLUMNKW 38 -#define TK_CONFLICT 39 -#define TK_DATABASE 40 -#define TK_DESC 41 -#define TK_DETACH 42 -#define TK_EACH 43 -#define TK_FAIL 44 -#define TK_FOR 45 -#define TK_IGNORE 46 -#define TK_INITIALLY 47 -#define TK_INSTEAD 48 -#define TK_LIKE_KW 49 -#define TK_MATCH 50 -#define TK_NO 51 -#define TK_KEY 52 -#define TK_OF 53 -#define TK_OFFSET 54 -#define TK_PRAGMA 55 -#define TK_RAISE 56 -#define TK_REPLACE 57 -#define TK_RESTRICT 58 -#define TK_ROW 59 -#define TK_TRIGGER 60 -#define TK_VACUUM 61 -#define TK_VIEW 62 -#define TK_VIRTUAL 63 -#define TK_REINDEX 64 -#define TK_RENAME 65 -#define TK_CTIME_KW 66 -#define TK_ANY 67 -#define TK_OR 68 -#define TK_AND 69 -#define TK_IS 70 -#define TK_BETWEEN 71 -#define TK_IN 72 -#define TK_ISNULL 73 -#define TK_NOTNULL 74 -#define TK_NE 75 -#define TK_EQ 76 -#define TK_GT 77 -#define TK_LE 78 -#define TK_LT 79 -#define TK_GE 80 -#define TK_ESCAPE 81 -#define TK_BITAND 82 -#define TK_BITOR 83 -#define TK_LSHIFT 84 -#define TK_RSHIFT 85 -#define TK_PLUS 86 -#define TK_MINUS 87 -#define TK_STAR 88 -#define TK_SLASH 89 -#define TK_REM 90 -#define TK_CONCAT 91 -#define TK_COLLATE 92 -#define TK_BITNOT 93 -#define TK_STRING 94 -#define TK_JOIN_KW 95 -#define TK_CONSTRAINT 96 -#define TK_DEFAULT 97 -#define TK_NULL 98 -#define TK_PRIMARY 99 -#define TK_UNIQUE 100 -#define TK_CHECK 101 -#define TK_REFERENCES 102 -#define TK_AUTOINCR 103 -#define TK_ON 104 -#define TK_INSERT 105 -#define TK_DELETE 106 -#define TK_UPDATE 107 -#define TK_SET 108 -#define TK_DEFERRABLE 109 -#define TK_FOREIGN 110 -#define TK_DROP 111 -#define TK_UNION 112 -#define TK_ALL 113 -#define TK_EXCEPT 114 -#define TK_INTERSECT 115 -#define TK_SELECT 116 -#define TK_DISTINCT 117 -#define TK_DOT 118 -#define TK_FROM 119 -#define TK_JOIN 120 -#define TK_USING 121 -#define TK_ORDER 122 -#define TK_GROUP 123 -#define TK_HAVING 124 -#define TK_LIMIT 125 -#define TK_WHERE 126 -#define TK_INTO 127 -#define TK_VALUES 128 -#define TK_INTEGER 129 -#define TK_FLOAT 130 -#define TK_BLOB 131 -#define TK_REGISTER 132 -#define TK_VARIABLE 133 -#define TK_CASE 134 -#define TK_WHEN 135 -#define TK_THEN 136 -#define TK_ELSE 137 -#define TK_INDEX 138 -#define TK_ALTER 139 -#define TK_ADD 140 -#define TK_TO_TEXT 141 -#define TK_TO_BLOB 142 -#define TK_TO_NUMERIC 143 -#define TK_TO_INT 144 -#define TK_TO_REAL 145 -#define TK_ISNOT 146 -#define TK_END_OF_FILE 147 -#define TK_ILLEGAL 148 -#define TK_SPACE 149 -#define TK_UNCLOSED_STRING 150 -#define TK_FUNCTION 151 -#define TK_COLUMN 152 -#define TK_AGG_FUNCTION 153 -#define TK_AGG_COLUMN 154 -#define TK_CONST_FUNC 155 -#define TK_UMINUS 156 -#define TK_UPLUS 157 +#define TK_SEMI 1 +#define TK_EXPLAIN 2 +#define TK_QUERY 3 +#define TK_PLAN 4 +#define TK_BEGIN 5 +#define TK_TRANSACTION 6 +#define TK_DEFERRED 7 +#define TK_IMMEDIATE 8 +#define TK_EXCLUSIVE 9 +#define TK_COMMIT 10 +#define TK_END 11 +#define TK_ROLLBACK 12 +#define TK_SAVEPOINT 13 +#define TK_RELEASE 14 +#define TK_TO 15 +#define TK_TABLE 16 +#define TK_CREATE 17 +#define TK_IF 18 +#define TK_NOT 19 +#define TK_EXISTS 20 +#define TK_TEMP 21 +#define TK_LP 22 +#define TK_RP 23 +#define TK_AS 24 +#define TK_WITHOUT 25 +#define TK_COMMA 26 +#define TK_ID 27 +#define TK_INDEXED 28 +#define TK_ABORT 29 +#define TK_ACTION 30 +#define TK_AFTER 31 +#define TK_ANALYZE 32 +#define TK_ASC 33 +#define TK_ATTACH 34 +#define TK_BEFORE 35 +#define TK_BY 36 +#define TK_CASCADE 37 +#define TK_CAST 38 +#define TK_COLUMNKW 39 +#define TK_CONFLICT 40 +#define TK_DATABASE 41 +#define TK_DESC 42 +#define TK_DETACH 43 +#define TK_EACH 44 +#define TK_FAIL 45 +#define TK_FOR 46 +#define TK_IGNORE 47 +#define TK_INITIALLY 48 +#define TK_INSTEAD 49 +#define TK_LIKE_KW 50 +#define TK_MATCH 51 +#define TK_NO 52 +#define TK_KEY 53 +#define TK_OF 54 +#define TK_OFFSET 55 +#define TK_PRAGMA 56 +#define TK_RAISE 57 +#define TK_RECURSIVE 58 +#define TK_REPLACE 59 +#define TK_RESTRICT 60 +#define TK_ROW 61 +#define TK_TRIGGER 62 +#define TK_VACUUM 63 +#define TK_VIEW 64 +#define TK_VIRTUAL 65 +#define TK_WITH 66 +#define TK_REINDEX 67 +#define TK_RENAME 68 +#define TK_CTIME_KW 69 +#define TK_ANY 70 +#define TK_OR 71 +#define TK_AND 72 +#define TK_IS 73 +#define TK_BETWEEN 74 +#define TK_IN 75 +#define TK_ISNULL 76 +#define TK_NOTNULL 77 +#define TK_NE 78 +#define TK_EQ 79 +#define TK_GT 80 +#define TK_LE 81 +#define TK_LT 82 +#define TK_GE 83 +#define TK_ESCAPE 84 +#define TK_BITAND 85 +#define TK_BITOR 86 +#define TK_LSHIFT 87 +#define TK_RSHIFT 88 +#define TK_PLUS 89 +#define TK_MINUS 90 +#define TK_STAR 91 +#define TK_SLASH 92 +#define TK_REM 93 +#define TK_CONCAT 94 +#define TK_COLLATE 95 +#define TK_BITNOT 96 +#define TK_STRING 97 +#define TK_JOIN_KW 98 +#define TK_CONSTRAINT 99 +#define TK_DEFAULT 100 +#define TK_NULL 101 +#define TK_PRIMARY 102 +#define TK_UNIQUE 103 +#define TK_CHECK 104 +#define TK_REFERENCES 105 +#define TK_AUTOINCR 106 +#define TK_ON 107 +#define TK_INSERT 108 +#define TK_DELETE 109 +#define TK_UPDATE 110 +#define TK_SET 111 +#define TK_DEFERRABLE 112 +#define TK_FOREIGN 113 +#define TK_DROP 114 +#define TK_UNION 115 +#define TK_ALL 116 +#define TK_EXCEPT 117 +#define TK_INTERSECT 118 +#define TK_SELECT 119 +#define TK_VALUES 120 +#define TK_DISTINCT 121 +#define TK_DOT 122 +#define TK_FROM 123 +#define TK_JOIN 124 +#define TK_USING 125 +#define TK_ORDER 126 +#define TK_GROUP 127 +#define TK_HAVING 128 +#define TK_LIMIT 129 +#define TK_WHERE 130 +#define TK_INTO 131 +#define TK_INTEGER 132 +#define TK_FLOAT 133 +#define TK_BLOB 134 +#define TK_VARIABLE 135 +#define TK_CASE 136 +#define TK_WHEN 137 +#define TK_THEN 138 +#define TK_ELSE 139 +#define TK_INDEX 140 +#define TK_ALTER 141 +#define TK_ADD 142 +#define TK_TO_TEXT 143 +#define TK_TO_BLOB 144 +#define TK_TO_NUMERIC 145 +#define TK_TO_INT 146 +#define TK_TO_REAL 147 +#define TK_ISNOT 148 +#define TK_END_OF_FILE 149 +#define TK_ILLEGAL 150 +#define TK_SPACE 151 +#define TK_UNCLOSED_STRING 152 +#define TK_FUNCTION 153 +#define TK_COLUMN 154 +#define TK_AGG_FUNCTION 155 +#define TK_AGG_COLUMN 156 +#define TK_UMINUS 157 +#define TK_UPLUS 158 +#define TK_REGISTER 159 /************** End of parse.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ @@ -8541,6 +8635,7 @@ typedef struct LookasideSlot LookasideSlot; typedef struct Module Module; typedef struct NameContext NameContext; typedef struct Parse Parse; +typedef struct PrintfArguments PrintfArguments; typedef struct RowSet RowSet; typedef struct Savepoint Savepoint; typedef struct Select Select; @@ -8558,6 +8653,7 @@ typedef struct VTable VTable; typedef struct VtabCtx VtabCtx; typedef struct Walker Walker; typedef struct WhereInfo WhereInfo; +typedef struct With With; /* ** Defer sourcing vdbe.h and btree.h until after the "u8" and @@ -8746,8 +8842,8 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize); SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*); -SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt); -SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt); +SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, u32 *pAmt); +SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, u32 *pAmt); SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize); SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64); @@ -8887,7 +8983,7 @@ struct VdbeOp { SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */ int (*xAdvance)(BtCursor *, int *); } p4; -#ifdef SQLITE_DEBUG +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS char *zComment; /* Comment to improve readability */ #endif #ifdef VDBE_PROFILE @@ -8943,15 +9039,11 @@ typedef struct VdbeOpList VdbeOpList; #define P4_SUBPROGRAM (-18) /* P4 is a pointer to a SubProgram structure */ #define P4_ADVANCE (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */ -/* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure -** is made. That copy is freed when the Vdbe is finalized. But if the -** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used. It still -** gets freed when the Vdbe is finalized so it still should be obtained -** from a single sqliteMalloc(). But no copy is made and the calling -** function should *not* try to free the KeyInfo. -*/ -#define P4_KEYINFO_HANDOFF (-16) -#define P4_KEYINFO_STATIC (-17) +/* Error message codes for OP_Halt */ +#define P5_ConstraintNotNull 1 +#define P5_ConstraintUnique 2 +#define P5_ConstraintCheck 3 +#define P5_ConstraintFK 4 /* ** The Vdbe.aColName array contains 5n Mem structures, where n is the @@ -8988,156 +9080,158 @@ typedef struct VdbeOpList VdbeOpList; /************** Begin file opcodes.h *****************************************/ /* Automatically generated. Do not edit */ /* See the mkopcodeh.awk script for details */ -#define OP_Function 1 -#define OP_Savepoint 2 -#define OP_AutoCommit 3 -#define OP_Transaction 4 -#define OP_SorterNext 5 -#define OP_Prev 6 -#define OP_Next 7 -#define OP_AggStep 8 -#define OP_Checkpoint 9 -#define OP_JournalMode 10 -#define OP_Vacuum 11 -#define OP_VFilter 12 -#define OP_VUpdate 13 -#define OP_Goto 14 -#define OP_Gosub 15 -#define OP_Return 16 -#define OP_Yield 17 -#define OP_HaltIfNull 18 -#define OP_Not 19 /* same as TK_NOT */ -#define OP_Halt 20 -#define OP_Integer 21 -#define OP_Int64 22 -#define OP_String 23 -#define OP_Null 24 -#define OP_Blob 25 -#define OP_Variable 26 -#define OP_Move 27 -#define OP_Copy 28 -#define OP_SCopy 29 -#define OP_ResultRow 30 -#define OP_CollSeq 31 -#define OP_AddImm 32 -#define OP_MustBeInt 33 -#define OP_RealAffinity 34 -#define OP_Permutation 35 -#define OP_Compare 36 -#define OP_Jump 37 -#define OP_Once 38 -#define OP_If 39 -#define OP_IfNot 40 -#define OP_Column 41 -#define OP_Affinity 42 -#define OP_MakeRecord 43 -#define OP_Count 44 -#define OP_ReadCookie 45 -#define OP_SetCookie 46 -#define OP_VerifyCookie 47 -#define OP_OpenRead 48 -#define OP_OpenWrite 49 -#define OP_OpenAutoindex 50 -#define OP_OpenEphemeral 51 -#define OP_SorterOpen 52 -#define OP_OpenPseudo 53 -#define OP_Close 54 -#define OP_SeekLt 55 -#define OP_SeekLe 56 -#define OP_SeekGe 57 -#define OP_SeekGt 58 -#define OP_Seek 59 -#define OP_NotFound 60 -#define OP_Found 61 -#define OP_IsUnique 62 -#define OP_NotExists 63 -#define OP_Sequence 64 -#define OP_NewRowid 65 -#define OP_Insert 66 -#define OP_InsertInt 67 -#define OP_Or 68 /* same as TK_OR */ -#define OP_And 69 /* same as TK_AND */ -#define OP_Delete 70 -#define OP_ResetCount 71 -#define OP_SorterCompare 72 -#define OP_IsNull 73 /* same as TK_ISNULL */ -#define OP_NotNull 74 /* same as TK_NOTNULL */ -#define OP_Ne 75 /* same as TK_NE */ -#define OP_Eq 76 /* same as TK_EQ */ -#define OP_Gt 77 /* same as TK_GT */ -#define OP_Le 78 /* same as TK_LE */ -#define OP_Lt 79 /* same as TK_LT */ -#define OP_Ge 80 /* same as TK_GE */ -#define OP_SorterData 81 -#define OP_BitAnd 82 /* same as TK_BITAND */ -#define OP_BitOr 83 /* same as TK_BITOR */ -#define OP_ShiftLeft 84 /* same as TK_LSHIFT */ -#define OP_ShiftRight 85 /* same as TK_RSHIFT */ -#define OP_Add 86 /* same as TK_PLUS */ -#define OP_Subtract 87 /* same as TK_MINUS */ -#define OP_Multiply 88 /* same as TK_STAR */ -#define OP_Divide 89 /* same as TK_SLASH */ -#define OP_Remainder 90 /* same as TK_REM */ -#define OP_Concat 91 /* same as TK_CONCAT */ -#define OP_RowKey 92 -#define OP_BitNot 93 /* same as TK_BITNOT */ -#define OP_String8 94 /* same as TK_STRING */ -#define OP_RowData 95 -#define OP_Rowid 96 -#define OP_NullRow 97 -#define OP_Last 98 -#define OP_SorterSort 99 -#define OP_Sort 100 -#define OP_Rewind 101 -#define OP_SorterInsert 102 -#define OP_IdxInsert 103 -#define OP_IdxDelete 104 -#define OP_IdxRowid 105 -#define OP_IdxLT 106 -#define OP_IdxGE 107 -#define OP_Destroy 108 -#define OP_Clear 109 -#define OP_CreateIndex 110 -#define OP_CreateTable 111 -#define OP_ParseSchema 112 -#define OP_LoadAnalysis 113 -#define OP_DropTable 114 -#define OP_DropIndex 115 -#define OP_DropTrigger 116 -#define OP_IntegrityCk 117 -#define OP_RowSetAdd 118 -#define OP_RowSetRead 119 -#define OP_RowSetTest 120 -#define OP_Program 121 -#define OP_Param 122 -#define OP_FkCounter 123 -#define OP_FkIfZero 124 -#define OP_MemMax 125 -#define OP_IfPos 126 -#define OP_IfNeg 127 -#define OP_IfZero 128 -#define OP_AggFinal 129 -#define OP_Real 130 /* same as TK_FLOAT */ -#define OP_IncrVacuum 131 -#define OP_Expire 132 -#define OP_TableLock 133 -#define OP_VBegin 134 -#define OP_VCreate 135 -#define OP_VDestroy 136 -#define OP_VOpen 137 -#define OP_VColumn 138 -#define OP_VNext 139 -#define OP_VRename 140 -#define OP_ToText 141 /* same as TK_TO_TEXT */ -#define OP_ToBlob 142 /* same as TK_TO_BLOB */ -#define OP_ToNumeric 143 /* same as TK_TO_NUMERIC*/ -#define OP_ToInt 144 /* same as TK_TO_INT */ -#define OP_ToReal 145 /* same as TK_TO_REAL */ -#define OP_Pagecount 146 -#define OP_MaxPgcnt 147 -#define OP_Trace 148 -#define OP_Noop 149 -#define OP_Explain 150 +#define OP_Function 1 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_Savepoint 2 +#define OP_AutoCommit 3 +#define OP_Transaction 4 +#define OP_SorterNext 5 +#define OP_PrevIfOpen 6 +#define OP_NextIfOpen 7 +#define OP_Prev 8 +#define OP_Next 9 +#define OP_AggStep 10 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_Checkpoint 11 +#define OP_JournalMode 12 +#define OP_Vacuum 13 +#define OP_VFilter 14 /* synopsis: iPlan=r[P3] zPlan='P4' */ +#define OP_VUpdate 15 /* synopsis: data=r[P3@P2] */ +#define OP_Goto 16 +#define OP_Gosub 17 +#define OP_Return 18 +#define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ +#define OP_Yield 20 +#define OP_HaltIfNull 21 /* synopsis: if r[P3] null then halt */ +#define OP_Halt 22 +#define OP_Integer 23 /* synopsis: r[P2]=P1 */ +#define OP_Int64 24 /* synopsis: r[P2]=P4 */ +#define OP_String 25 /* synopsis: r[P2]='P4' (len=P1) */ +#define OP_Null 26 /* synopsis: r[P2..P3]=NULL */ +#define OP_Blob 27 /* synopsis: r[P2]=P4 (len=P1) */ +#define OP_Variable 28 /* synopsis: r[P2]=parameter(P1,P4) */ +#define OP_Move 29 /* synopsis: r[P2@P3]=r[P1@P3] */ +#define OP_Copy 30 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ +#define OP_SCopy 31 /* synopsis: r[P2]=r[P1] */ +#define OP_ResultRow 32 /* synopsis: output=r[P1@P2] */ +#define OP_CollSeq 33 +#define OP_AddImm 34 /* synopsis: r[P1]=r[P1]+P2 */ +#define OP_MustBeInt 35 +#define OP_RealAffinity 36 +#define OP_Permutation 37 +#define OP_Compare 38 +#define OP_Jump 39 +#define OP_Once 40 +#define OP_If 41 +#define OP_IfNot 42 +#define OP_Column 43 /* synopsis: r[P3]=PX */ +#define OP_Affinity 44 /* synopsis: affinity(r[P1@P2]) */ +#define OP_MakeRecord 45 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ +#define OP_Count 46 /* synopsis: r[P2]=count() */ +#define OP_ReadCookie 47 +#define OP_SetCookie 48 +#define OP_VerifyCookie 49 +#define OP_OpenRead 50 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenWrite 51 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenAutoindex 52 /* synopsis: nColumn=P2 */ +#define OP_OpenEphemeral 53 /* synopsis: nColumn=P2 */ +#define OP_SorterOpen 54 +#define OP_OpenPseudo 55 /* synopsis: content in r[P2@P3] */ +#define OP_Close 56 +#define OP_SeekLt 57 /* synopsis: key=r[P3@P4] */ +#define OP_SeekLe 58 /* synopsis: key=r[P3@P4] */ +#define OP_SeekGe 59 /* synopsis: key=r[P3@P4] */ +#define OP_SeekGt 60 /* synopsis: key=r[P3@P4] */ +#define OP_Seek 61 /* synopsis: intkey=r[P2] */ +#define OP_NoConflict 62 /* synopsis: key=r[P3@P4] */ +#define OP_NotFound 63 /* synopsis: key=r[P3@P4] */ +#define OP_Found 64 /* synopsis: key=r[P3@P4] */ +#define OP_NotExists 65 /* synopsis: intkey=r[P3] */ +#define OP_Sequence 66 /* synopsis: r[P2]=rowid */ +#define OP_NewRowid 67 /* synopsis: r[P2]=rowid */ +#define OP_Insert 68 /* synopsis: intkey=r[P3] data=r[P2] */ +#define OP_InsertInt 69 /* synopsis: intkey=P3 data=r[P2] */ +#define OP_Delete 70 +#define OP_Or 71 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ +#define OP_And 72 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ +#define OP_ResetCount 73 +#define OP_SorterCompare 74 /* synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2 */ +#define OP_SorterData 75 /* synopsis: r[P2]=data */ +#define OP_IsNull 76 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ +#define OP_NotNull 77 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ +#define OP_Ne 78 /* same as TK_NE, synopsis: if r[P1]!=r[P3] goto P2 */ +#define OP_Eq 79 /* same as TK_EQ, synopsis: if r[P1]==r[P3] goto P2 */ +#define OP_Gt 80 /* same as TK_GT, synopsis: if r[P1]>r[P3] goto P2 */ +#define OP_Le 81 /* same as TK_LE, synopsis: if r[P1]<=r[P3] goto P2 */ +#define OP_Lt 82 /* same as TK_LT, synopsis: if r[P1]=r[P3] goto P2 */ +#define OP_RowKey 84 /* synopsis: r[P2]=key */ +#define OP_BitAnd 85 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ +#define OP_BitOr 86 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ +#define OP_ShiftLeft 87 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<>r[P1] */ +#define OP_Add 89 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */ +#define OP_Subtract 90 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */ +#define OP_Multiply 91 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */ +#define OP_Divide 92 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */ +#define OP_Remainder 93 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */ +#define OP_Concat 94 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ +#define OP_RowData 95 /* synopsis: r[P2]=data */ +#define OP_BitNot 96 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */ +#define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */ +#define OP_Rowid 98 /* synopsis: r[P2]=rowid */ +#define OP_NullRow 99 +#define OP_Last 100 +#define OP_SorterSort 101 +#define OP_Sort 102 +#define OP_Rewind 103 +#define OP_SorterInsert 104 +#define OP_IdxInsert 105 /* synopsis: key=r[P2] */ +#define OP_IdxDelete 106 /* synopsis: key=r[P2@P3] */ +#define OP_IdxRowid 107 /* synopsis: r[P2]=rowid */ +#define OP_IdxLT 108 /* synopsis: key=r[P3@P4] */ +#define OP_IdxGE 109 /* synopsis: key=r[P3@P4] */ +#define OP_Destroy 110 +#define OP_Clear 111 +#define OP_CreateIndex 112 /* synopsis: r[P2]=root iDb=P1 */ +#define OP_CreateTable 113 /* synopsis: r[P2]=root iDb=P1 */ +#define OP_ParseSchema 114 +#define OP_LoadAnalysis 115 +#define OP_DropTable 116 +#define OP_DropIndex 117 +#define OP_DropTrigger 118 +#define OP_IntegrityCk 119 +#define OP_RowSetAdd 120 /* synopsis: rowset(P1)=r[P2] */ +#define OP_RowSetRead 121 /* synopsis: r[P3]=rowset(P1) */ +#define OP_RowSetTest 122 /* synopsis: if r[P3] in rowset(P1) goto P2 */ +#define OP_Program 123 +#define OP_Param 124 +#define OP_FkCounter 125 /* synopsis: fkctr[P1]+=P2 */ +#define OP_FkIfZero 126 /* synopsis: if fkctr[P1]==0 goto P2 */ +#define OP_MemMax 127 /* synopsis: r[P1]=max(r[P1],r[P2]) */ +#define OP_IfPos 128 /* synopsis: if r[P1]>0 goto P2 */ +#define OP_IfNeg 129 /* synopsis: if r[P1]<0 goto P2 */ +#define OP_IfZero 130 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */ +#define OP_AggFinal 131 /* synopsis: accum=r[P1] N=P2 */ +#define OP_IncrVacuum 132 +#define OP_Real 133 /* same as TK_FLOAT, synopsis: r[P2]=P4 */ +#define OP_Expire 134 +#define OP_TableLock 135 /* synopsis: iDb=P1 root=P2 write=P3 */ +#define OP_VBegin 136 +#define OP_VCreate 137 +#define OP_VDestroy 138 +#define OP_VOpen 139 +#define OP_VColumn 140 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VNext 141 +#define OP_VRename 142 +#define OP_ToText 143 /* same as TK_TO_TEXT */ +#define OP_ToBlob 144 /* same as TK_TO_BLOB */ +#define OP_ToNumeric 145 /* same as TK_TO_NUMERIC */ +#define OP_ToInt 146 /* same as TK_TO_INT */ +#define OP_ToReal 147 /* same as TK_TO_REAL */ +#define OP_Pagecount 148 +#define OP_MaxPgcnt 149 +#define OP_Trace 150 +#define OP_Noop 151 +#define OP_Explain 152 /* Properties such as "out2" or "jump" that are specified in @@ -9153,24 +9247,25 @@ typedef struct VdbeOpList VdbeOpList; #define OPFLG_OUT3 0x0040 /* out3: P3 is an output */ #define OPFLG_INITIALIZER {\ /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,\ -/* 8 */ 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x01,\ -/* 16 */ 0x04, 0x04, 0x10, 0x24, 0x00, 0x02, 0x02, 0x02,\ -/* 24 */ 0x02, 0x02, 0x02, 0x00, 0x00, 0x24, 0x00, 0x00,\ -/* 32 */ 0x04, 0x05, 0x04, 0x00, 0x00, 0x01, 0x01, 0x05,\ -/* 40 */ 0x05, 0x00, 0x00, 0x00, 0x02, 0x02, 0x10, 0x00,\ -/* 48 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,\ -/* 56 */ 0x11, 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11,\ -/* 64 */ 0x02, 0x02, 0x00, 0x00, 0x4c, 0x4c, 0x00, 0x00,\ -/* 72 */ 0x00, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\ -/* 80 */ 0x15, 0x00, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\ -/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x00, 0x24, 0x02, 0x00,\ -/* 96 */ 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08,\ -/* 104 */ 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02,\ -/* 112 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x45,\ -/* 120 */ 0x15, 0x01, 0x02, 0x00, 0x01, 0x08, 0x05, 0x05,\ -/* 128 */ 0x05, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,\ -/* 136 */ 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x04, 0x04,\ -/* 144 */ 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00,} +/* 8 */ 0x01, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,\ +/* 16 */ 0x01, 0x01, 0x04, 0x24, 0x04, 0x10, 0x00, 0x02,\ +/* 24 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x20,\ +/* 32 */ 0x00, 0x00, 0x04, 0x05, 0x04, 0x00, 0x00, 0x01,\ +/* 40 */ 0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x02,\ +/* 48 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 56 */ 0x00, 0x11, 0x11, 0x11, 0x11, 0x08, 0x11, 0x11,\ +/* 64 */ 0x11, 0x11, 0x02, 0x02, 0x00, 0x00, 0x00, 0x4c,\ +/* 72 */ 0x4c, 0x00, 0x00, 0x00, 0x05, 0x05, 0x15, 0x15,\ +/* 80 */ 0x15, 0x15, 0x15, 0x15, 0x00, 0x4c, 0x4c, 0x4c,\ +/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x00,\ +/* 96 */ 0x24, 0x02, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01,\ +/* 104 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\ +/* 112 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 120 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\ +/* 128 */ 0x05, 0x05, 0x05, 0x00, 0x01, 0x02, 0x00, 0x00,\ +/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,\ +/* 144 */ 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00,\ +/* 152 */ 0x00,} /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ @@ -9179,7 +9274,7 @@ typedef struct VdbeOpList VdbeOpList; ** Prototypes for the VDBE interface. See comments on the implementation ** for a description of what each of these routines does. */ -SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*); +SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse*); SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int); SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int); @@ -9194,7 +9289,9 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3); SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5); SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr); SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr); +SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe*, u8 op); SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); +SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*); SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*); @@ -9207,7 +9304,6 @@ SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int); SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*); #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *, int); -SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe*,FILE*); #endif SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*); @@ -9233,15 +9329,27 @@ SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); #endif - -#ifndef NDEBUG +/* Use SQLITE_ENABLE_COMMENTS to enable generation of extra comments on +** each VDBE opcode. +** +** Use the SQLITE_ENABLE_MODULE_COMMENTS macro to see some extra no-op +** comments in VDBE programs that show key decision points in the code +** generator. +*/ +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe*, const char*, ...); # define VdbeComment(X) sqlite3VdbeComment X SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); # define VdbeNoopComment(X) sqlite3VdbeNoopComment X +# ifdef SQLITE_ENABLE_MODULE_COMMENTS +# define VdbeModuleComment(X) sqlite3VdbeNoopComment X +# else +# define VdbeModuleComment(X) +# endif #else # define VdbeComment(X) # define VdbeNoopComment(X) +# define VdbeModuleComment(X) #endif #endif @@ -9388,6 +9496,7 @@ SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno); SQLITE_PRIVATE void sqlite3PagerRef(DbPage*); SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*); +SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage*); /* Operations on page references. */ SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*); @@ -9402,7 +9511,7 @@ SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*); SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int); SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int); SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*); -SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager); +SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager, const char *zMaster); SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*); SQLITE_PRIVATE int sqlite3PagerRollback(Pager*); SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n); @@ -10262,6 +10371,7 @@ struct sqlite3 { #define SQLITE_EnableTrigger 0x00800000 /* True to enable triggers */ #define SQLITE_DeferFKs 0x01000000 /* Defer all FK constraints */ #define SQLITE_QueryOnly 0x02000000 /* Disable database changes */ +#define SQLITE_VdbeEQP 0x04000000 /* Debug EXPLAIN QUERY PLAN */ /* @@ -10273,7 +10383,7 @@ struct sqlite3 { #define SQLITE_ColumnCache 0x0002 /* Column cache */ #define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */ #define SQLITE_FactorOutConst 0x0008 /* Constant factoring */ -#define SQLITE_IdxRealAsInt 0x0010 /* Store REAL as INT in indices */ +/* not used 0x0010 // Was: SQLITE_IdxRealAsInt */ #define SQLITE_DistinctOpt 0x0020 /* DISTINCT using indexes */ #define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */ #define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */ @@ -10295,6 +10405,13 @@ struct sqlite3 { #define OptimizationEnabled(db, mask) 1 #endif +/* +** Return true if it OK to factor constant expressions into the initialization +** code. The argument is a Parse object for the code generator. +*/ +#define ConstFactorOk(P) \ + ((P)->cookieGoto>0 && OptimizationEnabled((P)->db,SQLITE_FactorOutConst)) + /* ** Possible values for the sqlite.magic field. ** The numbers are obtained at random and have no special meaning, other @@ -10361,6 +10478,7 @@ struct FuncDestructor { #define SQLITE_FUNC_COUNT 0x100 /* Built-in count(*) aggregate */ #define SQLITE_FUNC_COALESCE 0x200 /* Built-in coalesce() or ifnull() */ #define SQLITE_FUNC_UNLIKELY 0x400 /* Built-in unlikely() function */ +#define SQLITE_FUNC_CONSTANT 0x800 /* Constant inputs give a constant output */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -10373,6 +10491,9 @@ struct FuncDestructor { ** as the user-data (sqlite3_user_data()) for the function. If ** argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set. ** +** VFUNCTION(zName, nArg, iArg, bNC, xFunc) +** Like FUNCTION except it omits the SQLITE_FUNC_CONSTANT flag. +** ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal) ** Used to create an aggregate function definition implemented by ** the C functions xStep and xFinal. The first four parameters @@ -10388,16 +10509,20 @@ struct FuncDestructor { ** parameter. */ #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \ + {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ + SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} +#define VFUNCTION(zName, nArg, iArg, bNC, xFunc) \ {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ - {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags, \ + {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0} #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \ - {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ + {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ pArg, 0, xFunc, 0, 0, #zName, 0, 0} #define LIKEFUNC(zName, nArg, arg, flags) \ - {nArg, SQLITE_UTF8|flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} + {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \ + (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0} #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \ SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0} @@ -10630,13 +10755,14 @@ struct Table { }; /* -** Allowed values for Tabe.tabFlags. +** Allowed values for Table.tabFlags. */ #define TF_Readonly 0x01 /* Read-only system table */ #define TF_Ephemeral 0x02 /* An ephemeral table */ #define TF_HasPrimaryKey 0x04 /* Table has a primary key */ #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ #define TF_Virtual 0x10 /* Is a virtual table */ +#define TF_WithoutRowid 0x20 /* No rowid used. PRIMARY KEY is the key */ /* @@ -10652,6 +10778,9 @@ struct Table { # define IsHiddenColumn(X) 0 #endif +/* Does the table have a rowid */ +#define HasRowid(X) (((X)->tabFlags & TF_WithoutRowid)==0) + /* ** Each foreign key constraint is an instance of the following structure. ** @@ -10666,26 +10795,35 @@ struct Table { ** ); ** ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2". +** Equivalent names: +** +** from-table == child-table +** to-table == parent-table ** ** Each REFERENCES clause generates an instance of the following structure ** which is attached to the from-table. The to-table need not exist when ** the from-table is created. The existence of the to-table is not checked. +** +** The list of all parents for child Table X is held at X.pFKey. +** +** A list of all children for a table named Z (which might not even exist) +** is held in Schema.fkeyHash with a hash key of Z. */ struct FKey { Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */ - FKey *pNextFrom; /* Next foreign key in pFrom */ + FKey *pNextFrom; /* Next FKey with the same in pFrom. Next parent of pFrom */ char *zTo; /* Name of table that the key points to (aka: Parent) */ - FKey *pNextTo; /* Next foreign key on table named zTo */ - FKey *pPrevTo; /* Previous foreign key on table named zTo */ + FKey *pNextTo; /* Next with the same zTo. Next child of zTo. */ + FKey *pPrevTo; /* Previous with the same zTo */ int nCol; /* Number of columns in this key */ /* EV: R-30323-21917 */ - u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ - u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ - Trigger *apTrigger[2]; /* Triggers for aAction[] actions */ - struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ - int iFrom; /* Index of column in pFrom */ - char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */ - } aCol[1]; /* One entry for each of nCol column s */ + u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ + u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ + Trigger *apTrigger[2];/* Triggers for aAction[] actions */ + struct sColMap { /* Mapping of columns in pFrom to columns in zTo */ + int iFrom; /* Index of column in pFrom */ + char *zCol; /* Name of column in zTo. If NULL use PRIMARY KEY */ + } aCol[1]; /* One entry for each of nCol columns */ }; /* @@ -10738,9 +10876,11 @@ struct FKey { ** for the rowid at the end. */ struct KeyInfo { - sqlite3 *db; /* The database connection */ + u32 nRef; /* Number of references to this KeyInfo object */ u8 enc; /* Text encoding - one of the SQLITE_UTF* values */ - u16 nField; /* Maximum index for aColl[] and aSortOrder[] */ + u16 nField; /* Number of key columns in the index */ + u16 nXField; /* Number of columns beyond the key columns */ + sqlite3 *db; /* The database connection */ u8 *aSortOrder; /* Sort order for each column. */ CollSeq *aColl[1]; /* Collating sequence for each term of the key */ }; @@ -10763,7 +10903,6 @@ struct UnpackedRecord { KeyInfo *pKeyInfo; /* Collation and sort-order information */ u16 nField; /* Number of entries in apMem[] */ u8 flags; /* Boolean settings. UNPACKED_... below */ - i64 rowid; /* Used by UNPACKED_PREFIX_SEARCH */ Mem *aMem; /* Values */ }; @@ -10772,7 +10911,6 @@ struct UnpackedRecord { */ #define UNPACKED_INCRKEY 0x01 /* Make this key an epsilon larger */ #define UNPACKED_PREFIX_MATCH 0x02 /* A prefix match is considered OK */ -#define UNPACKED_PREFIX_SEARCH 0x04 /* Ignore final (rowid) field */ /* ** Each SQL index is represented in memory by an @@ -10802,7 +10940,7 @@ struct UnpackedRecord { */ struct Index { char *zName; /* Name of this index */ - int *aiColumn; /* Which columns are used by this index. 1st is 0 */ + i16 *aiColumn; /* Which columns are used by this index. 1st is 0 */ tRowcnt *aiRowEst; /* From ANALYZE: Est. rows selected by each column */ Table *pTable; /* The SQL table being indexed */ char *zColAff; /* String defining the affinity of each column */ @@ -10811,13 +10949,17 @@ struct Index { u8 *aSortOrder; /* for each column: True==DESC, False==ASC */ char **azColl; /* Array of collation sequence names for index */ Expr *pPartIdxWhere; /* WHERE clause for partial indices */ + KeyInfo *pKeyInfo; /* A KeyInfo object suitable for this index */ int tnum; /* DB Page containing root of this index */ LogEst szIdxRow; /* Estimated average row size in bytes */ - u16 nColumn; /* Number of columns in table used by this index */ + u16 nKeyCol; /* Number of columns forming the key */ + u16 nColumn; /* Number of columns stored in the index */ u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ unsigned autoIndex:2; /* 1==UNIQUE, 2==PRIMARY KEY, 0==CREATE INDEX */ unsigned bUnordered:1; /* Use this index for == or IN queries only */ unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */ + unsigned isResized:1; /* True if resizeIndexObject() has been called */ + unsigned isCovering:1; /* True if this is a covering index */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 int nSample; /* Number of elements in aSample[] */ int nSampleCol; /* Size of IndexSample.anEq[] and so on */ @@ -10873,6 +11015,7 @@ struct AggInfo { int sortingIdx; /* Cursor number of the sorting index */ int sortingIdxPTab; /* Cursor number of pseudo-table */ int nSortingColumn; /* Number of columns in the sorting index */ + int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */ ExprList *pGroupBy; /* The group by clause */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ @@ -11030,7 +11173,7 @@ struct Expr { #define EP_DblQuoted 0x000040 /* token.z was originally in "..." */ #define EP_InfixFunc 0x000080 /* True for an infix function: LIKE, GLOB, etc */ #define EP_Collate 0x000100 /* Tree contains a TK_COLLATE opeartor */ -#define EP_FixedDest 0x000200 /* Result needed in a specific register */ + /* unused 0x000200 */ #define EP_IntValue 0x000400 /* Integer value contained in u.iValue */ #define EP_xIsSelect 0x000800 /* x.pSelect is valid (otherwise x.pList is) */ #define EP_Skip 0x001000 /* COLLATE, AS, or UNLIKELY */ @@ -11040,6 +11183,7 @@ struct Expr { #define EP_MemToken 0x010000 /* Need to sqlite3DbFree() Expr.zToken */ #define EP_NoReduce 0x020000 /* Cannot EXPRDUP_REDUCE this Expr */ #define EP_Unlikely 0x040000 /* unlikely() or likelihood() function */ +#define EP_Constant 0x080000 /* Node is a constant */ /* ** These macros can be used to test, set, or clear bits in the @@ -11101,8 +11245,14 @@ struct ExprList { u8 sortOrder; /* 1 for DESC or 0 for ASC */ unsigned done :1; /* A flag to indicate when processing is finished */ unsigned bSpanIsTab :1; /* zSpan holds DB.TABLE.COLUMN */ - u16 iOrderByCol; /* For ORDER BY, column number in result set */ - u16 iAlias; /* Index into Parse.aAlias[] for zName */ + unsigned reusable :1; /* Constant expression is reusable */ + union { + struct { + u16 iOrderByCol; /* For ORDER BY, column number in result set */ + u16 iAlias; /* Index into Parse.aAlias[] for zName */ + } x; + int iConstExprReg; /* Register in which Expr value is cached */ + } u; } *a; /* Alloc a power of two greater or equal to nExpr */ }; @@ -11158,6 +11308,7 @@ typedef u64 Bitmask; ** A bit in a Bitmask */ #define MASKBIT(n) (((Bitmask)1)<<(n)) +#define MASKBIT32(n) (((unsigned int)1)<<(n)) /* ** The following structure describes the FROM clause of a SELECT statement. @@ -11194,6 +11345,7 @@ struct SrcList { unsigned notIndexed :1; /* True if there is a NOT INDEXED clause */ unsigned isCorrelated :1; /* True if sub-query is correlated */ unsigned viaCoroutine :1; /* Implemented as a co-routine */ + unsigned isRecursive :1; /* True for recursive reference in WITH */ #ifndef SQLITE_OMIT_EXPLAIN u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */ #endif @@ -11320,6 +11472,7 @@ struct Select { Select *pRightmost; /* Right-most select in a compound select statement */ Expr *pLimit; /* LIMIT expression. NULL means not used. */ Expr *pOffset; /* OFFSET expression. NULL means not used. */ + With *pWith; /* WITH clause attached to this select. Or NULL. */ }; /* @@ -11337,11 +11490,70 @@ struct Select { #define SF_Materialize 0x0100 /* Force materialization of views */ #define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */ #define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */ +#define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */ /* -** The results of a select can be distributed in several ways. The -** "SRT" prefix means "SELECT Result Type". +** The results of a SELECT can be distributed in several ways, as defined +** by one of the following macros. The "SRT" prefix means "SELECT Result +** Type". +** +** SRT_Union Store results as a key in a temporary index +** identified by pDest->iSDParm. +** +** SRT_Except Remove results from the temporary index pDest->iSDParm. +** +** SRT_Exists Store a 1 in memory cell pDest->iSDParm if the result +** set is not empty. +** +** SRT_Discard Throw the results away. This is used by SELECT +** statements within triggers whose only purpose is +** the side-effects of functions. +** +** All of the above are free to ignore their ORDER BY clause. Those that +** follow must honor the ORDER BY clause. +** +** SRT_Output Generate a row of output (using the OP_ResultRow +** opcode) for each row in the result set. +** +** SRT_Mem Only valid if the result is a single column. +** Store the first column of the first result row +** in register pDest->iSDParm then abandon the rest +** of the query. This destination implies "LIMIT 1". +** +** SRT_Set The result must be a single column. Store each +** row of result as the key in table pDest->iSDParm. +** Apply the affinity pDest->affSdst before storing +** results. Used to implement "IN (SELECT ...)". +** +** SRT_EphemTab Create an temporary table pDest->iSDParm and store +** the result there. The cursor is left open after +** returning. This is like SRT_Table except that +** this destination uses OP_OpenEphemeral to create +** the table first. +** +** SRT_Coroutine Generate a co-routine that returns a new row of +** results each time it is invoked. The entry point +** of the co-routine is stored in register pDest->iSDParm +** and the result row is stored in pDest->nDest registers +** starting with pDest->iSdst. +** +** SRT_Table Store results in temporary table pDest->iSDParm. +** This is like SRT_EphemTab except that the table +** is assumed to already be open. +** +** SRT_DistTable Store results in a temporary table pDest->iSDParm. +** But also use temporary table pDest->iSDParm+1 as +** a record of all prior results and ignore any duplicate +** rows. Name means: "Distinct Table". +** +** SRT_Queue Store results in priority queue pDest->iSDParm (really +** an index). Append a sequence number so that all entries +** are distinct. +** +** SRT_DistQueue Store results in priority queue pDest->iSDParm only if +** the same record has never been stored before. The +** index at pDest->iSDParm+1 hold all prior stores. */ #define SRT_Union 1 /* Store result as keys in an index */ #define SRT_Except 2 /* Remove result from a UNION index */ @@ -11354,20 +11566,24 @@ struct Select { #define SRT_Output 5 /* Output each row of result */ #define SRT_Mem 6 /* Store result in a memory cell */ #define SRT_Set 7 /* Store results as keys in an index */ -#define SRT_Table 8 /* Store result as data with an automatic rowid */ -#define SRT_EphemTab 9 /* Create transient tab and store like SRT_Table */ -#define SRT_Coroutine 10 /* Generate a single row of result */ +#define SRT_EphemTab 8 /* Create transient tab and store like SRT_Table */ +#define SRT_Coroutine 9 /* Generate a single row of result */ +#define SRT_Table 10 /* Store result as data with an automatic rowid */ +#define SRT_DistTable 11 /* Like SRT_Table, but unique results only */ +#define SRT_Queue 12 /* Store result in an queue */ +#define SRT_DistQueue 13 /* Like SRT_Queue, but unique results only */ /* ** An instance of this object describes where to put of the results of ** a SELECT statement. */ struct SelectDest { - u8 eDest; /* How to dispose of the results. On of SRT_* above. */ - char affSdst; /* Affinity used when eDest==SRT_Set */ - int iSDParm; /* A parameter used by the eDest disposal method */ - int iSdst; /* Base register where results are written */ - int nSdst; /* Number of registers allocated */ + u8 eDest; /* How to dispose of the results. On of SRT_* above. */ + char affSdst; /* Affinity used when eDest==SRT_Set */ + int iSDParm; /* A parameter used by the eDest disposal method */ + int iSdst; /* Base register where results are written */ + int nSdst; /* Number of registers allocated */ + ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */ }; /* @@ -11467,6 +11683,10 @@ struct Parse { int nMem; /* Number of memory cells used so far */ int nSet; /* Number of sets used so far */ int nOnce; /* Number of OP_Once instructions so far */ + int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */ + int nLabel; /* Number of labels used */ + int *aLabel; /* Space to hold the labels */ + int iFixedOp; /* Never back out opcodes iFixedOp-1 or earlier */ int ckBase; /* Base register of data during check constraints */ int iPartIdxTab; /* Table corresponding to a partial index */ int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ @@ -11479,6 +11699,7 @@ struct Parse { int iReg; /* Reg with value of this column. 0 means none. */ int lru; /* Least recently used entry has the smallest value */ } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */ + ExprList *pConstExpr;/* Constant expressions */ yDbMask writeMask; /* Start a write transaction on these databases */ yDbMask cookieMask; /* Bitmask of schema verified databases */ int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */ @@ -11496,6 +11717,8 @@ struct Parse { /* Information used while coding trigger programs. */ Parse *pToplevel; /* Parse structure for main program (or NULL) */ Table *pTriggerTab; /* Table triggers are being coded for */ + int addrCrTab; /* Address of OP_CreateTable opcode on CREATE TABLE */ + int addrSkipPK; /* Address of instruction to skip PRIMARY KEY index */ u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ u32 oldmask; /* Mask of old.* columns referenced */ u32 newmask; /* Mask of new.* columns referenced */ @@ -11508,6 +11731,7 @@ struct Parse { int nVar; /* Number of '?' variables seen in the SQL so far */ int nzVar; /* Number of available slots in azVar[] */ + u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ u8 explain; /* True if the EXPLAIN flag is found on the query */ #ifndef SQLITE_OMIT_VIRTUALTABLE u8 declareVtab; /* True if inside sqlite3_declare_vtab() */ @@ -11521,7 +11745,6 @@ struct Parse { #endif char **azVar; /* Pointers to names of parameters */ Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */ - int *aAlias; /* Register used to hold aliased result */ const char *zTail; /* All SQL text past the last semicolon parsed */ Table *pNewTable; /* A table being constructed by CREATE TABLE */ Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */ @@ -11534,6 +11757,8 @@ struct Parse { #endif Table *pZombieTab; /* List of Table objects to delete after code gen */ TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */ + With *pWith; /* Current WITH clause, or NULL */ + u8 bFreeWith; /* True if pWith should be freed with parser */ }; /* @@ -11653,7 +11878,7 @@ struct TriggerStep { Select *pSelect; /* SELECT statment or RHS of INSERT INTO .. SELECT ... */ Token target; /* Target table for DELETE, UPDATE, INSERT */ Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */ - ExprList *pExprList; /* SET clause for UPDATE. VALUES clause for INSERT */ + ExprList *pExprList; /* SET clause for UPDATE. */ IdList *pIdList; /* Column names for INSERT */ TriggerStep *pNext; /* Next in the link-list */ TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ @@ -11714,6 +11939,7 @@ struct Sqlite3Config { int bOpenUri; /* True to interpret filenames as URIs */ int bUseCis; /* Use covering indices for full-scans */ int mxStrlen; /* Maximum string length */ + int neverCorrupt; /* Database is always well-formed */ int szLookaside; /* Default lookaside buffer size */ int nLookaside; /* Default lookaside buffer count */ sqlite3_mem_methods m; /* Low-level memory allocation interface */ @@ -11750,15 +11976,33 @@ struct Sqlite3Config { #endif }; +/* +** This macro is used inside of assert() statements to indicate that +** the assert is only valid on a well-formed database. Instead of: +** +** assert( X ); +** +** One writes: +** +** assert( X || CORRUPT_DB ); +** +** CORRUPT_DB is true during normal operation. CORRUPT_DB does not indicate +** that the database is definitely corrupt, only that it might be corrupt. +** For most test cases, CORRUPT_DB is set to false using a special +** sqlite3_test_control(). This enables assert() statements to prove +** things that are always true for well-formed databases. +*/ +#define CORRUPT_DB (sqlite3Config.neverCorrupt==0) + /* ** Context pointer passed down through the tree-walk. */ struct Walker { int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */ int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */ + void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */ Parse *pParse; /* Parser context. */ int walkerDepth; /* Number of subqueries */ - u8 bSelectDepthFirst; /* Do subqueries first */ union { /* Extra data for callback */ NameContext *pNC; /* Naming context */ int i; /* Integer value */ @@ -11782,6 +12026,21 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*); #define WRC_Prune 1 /* Omit children but continue walking siblings */ #define WRC_Abort 2 /* Abandon the tree walk */ +/* +** An instance of this structure represents a set of one or more CTEs +** (common table expressions) created by a single WITH clause. +*/ +struct With { + int nCte; /* Number of CTEs in the WITH clause */ + With *pOuter; /* Containing WITH clause, or NULL */ + struct Cte { /* For each CTE in the WITH clause.... */ + char *zName; /* Name of this CTE */ + ExprList *pCols; /* List of explicit column names, or NULL */ + Select *pSelect; /* The definition of this CTE */ + const char *zErr; /* Error message for circular references */ + } a[1]; +}; + /* ** Assuming zIn points to the first byte of a UTF-8 character, ** advance zIn to point to the first byte of the next UTF-8 character. @@ -11921,10 +12180,20 @@ SQLITE_PRIVATE int sqlite3IsNaN(double); # define sqlite3IsNaN(X) 0 #endif -SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list); -#ifndef SQLITE_OMIT_TRACE -SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...); -#endif +/* +** An instance of the following structure holds information about SQL +** functions arguments that are the parameters to the printf() function. +*/ +struct PrintfArguments { + int nArg; /* Total number of arguments */ + int nUsed; /* Number of arguments used so far */ + sqlite3_value **apArg; /* The argument values */ +}; + +#define SQLITE_PRINTF_INTERNAL 0x01 +#define SQLITE_PRINTF_SQLFUNC 0x02 +SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, u32, const char*, va_list); +SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, u32, const char*, ...); SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...); SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list); SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...); @@ -11990,6 +12259,8 @@ SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int); SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*); SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*); SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *, int); +SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table*); +SQLITE_PRIVATE i16 sqlite3ColumnOfIndex(Index*, i16); SQLITE_PRIVATE void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int); SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*); SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int); @@ -11998,7 +12269,7 @@ SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*); SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*); SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*); SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*); -SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*); +SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*); SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*, sqlite3_vfs**,char**,char **); SQLITE_PRIVATE Btree *sqlite3DbNameToBtree(sqlite3*,const char*); @@ -12037,7 +12308,7 @@ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse); # define sqlite3AutoincrementEnd(X) #endif SQLITE_PRIVATE int sqlite3CodeCoroutine(Parse*, Select*, SelectDest*); -SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int); +SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, Select*, IdList*, int); SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int*,int*); SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*); SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*); @@ -12051,6 +12322,7 @@ SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*); SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*); SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*); SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*); +SQLITE_PRIVATE Index *sqlite3AllocateIndexObject(sqlite3*,i16,int,char**); SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*, Expr*, int, int); SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int); @@ -12073,7 +12345,7 @@ SQLITE_PRIVATE int sqlite3WhereIsDistinct(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereContinueLabel(WhereInfo*); SQLITE_PRIVATE int sqlite3WhereBreakLabel(WhereInfo*); -SQLITE_PRIVATE int sqlite3WhereOkOnePass(WhereInfo*); +SQLITE_PRIVATE int sqlite3WhereOkOnePass(WhereInfo*, int*); SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int, u8); SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int); SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int); @@ -12084,11 +12356,13 @@ SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int); SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*); SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int); SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int); +SQLITE_PRIVATE void sqlite3ExprCodeAtInit(Parse*, Expr*, int, u8); SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*); SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int); -SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*); -SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int); +SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, u8); +#define SQLITE_ECEL_DUP 0x01 /* Deep, not shallow copies */ +#define SQLITE_ECEL_FACTOR 0x02 /* Factor out constant terms */ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse*, Expr*, int, int); SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse*, Expr*, int, int); SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*); @@ -12109,7 +12383,6 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr*, SrcList*); SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*); SQLITE_PRIVATE void sqlite3PrngSaveState(void); SQLITE_PRIVATE void sqlite3PrngRestoreState(void); -SQLITE_PRIVATE void sqlite3PrngResetState(void); SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*,int); SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int); SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb); @@ -12127,17 +12400,19 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*); SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int); SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); SQLITE_PRIVATE int sqlite3IsRowid(const char*); -SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int); -SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*); -SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int, int*); -SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int, - int*,int,int,int,int,int*); -SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int); -SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int); +SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8); +SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int, int*); +SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int, int*,Index*,int); +SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int*,int,int,int,int, + u8,u8,int,int*); +SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*,Table*,int,int,int,int*,int,int,int); +SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int, u8*, int*, int*); SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int); SQLITE_PRIVATE void sqlite3MultiWrite(Parse*); SQLITE_PRIVATE void sqlite3MayAbort(Parse*); -SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, int, char*, int); +SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, int, char*, i8, u8); +SQLITE_PRIVATE void sqlite3UniqueConstraint(Parse*, int, Index*); +SQLITE_PRIVATE void sqlite3RowidConstraint(Parse*, int, Table*); SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int); SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int); SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int); @@ -12171,7 +12446,7 @@ SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, i SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, - ExprList*,Select*,u8); + Select*,u8); SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8); SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*); @@ -12276,8 +12551,7 @@ SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n); SQLITE_PRIVATE u8 sqlite3HexToInt(int h); SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); -#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \ - defined(SQLITE_DEBUG_OS_TRACE) +#if defined(SQLITE_TEST) SQLITE_PRIVATE const char *sqlite3ErrName(int); #endif @@ -12307,6 +12581,7 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8); SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8); SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, void(*)(void*)); +SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value*); SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*); SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *); SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8); @@ -12355,8 +12630,13 @@ SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int); SQLITE_PRIVATE void sqlite3SchemaClear(void *); SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *); SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *); -SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3*,int); -SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *); +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3*,int,int); +SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo*); +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoRef(KeyInfo*); +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*); +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3KeyInfoIsWriteable(KeyInfo*); +#endif SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*), @@ -12367,6 +12647,7 @@ SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *); SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int); SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int); +SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum*,const char*); SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum*,int); SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*); SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*); @@ -12448,6 +12729,7 @@ SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**) SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context*); SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); +SQLITE_PRIVATE void sqlite3ParserReset(Parse*); SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*); SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*); SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *); @@ -12457,6 +12739,14 @@ SQLITE_PRIVATE const char *sqlite3JournalModename(int); SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*); SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int); #endif +#ifndef SQLITE_OMIT_CTE +SQLITE_PRIVATE With *sqlite3WithAdd(Parse*,With*,Token*,ExprList*,Select*); +SQLITE_PRIVATE void sqlite3WithDelete(sqlite3*,With*); +SQLITE_PRIVATE void sqlite3WithPush(Parse*, With*, u8); +#else +#define sqlite3WithPush(x,y,z) +#define sqlite3WithDelete(x,y) +#endif /* Declarations for functions in fkey.c. All of these are replaced by ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign @@ -12764,6 +13054,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { SQLITE_USE_URI, /* bOpenUri */ SQLITE_ALLOW_COVERING_INDEX_SCAN, /* bUseCis */ 0x7ffffffe, /* mxStrlen */ + 0, /* neverCorrupt */ 128, /* szLookaside */ 500, /* nLookaside */ {0,0,0,0,0,0,0,0}, /* m */ @@ -12799,7 +13090,6 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { #endif }; - /* ** Hash table for global functions - functions common to all ** database connections. After initialization, this table is @@ -13196,6 +13486,9 @@ static const char * const azCompileOpt[] = { #ifdef SQLITE_SOUNDEX "SOUNDEX", #endif +#ifdef SQLITE_SYSTEM_MALLOC + "SYSTEM_MALLOC", +#endif #ifdef SQLITE_TCL "TCL", #endif @@ -13211,6 +13504,9 @@ static const char * const azCompileOpt[] = { #ifdef SQLITE_USE_ALLOCA "USE_ALLOCA", #endif +#ifdef SQLITE_WIN32_MALLOC + "WIN32_MALLOC", +#endif #ifdef SQLITE_ZERO_MALLOC "ZERO_MALLOC" #endif @@ -13310,7 +13606,7 @@ typedef struct VdbeOp Op; /* ** Boolean values */ -typedef unsigned char Bool; +typedef unsigned Bool; /* Opaque type used by code in vdbesort.c */ typedef struct VdbeSorter VdbeSorter; @@ -13327,6 +13623,9 @@ typedef struct AuxData AuxData; ** loop over all entries of the Btree. You can also insert new BTree ** entries or retrieve the key or data from the entry that the cursor ** is currently pointing to. +** +** Cursors can also point to virtual tables, sorters, or "pseudo-tables". +** A pseudo-table is a single-row table implemented by registers. ** ** Every cursor that the virtual machine has open is represented by an ** instance of the following structure. @@ -13335,31 +13634,24 @@ struct VdbeCursor { BtCursor *pCursor; /* The cursor structure of the backend */ Btree *pBt; /* Separate file holding temporary table */ KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */ - int iDb; /* Index of cursor database in db->aDb[] (or -1) */ + int seekResult; /* Result of previous sqlite3BtreeMoveto() */ int pseudoTableReg; /* Register holding pseudotable content. */ - int nField; /* Number of fields in the header */ - Bool zeroed; /* True if zeroed out and ready for reuse */ - Bool rowidIsValid; /* True if lastRowid is valid */ - Bool atFirst; /* True if pointing to first entry */ - Bool useRandomRowid; /* Generate new record numbers semi-randomly */ - Bool nullRow; /* True if pointing to a row with no data */ - Bool deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */ - Bool isTable; /* True if a table requiring integer keys */ - Bool isIndex; /* True if an index containing keys only - no data */ - Bool isOrdered; /* True if the underlying table is BTREE_UNORDERED */ - Bool isSorter; /* True if a new-style sorter */ - Bool multiPseudo; /* Multi-register pseudo-cursor */ + i16 nField; /* Number of fields in the header */ + u16 nHdrParsed; /* Number of header fields parsed so far */ + i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */ + u8 nullRow; /* True if pointing to a row with no data */ + u8 rowidIsValid; /* True if lastRowid is valid */ + u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */ + Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */ + Bool isTable:1; /* True if a table requiring integer keys */ + Bool isOrdered:1; /* True if the underlying table is BTREE_UNORDERED */ + Bool multiPseudo:1; /* Multi-register pseudo-cursor */ sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */ - const sqlite3_module *pModule; /* Module for cursor pVtabCursor */ i64 seqCount; /* Sequence counter */ i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */ - i64 lastRowid; /* Last rowid from a Next or NextIdx operation */ + i64 lastRowid; /* Rowid being deleted by OP_Delete */ VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */ - /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or - ** OP_IsUnique opcode on this cursor. */ - int seekResult; - /* Cached information about the header for the data record that the ** cursor is currently pointing to. Only valid if cacheStatus matches ** Vdbe.cacheCtr. Vdbe.cacheCtr will never take on the value of @@ -13370,10 +13662,14 @@ struct VdbeCursor { ** be NULL. */ u32 cacheStatus; /* Cache is valid if this matches Vdbe.cacheCtr */ - int payloadSize; /* Total number of bytes in the record */ - u32 *aType; /* Type values for all entries in the record */ - u32 *aOffset; /* Cached offsets to the start of each columns data */ - u8 *aRow; /* Data for the current row, if all on one page */ + u32 payloadSize; /* Total number of bytes in the record */ + u32 szRow; /* Byte available in aRow */ + u32 iHdrOffset; /* Offset to next unparsed byte of the header */ + const u8 *aRow; /* Data for the current row, if all on one page */ + u32 aType[1]; /* Type values for all entries in the record */ + /* 2*nField extra array elements allocated for aType[], beyond the one + ** static element declared in the structure. nField total array slots for + ** aType[] and nField+1 array slots for aOffset[] */ }; typedef struct VdbeCursor VdbeCursor; @@ -13586,12 +13882,9 @@ struct Vdbe { Mem **apArg; /* Arguments to currently executing user function */ Mem *aColName; /* Column names to return */ Mem *pResultSet; /* Pointer to an array of results */ + Parse *pParse; /* Parsing context used to create this Vdbe */ int nMem; /* Number of memory locations currently allocated */ int nOp; /* Number of instructions in the program */ - int nOpAlloc; /* Number of slots allocated for aOp[] */ - int nLabel; /* Number of labels used */ - int *aLabel; /* Space to hold the labels */ - u16 nResColumn; /* Number of columns in one row of the result set */ int nCursor; /* Number of slots in apCsr[] */ u32 magic; /* Magic number for sanity checking */ char *zErrMsg; /* Error message written here */ @@ -13604,6 +13897,7 @@ struct Vdbe { u32 cacheCtr; /* VdbeCursor row cache generation counter */ int pc; /* The program counter */ int rc; /* Value to return */ + u16 nResColumn; /* Number of columns in one row of the result set */ u8 errorAction; /* Recovery action to do in case of an error */ u8 minWriteFileFormat; /* Minimum file format for writable database files */ bft explain:2; /* True if EXPLAIN present on SQL command */ @@ -13630,9 +13924,6 @@ struct Vdbe { i64 nStmtDefImmCons; /* Number of def. imm constraints when stmt started */ char *zSql; /* Text of the SQL statement that generated this */ void *pFree; /* Free this when deleting the vdbe */ -#ifdef SQLITE_DEBUG - FILE *trace; /* Write an execution trace here, if not NULL */ -#endif #ifdef SQLITE_ENABLE_TREE_EXPLAIN Explain *pExplain; /* The explainer */ char *zExplain; /* Explanation of data structures */ @@ -13666,7 +13957,7 @@ SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*); #endif SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32); SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int); -SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int); +SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32); SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(Vdbe*, int, int); @@ -13701,7 +13992,7 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*); SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*); -SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*); +SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,u32,u32,int,Mem*); SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p); SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p); #define VdbeMemRelease(X) \ @@ -13722,7 +14013,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *, Mem *); SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, const VdbeCursor *, int *); SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, const VdbeCursor *, int *); SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, const VdbeCursor *, Mem *); -SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int *); +SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int, int *); #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0 SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe*); @@ -15256,7 +15547,21 @@ SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){ ** routine has no return value since the return value would be meaningless. */ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ - DO_OS_MALLOC_TEST(id); +#ifdef SQLITE_TEST + if( op!=SQLITE_FCNTL_COMMIT_PHASETWO ){ + /* Faults are not injected into COMMIT_PHASETWO because, assuming SQLite + ** is using a regular VFS, it is called after the corresponding + ** transaction has been committed. Injecting a fault at this point + ** confuses the test scripts - the COMMIT comand returns SQLITE_NOMEM + ** but the transaction is committed anyway. + ** + ** The core must call OsFileControl() though, not OsFileControlHint(), + ** as if a custom VFS (e.g. zipvfs) returns an error here, it probably + ** means the commit really has failed and an error should be returned + ** to the user. */ + DO_OS_MALLOC_TEST(id); + } +#endif return id->pMethods->xFileControl(id, op, pArg); } SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){ @@ -15726,16 +16031,6 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ ** macros. */ #ifdef SQLITE_SYSTEM_MALLOC - -/* -** The MSVCRT has malloc_usable_size() but it is called _msize(). -** The use of _msize() is automatic, but can be disabled by compiling -** with -DSQLITE_WITHOUT_MSIZE -*/ -#if defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE) -# define SQLITE_MALLOCSIZE _msize -#endif - #if defined(__APPLE__) && !defined(SQLITE_WITHOUT_ZONEMALLOC) /* @@ -15758,22 +16053,48 @@ static malloc_zone_t* _sqliteZone_; ** Use standard C library malloc and free on non-Apple systems. ** Also used by Apple systems if SQLITE_WITHOUT_ZONEMALLOC is defined. */ -#define SQLITE_MALLOC(x) malloc(x) -#define SQLITE_FREE(x) free(x) -#define SQLITE_REALLOC(x,y) realloc((x),(y)) +#define SQLITE_MALLOC(x) malloc(x) +#define SQLITE_FREE(x) free(x) +#define SQLITE_REALLOC(x,y) realloc((x),(y)) -#if (defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE)) \ - || (defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE)) -# include /* Needed for malloc_usable_size on linux */ -#endif -#ifdef HAVE_MALLOC_USABLE_SIZE -# ifndef SQLITE_MALLOCSIZE -# define SQLITE_MALLOCSIZE(x) malloc_usable_size(x) -# endif -#else -# undef SQLITE_MALLOCSIZE +/* +** The malloc.h header file is needed for malloc_usable_size() function +** on some systems (e.g. Linux). +*/ +#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE) +# define SQLITE_USE_MALLOC_H +# define SQLITE_USE_MALLOC_USABLE_SIZE +/* +** The MSVCRT has malloc_usable_size(), but it is called _msize(). The +** use of _msize() is automatic, but can be disabled by compiling with +** -DSQLITE_WITHOUT_MSIZE. Using the _msize() function also requires +** the malloc.h header file. +*/ +#elif defined(_MSC_VER) && !defined(SQLITE_WITHOUT_MSIZE) +# define SQLITE_USE_MALLOC_H +# define SQLITE_USE_MSIZE #endif +/* +** Include the malloc.h header file, if necessary. Also set define macro +** SQLITE_MALLOCSIZE to the appropriate function name, which is _msize() +** for MSVC and malloc_usable_size() for most other systems (e.g. Linux). +** The memory size function can always be overridden manually by defining +** the macro SQLITE_MALLOCSIZE to the desired function name. +*/ +#if defined(SQLITE_USE_MALLOC_H) +# include +# if defined(SQLITE_USE_MALLOC_USABLE_SIZE) +# if !defined(SQLITE_MALLOCSIZE) +# define SQLITE_MALLOCSIZE(x) malloc_usable_size(x) +# endif +# elif defined(SQLITE_USE_MSIZE) +# if !defined(SQLITE_MALLOCSIZE) +# define SQLITE_MALLOCSIZE _msize +# endif +# endif +#endif /* defined(SQLITE_USE_MALLOC_H) */ + #endif /* __APPLE__ or not __APPLE__ */ /* @@ -17379,32 +17700,13 @@ static void memsys5Leave(void){ static int memsys5Size(void *p){ int iSize = 0; if( p ){ - int i = ((u8 *)p-mem5.zPool)/mem5.szAtom; + int i = (int)(((u8 *)p-mem5.zPool)/mem5.szAtom); assert( i>=0 && i=0 && iLogsize<=LOGMAX ); - i = iFirst = mem5.aiFreelist[iLogsize]; - assert( iFirst>=0 ); - while( i>0 ){ - if( inext; - } - memsys5Unlink(iFirst, iLogsize); - return iFirst; -} - /* ** Return a block of memory of at least nBytes in size. ** Return NULL if unable. Return NULL if nBytes==0. @@ -17450,7 +17752,8 @@ static void *memsys5MallocUnsafe(int nByte){ sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte); return 0; } - i = memsys5UnlinkFirst(iBin); + i = mem5.aiFreelist[iBin]; + memsys5Unlink(i, iBin); while( iBin>iLogsize ){ int newSize; @@ -17484,7 +17787,7 @@ static void memsys5FreeUnsafe(void *pOld){ /* Set iBlock to the index of the block pointed to by pOld in ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool. */ - iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom; + iBlock = (int)(((u8 *)pOld-mem5.zPool)/mem5.szAtom); /* Check that the pointer pOld points to a valid, non-free block. */ assert( iBlock>=0 && iBlock=db->lookaside.pStart && plookaside.pEnd; + return p>=db->lookaside.pStart && plookaside.pEnd; } #else #define isLookaside(A,B) 0 @@ -19269,8 +19572,9 @@ SQLITE_PRIVATE int sqlite3MallocSize(void *p){ return sqlite3GlobalConfig.m.xSize(p); } SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){ - assert( db==0 || sqlite3_mutex_held(db->mutex) ); - if( db && isLookaside(db, p) ){ + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + if( isLookaside(db, p) ){ return db->lookaside.sz; }else{ assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) ); @@ -19753,6 +20057,31 @@ SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *pAccum, int N){ } } +/* +** Set the StrAccum object to an error mode. +*/ +static void setStrAccumError(StrAccum *p, u8 eError){ + p->accError = eError; + p->nAlloc = 0; +} + +/* +** Extra argument values from a PrintfArguments object +*/ +static sqlite3_int64 getIntArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0; + return sqlite3_value_int64(p->apArg[p->nUsed++]); +} +static double getDoubleArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0.0; + return sqlite3_value_double(p->apArg[p->nUsed++]); +} +static char *getTextArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0; + return (char*)sqlite3_value_text(p->apArg[p->nUsed++]); +} + + /* ** On machines with a small stack size, you can redefine the ** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired. @@ -19766,10 +20095,10 @@ SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *pAccum, int N){ ** Render a string given by "fmt" into the StrAccum object. */ SQLITE_PRIVATE void sqlite3VXPrintf( - StrAccum *pAccum, /* Accumulate results here */ - int useExtended, /* Allow extended %-conversions */ - const char *fmt, /* Format string */ - va_list ap /* arguments */ + StrAccum *pAccum, /* Accumulate results here */ + u32 bFlags, /* SQLITE_PRINTF_* flags */ + const char *fmt, /* Format string */ + va_list ap /* arguments */ ){ int c; /* Next character in the format string */ char *bufpt; /* Pointer to the conversion buffer */ @@ -19787,6 +20116,8 @@ SQLITE_PRIVATE void sqlite3VXPrintf( etByte flag_longlong; /* True if the "ll" flag is present */ etByte done; /* Loop termination flag */ etByte xtype = 0; /* Conversion paradigm */ + u8 bArgList; /* True for SQLITE_PRINTF_SQLFUNC */ + u8 useIntern; /* Ok to use internal conversions (ex: %T) */ char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ sqlite_uint64 longvalue; /* Value for integer types */ LONGDOUBLE_TYPE realvalue; /* Value for real types */ @@ -19801,9 +20132,18 @@ SQLITE_PRIVATE void sqlite3VXPrintf( etByte flag_dp; /* True if decimal point should be shown */ etByte flag_rtz; /* True if trailing zeros should be removed */ #endif + PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */ char buf[etBUFSIZE]; /* Conversion buffer */ bufpt = 0; + if( bFlags ){ + if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){ + pArgList = va_arg(ap, PrintfArguments*); + } + useIntern = bFlags & SQLITE_PRINTF_INTERNAL; + }else{ + bArgList = useIntern = 0; + } for(; (c=(*fmt))!=0; ++fmt){ if( c!='%' ){ int amt; @@ -19835,7 +20175,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( /* Get the field width */ width = 0; if( c=='*' ){ - width = va_arg(ap,int); + if( bArgList ){ + width = (int)getIntArg(pArgList); + }else{ + width = va_arg(ap,int); + } if( width<0 ){ flag_leftjustify = 1; width = -width; @@ -19852,7 +20196,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( precision = 0; c = *++fmt; if( c=='*' ){ - precision = va_arg(ap,int); + if( bArgList ){ + precision = (int)getIntArg(pArgList); + }else{ + precision = va_arg(ap,int); + } if( precision<0 ) precision = -precision; c = *++fmt; }else{ @@ -19883,7 +20231,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( for(idx=0; idxflags & FLAG_INTERN)==0 ){ + if( useIntern || (infop->flags & FLAG_INTERN)==0 ){ xtype = infop->type; }else{ return; @@ -19923,7 +20271,9 @@ SQLITE_PRIVATE void sqlite3VXPrintf( case etRADIX: if( infop->flags & FLAG_SIGNED ){ i64 v; - if( flag_longlong ){ + if( bArgList ){ + v = getIntArg(pArgList); + }else if( flag_longlong ){ v = va_arg(ap,i64); }else if( flag_long ){ v = va_arg(ap,long int); @@ -19944,7 +20294,9 @@ SQLITE_PRIVATE void sqlite3VXPrintf( else prefix = 0; } }else{ - if( flag_longlong ){ + if( bArgList ){ + longvalue = (u64)getIntArg(pArgList); + }else if( flag_longlong ){ longvalue = va_arg(ap,u64); }else if( flag_long ){ longvalue = va_arg(ap,unsigned long int); @@ -19964,7 +20316,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( nOut = precision + 10; zOut = zExtra = sqlite3Malloc( nOut ); if( zOut==0 ){ - pAccum->accError = STRACCUM_NOMEM; + setStrAccumError(pAccum, STRACCUM_NOMEM); return; } } @@ -20004,7 +20356,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( case etFLOAT: case etEXP: case etGENERIC: - realvalue = va_arg(ap,double); + if( bArgList ){ + realvalue = getDoubleArg(pArgList); + }else{ + realvalue = va_arg(ap,double); + } #ifdef SQLITE_OMIT_FLOATING_POINT length = 0; #else @@ -20076,7 +20432,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( MAX(e2,0)+precision+width > etBUFSIZE - 15 ){ bufpt = zExtra = sqlite3Malloc( MAX(e2,0)+precision+width+15 ); if( bufpt==0 ){ - pAccum->accError = STRACCUM_NOMEM; + setStrAccumError(pAccum, STRACCUM_NOMEM); return; } } @@ -20159,7 +20515,9 @@ SQLITE_PRIVATE void sqlite3VXPrintf( #endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */ break; case etSIZE: - *(va_arg(ap,int*)) = pAccum->nChar; + if( !bArgList ){ + *(va_arg(ap,int*)) = pAccum->nChar; + } length = width = 0; break; case etPERCENT: @@ -20168,7 +20526,12 @@ SQLITE_PRIVATE void sqlite3VXPrintf( length = 1; break; case etCHARX: - c = va_arg(ap,int); + if( bArgList ){ + bufpt = getTextArg(pArgList); + c = bufpt ? bufpt[0] : 0; + }else{ + c = va_arg(ap,int); + } buf[0] = (char)c; if( precision>=0 ){ for(idx=1; idx=0 ){ @@ -20199,7 +20566,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( int needQuote; char ch; char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */ - char *escarg = va_arg(ap,char*); + char *escarg; + + if( bArgList ){ + escarg = getTextArg(pArgList); + }else{ + escarg = va_arg(ap,char*); + } isnull = escarg==0; if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)"); k = precision; @@ -20211,7 +20584,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( n>etBUFSIZE ){ bufpt = zExtra = sqlite3Malloc( n ); if( bufpt==0 ){ - pAccum->accError = STRACCUM_NOMEM; + setStrAccumError(pAccum, STRACCUM_NOMEM); return; } }else{ @@ -20234,7 +20607,8 @@ SQLITE_PRIVATE void sqlite3VXPrintf( } case etTOKEN: { Token *pToken = va_arg(ap, Token*); - if( pToken ){ + assert( bArgList==0 ); + if( pToken && pToken->n ){ sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n); } length = width = 0; @@ -20244,12 +20618,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( SrcList *pSrc = va_arg(ap, SrcList*); int k = va_arg(ap, int); struct SrcList_item *pItem = &pSrc->a[k]; + assert( bArgList==0 ); assert( k>=0 && knSrc ); if( pItem->zDatabase ){ - sqlite3StrAccumAppend(pAccum, pItem->zDatabase, -1); + sqlite3StrAccumAppendAll(pAccum, pItem->zDatabase); sqlite3StrAccumAppend(pAccum, ".", 1); } - sqlite3StrAccumAppend(pAccum, pItem->zName, -1); + sqlite3StrAccumAppendAll(pAccum, pItem->zName); length = width = 0; break; } @@ -20280,7 +20655,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( sqlite3AppendSpace(pAccum, nspace); } } - sqlite3_free(zExtra); + if( zExtra ) sqlite3_free(zExtra); }/* End for loop over the format string */ } /* End of function */ @@ -20288,22 +20663,20 @@ SQLITE_PRIVATE void sqlite3VXPrintf( ** Append N bytes of text from z to the StrAccum object. */ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ - assert( z!=0 || N==0 ); - if( p->accError ){ - testcase(p->accError==STRACCUM_TOOBIG); - testcase(p->accError==STRACCUM_NOMEM); - return; - } - assert( p->zText!=0 || p->nChar==0 ); - if( N<=0 ){ - if( N==0 || z[0]==0 ) return; - N = sqlite3Strlen30(z); - } + assert( z!=0 ); + assert( p->zText!=0 || p->nChar==0 || p->accError ); + assert( N>=0 ); + assert( p->accError==0 || p->nAlloc==0 ); if( p->nChar+N >= p->nAlloc ){ char *zNew; + if( p->accError ){ + testcase(p->accError==STRACCUM_TOOBIG); + testcase(p->accError==STRACCUM_NOMEM); + return; + } if( !p->useMalloc ){ - p->accError = STRACCUM_TOOBIG; N = p->nAlloc - p->nChar - 1; + setStrAccumError(p, STRACCUM_TOOBIG); if( N<=0 ){ return; } @@ -20313,7 +20686,7 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ szNew += N + 1; if( szNew > p->mxAlloc ){ sqlite3StrAccumReset(p); - p->accError = STRACCUM_TOOBIG; + setStrAccumError(p, STRACCUM_TOOBIG); return; }else{ p->nAlloc = (int)szNew; @@ -20327,8 +20700,8 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar); p->zText = zNew; }else{ - p->accError = STRACCUM_NOMEM; sqlite3StrAccumReset(p); + setStrAccumError(p, STRACCUM_NOMEM); return; } } @@ -20338,6 +20711,14 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){ p->nChar += N; } +/* +** Append the complete text of zero-terminated string z[] to the p string. +*/ +SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){ + sqlite3StrAccumAppend(p, z, sqlite3Strlen30(z)); +} + + /* ** Finish off a string by making sure it is zero-terminated. ** Return a pointer to the resulting string. Return a NULL @@ -20355,7 +20736,7 @@ SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){ if( p->zText ){ memcpy(p->zText, p->zBase, p->nChar+1); }else{ - p->accError = STRACCUM_NOMEM; + setStrAccumError(p, STRACCUM_NOMEM); } } } @@ -20401,7 +20782,7 @@ SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list a sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), db->aLimit[SQLITE_LIMIT_LENGTH]); acc.db = db; - sqlite3VXPrintf(&acc, 1, zFormat, ap); + sqlite3VXPrintf(&acc, SQLITE_PRINTF_INTERNAL, zFormat, ap); z = sqlite3StrAccumFinish(&acc); if( acc.accError==STRACCUM_NOMEM ){ db->mallocFailed = 1; @@ -20557,17 +20938,15 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){ } #endif -#ifndef SQLITE_OMIT_TRACE /* ** variable-argument wrapper around sqlite3VXPrintf(). */ -SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){ +SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, u32 bFlags, const char *zFormat, ...){ va_list ap; va_start(ap,zFormat); - sqlite3VXPrintf(p, 1, zFormat, ap); + sqlite3VXPrintf(p, bFlags, zFormat, ap); va_end(ap); } -#endif /************** End of printf.c **********************************************/ /************** Begin file random.c ******************************************/ @@ -20624,6 +21003,12 @@ SQLITE_API void sqlite3_randomness(int N, void *pBuf){ sqlite3_mutex_enter(mutex); #endif + if( N<=0 ){ + wsdPrng.isInit = 0; + sqlite3_mutex_leave(mutex); + return; + } + /* Initialize the state of the random number generator once, ** the first time this routine is called. The seed value does ** not need to contain a lot of randomness since we are not @@ -20651,7 +21036,8 @@ SQLITE_API void sqlite3_randomness(int N, void *pBuf){ wsdPrng.isInit = 1; } - while( N-- ){ + assert( N>0 ); + do{ wsdPrng.i++; t = wsdPrng.s[wsdPrng.i]; wsdPrng.j += t; @@ -20659,7 +21045,7 @@ SQLITE_API void sqlite3_randomness(int N, void *pBuf){ wsdPrng.s[wsdPrng.j] = t; t += wsdPrng.s[wsdPrng.i]; *(zBuf++) = wsdPrng.s[t]; - } + }while( --N ); sqlite3_mutex_leave(mutex); } @@ -20688,9 +21074,6 @@ SQLITE_PRIVATE void sqlite3PrngRestoreState(void){ sizeof(sqlite3Prng) ); } -SQLITE_PRIVATE void sqlite3PrngResetState(void){ - GLOBAL(struct sqlite3PrngType, sqlite3Prng).isInit = 0; -} #endif /* SQLITE_OMIT_BUILTIN_TEST */ /************** End of random.c **********************************************/ @@ -21342,18 +21725,17 @@ SQLITE_PRIVATE int sqlite3Strlen30(const char *z){ ** to NULL. */ SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){ - if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){ - db->errCode = err_code; - if( zFormat ){ - char *z; - va_list ap; - va_start(ap, zFormat); - z = sqlite3VMPrintf(db, zFormat, ap); - va_end(ap); - sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC); - }else{ - sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC); - } + assert( db!=0 ); + db->errCode = err_code; + if( zFormat && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){ + char *z; + va_list ap; + va_start(ap, zFormat); + z = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC); + }else if( db->pErr ){ + sqlite3ValueSetNull(db->pErr); } } @@ -21692,12 +22074,12 @@ static int compare2pow63(const char *zNum, int incr){ ** If the zNum value is representable as a 64-bit twos-complement ** integer, then write that value into *pNum and return 0. ** -** If zNum is exactly 9223372036854665808, return 2. This special -** case is broken out because while 9223372036854665808 cannot be a -** signed 64-bit integer, its negative -9223372036854665808 can be. +** If zNum is exactly 9223372036854775808, return 2. This special +** case is broken out because while 9223372036854775808 cannot be a +** signed 64-bit integer, its negative -9223372036854775808 can be. ** ** If zNum is too big for a 64-bit integer and is not -** 9223372036854665808 or if zNum contains any non-numeric text, +** 9223372036854775808 or if zNum contains any non-numeric text, ** then return 1. ** ** length is the number of bytes in the string (bytes, not characters). @@ -21739,7 +22121,7 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc u = u*10 + c - '0'; } if( u>LARGEST_INT64 ){ - *pNum = SMALLEST_INT64; + *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; }else if( neg ){ *pNum = -(i64)u; }else{ @@ -21770,7 +22152,6 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc /* zNum is exactly 9223372036854775808. Fits if negative. The ** special case 2 overflow if positive */ assert( u-1==LARGEST_INT64 ); - assert( (*pNum)==SMALLEST_INT64 ); return neg ? 0 : 2; } } @@ -22230,7 +22611,8 @@ SQLITE_PRIVATE int sqlite3VarintLen(u64 v){ ** Read or write a four-byte big-endian integer value. */ SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){ - return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; + testcase( p[0]&0x80 ); + return ((unsigned)p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; } SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){ p[0] = (u8)(v>>24); @@ -22509,7 +22891,9 @@ SQLITE_PRIVATE u64 sqlite3LogEstToInt(LogEst x){ x /= 10; if( n>=5 ) n -= 2; else if( n>=1 ) n -= 1; - if( x>=3 ) return (n+8)<<(x-3); + if( x>=3 ){ + return x>60 ? (u64)LARGEST_INT64 : (n+8)<<(x-3); + } return (n+8)>>(3-x); } @@ -22569,7 +22953,7 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){ ** The hashing function. */ static unsigned int strHash(const char *z, int nKey){ - int h = 0; + unsigned int h = 0; assert( nKey>=0 ); while( nKey > 0 ){ h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++]; @@ -22800,159 +23184,166 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, voi /************** Begin file opcodes.c *****************************************/ /* Automatically generated. Do not edit */ /* See the mkopcodec.awk script for details. */ -#if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) +#if !defined(SQLITE_OMIT_EXPLAIN) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) +#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG) +# define OpHelp(X) "\0" X +#else +# define OpHelp(X) +#endif SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ static const char *const azName[] = { "?", - /* 1 */ "Function", - /* 2 */ "Savepoint", - /* 3 */ "AutoCommit", - /* 4 */ "Transaction", - /* 5 */ "SorterNext", - /* 6 */ "Prev", - /* 7 */ "Next", - /* 8 */ "AggStep", - /* 9 */ "Checkpoint", - /* 10 */ "JournalMode", - /* 11 */ "Vacuum", - /* 12 */ "VFilter", - /* 13 */ "VUpdate", - /* 14 */ "Goto", - /* 15 */ "Gosub", - /* 16 */ "Return", - /* 17 */ "Yield", - /* 18 */ "HaltIfNull", - /* 19 */ "Not", - /* 20 */ "Halt", - /* 21 */ "Integer", - /* 22 */ "Int64", - /* 23 */ "String", - /* 24 */ "Null", - /* 25 */ "Blob", - /* 26 */ "Variable", - /* 27 */ "Move", - /* 28 */ "Copy", - /* 29 */ "SCopy", - /* 30 */ "ResultRow", - /* 31 */ "CollSeq", - /* 32 */ "AddImm", - /* 33 */ "MustBeInt", - /* 34 */ "RealAffinity", - /* 35 */ "Permutation", - /* 36 */ "Compare", - /* 37 */ "Jump", - /* 38 */ "Once", - /* 39 */ "If", - /* 40 */ "IfNot", - /* 41 */ "Column", - /* 42 */ "Affinity", - /* 43 */ "MakeRecord", - /* 44 */ "Count", - /* 45 */ "ReadCookie", - /* 46 */ "SetCookie", - /* 47 */ "VerifyCookie", - /* 48 */ "OpenRead", - /* 49 */ "OpenWrite", - /* 50 */ "OpenAutoindex", - /* 51 */ "OpenEphemeral", - /* 52 */ "SorterOpen", - /* 53 */ "OpenPseudo", - /* 54 */ "Close", - /* 55 */ "SeekLt", - /* 56 */ "SeekLe", - /* 57 */ "SeekGe", - /* 58 */ "SeekGt", - /* 59 */ "Seek", - /* 60 */ "NotFound", - /* 61 */ "Found", - /* 62 */ "IsUnique", - /* 63 */ "NotExists", - /* 64 */ "Sequence", - /* 65 */ "NewRowid", - /* 66 */ "Insert", - /* 67 */ "InsertInt", - /* 68 */ "Or", - /* 69 */ "And", - /* 70 */ "Delete", - /* 71 */ "ResetCount", - /* 72 */ "SorterCompare", - /* 73 */ "IsNull", - /* 74 */ "NotNull", - /* 75 */ "Ne", - /* 76 */ "Eq", - /* 77 */ "Gt", - /* 78 */ "Le", - /* 79 */ "Lt", - /* 80 */ "Ge", - /* 81 */ "SorterData", - /* 82 */ "BitAnd", - /* 83 */ "BitOr", - /* 84 */ "ShiftLeft", - /* 85 */ "ShiftRight", - /* 86 */ "Add", - /* 87 */ "Subtract", - /* 88 */ "Multiply", - /* 89 */ "Divide", - /* 90 */ "Remainder", - /* 91 */ "Concat", - /* 92 */ "RowKey", - /* 93 */ "BitNot", - /* 94 */ "String8", - /* 95 */ "RowData", - /* 96 */ "Rowid", - /* 97 */ "NullRow", - /* 98 */ "Last", - /* 99 */ "SorterSort", - /* 100 */ "Sort", - /* 101 */ "Rewind", - /* 102 */ "SorterInsert", - /* 103 */ "IdxInsert", - /* 104 */ "IdxDelete", - /* 105 */ "IdxRowid", - /* 106 */ "IdxLT", - /* 107 */ "IdxGE", - /* 108 */ "Destroy", - /* 109 */ "Clear", - /* 110 */ "CreateIndex", - /* 111 */ "CreateTable", - /* 112 */ "ParseSchema", - /* 113 */ "LoadAnalysis", - /* 114 */ "DropTable", - /* 115 */ "DropIndex", - /* 116 */ "DropTrigger", - /* 117 */ "IntegrityCk", - /* 118 */ "RowSetAdd", - /* 119 */ "RowSetRead", - /* 120 */ "RowSetTest", - /* 121 */ "Program", - /* 122 */ "Param", - /* 123 */ "FkCounter", - /* 124 */ "FkIfZero", - /* 125 */ "MemMax", - /* 126 */ "IfPos", - /* 127 */ "IfNeg", - /* 128 */ "IfZero", - /* 129 */ "AggFinal", - /* 130 */ "Real", - /* 131 */ "IncrVacuum", - /* 132 */ "Expire", - /* 133 */ "TableLock", - /* 134 */ "VBegin", - /* 135 */ "VCreate", - /* 136 */ "VDestroy", - /* 137 */ "VOpen", - /* 138 */ "VColumn", - /* 139 */ "VNext", - /* 140 */ "VRename", - /* 141 */ "ToText", - /* 142 */ "ToBlob", - /* 143 */ "ToNumeric", - /* 144 */ "ToInt", - /* 145 */ "ToReal", - /* 146 */ "Pagecount", - /* 147 */ "MaxPgcnt", - /* 148 */ "Trace", - /* 149 */ "Noop", - /* 150 */ "Explain", + /* 1 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), + /* 2 */ "Savepoint" OpHelp(""), + /* 3 */ "AutoCommit" OpHelp(""), + /* 4 */ "Transaction" OpHelp(""), + /* 5 */ "SorterNext" OpHelp(""), + /* 6 */ "PrevIfOpen" OpHelp(""), + /* 7 */ "NextIfOpen" OpHelp(""), + /* 8 */ "Prev" OpHelp(""), + /* 9 */ "Next" OpHelp(""), + /* 10 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 11 */ "Checkpoint" OpHelp(""), + /* 12 */ "JournalMode" OpHelp(""), + /* 13 */ "Vacuum" OpHelp(""), + /* 14 */ "VFilter" OpHelp("iPlan=r[P3] zPlan='P4'"), + /* 15 */ "VUpdate" OpHelp("data=r[P3@P2]"), + /* 16 */ "Goto" OpHelp(""), + /* 17 */ "Gosub" OpHelp(""), + /* 18 */ "Return" OpHelp(""), + /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), + /* 20 */ "Yield" OpHelp(""), + /* 21 */ "HaltIfNull" OpHelp("if r[P3] null then halt"), + /* 22 */ "Halt" OpHelp(""), + /* 23 */ "Integer" OpHelp("r[P2]=P1"), + /* 24 */ "Int64" OpHelp("r[P2]=P4"), + /* 25 */ "String" OpHelp("r[P2]='P4' (len=P1)"), + /* 26 */ "Null" OpHelp("r[P2..P3]=NULL"), + /* 27 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), + /* 28 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), + /* 29 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), + /* 30 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), + /* 31 */ "SCopy" OpHelp("r[P2]=r[P1]"), + /* 32 */ "ResultRow" OpHelp("output=r[P1@P2]"), + /* 33 */ "CollSeq" OpHelp(""), + /* 34 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), + /* 35 */ "MustBeInt" OpHelp(""), + /* 36 */ "RealAffinity" OpHelp(""), + /* 37 */ "Permutation" OpHelp(""), + /* 38 */ "Compare" OpHelp(""), + /* 39 */ "Jump" OpHelp(""), + /* 40 */ "Once" OpHelp(""), + /* 41 */ "If" OpHelp(""), + /* 42 */ "IfNot" OpHelp(""), + /* 43 */ "Column" OpHelp("r[P3]=PX"), + /* 44 */ "Affinity" OpHelp("affinity(r[P1@P2])"), + /* 45 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), + /* 46 */ "Count" OpHelp("r[P2]=count()"), + /* 47 */ "ReadCookie" OpHelp(""), + /* 48 */ "SetCookie" OpHelp(""), + /* 49 */ "VerifyCookie" OpHelp(""), + /* 50 */ "OpenRead" OpHelp("root=P2 iDb=P3"), + /* 51 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), + /* 52 */ "OpenAutoindex" OpHelp("nColumn=P2"), + /* 53 */ "OpenEphemeral" OpHelp("nColumn=P2"), + /* 54 */ "SorterOpen" OpHelp(""), + /* 55 */ "OpenPseudo" OpHelp("content in r[P2@P3]"), + /* 56 */ "Close" OpHelp(""), + /* 57 */ "SeekLt" OpHelp("key=r[P3@P4]"), + /* 58 */ "SeekLe" OpHelp("key=r[P3@P4]"), + /* 59 */ "SeekGe" OpHelp("key=r[P3@P4]"), + /* 60 */ "SeekGt" OpHelp("key=r[P3@P4]"), + /* 61 */ "Seek" OpHelp("intkey=r[P2]"), + /* 62 */ "NoConflict" OpHelp("key=r[P3@P4]"), + /* 63 */ "NotFound" OpHelp("key=r[P3@P4]"), + /* 64 */ "Found" OpHelp("key=r[P3@P4]"), + /* 65 */ "NotExists" OpHelp("intkey=r[P3]"), + /* 66 */ "Sequence" OpHelp("r[P2]=rowid"), + /* 67 */ "NewRowid" OpHelp("r[P2]=rowid"), + /* 68 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), + /* 69 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), + /* 70 */ "Delete" OpHelp(""), + /* 71 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), + /* 72 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), + /* 73 */ "ResetCount" OpHelp(""), + /* 74 */ "SorterCompare" OpHelp("if key(P1)!=rtrim(r[P3],P4) goto P2"), + /* 75 */ "SorterData" OpHelp("r[P2]=data"), + /* 76 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), + /* 77 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), + /* 78 */ "Ne" OpHelp("if r[P1]!=r[P3] goto P2"), + /* 79 */ "Eq" OpHelp("if r[P1]==r[P3] goto P2"), + /* 80 */ "Gt" OpHelp("if r[P1]>r[P3] goto P2"), + /* 81 */ "Le" OpHelp("if r[P1]<=r[P3] goto P2"), + /* 82 */ "Lt" OpHelp("if r[P1]=r[P3] goto P2"), + /* 84 */ "RowKey" OpHelp("r[P2]=key"), + /* 85 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), + /* 86 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), + /* 87 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), + /* 89 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), + /* 90 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), + /* 91 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), + /* 92 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), + /* 93 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), + /* 94 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), + /* 95 */ "RowData" OpHelp("r[P2]=data"), + /* 96 */ "BitNot" OpHelp("r[P1]= ~r[P1]"), + /* 97 */ "String8" OpHelp("r[P2]='P4'"), + /* 98 */ "Rowid" OpHelp("r[P2]=rowid"), + /* 99 */ "NullRow" OpHelp(""), + /* 100 */ "Last" OpHelp(""), + /* 101 */ "SorterSort" OpHelp(""), + /* 102 */ "Sort" OpHelp(""), + /* 103 */ "Rewind" OpHelp(""), + /* 104 */ "SorterInsert" OpHelp(""), + /* 105 */ "IdxInsert" OpHelp("key=r[P2]"), + /* 106 */ "IdxDelete" OpHelp("key=r[P2@P3]"), + /* 107 */ "IdxRowid" OpHelp("r[P2]=rowid"), + /* 108 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 109 */ "IdxGE" OpHelp("key=r[P3@P4]"), + /* 110 */ "Destroy" OpHelp(""), + /* 111 */ "Clear" OpHelp(""), + /* 112 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"), + /* 113 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"), + /* 114 */ "ParseSchema" OpHelp(""), + /* 115 */ "LoadAnalysis" OpHelp(""), + /* 116 */ "DropTable" OpHelp(""), + /* 117 */ "DropIndex" OpHelp(""), + /* 118 */ "DropTrigger" OpHelp(""), + /* 119 */ "IntegrityCk" OpHelp(""), + /* 120 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 121 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 122 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), + /* 123 */ "Program" OpHelp(""), + /* 124 */ "Param" OpHelp(""), + /* 125 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 126 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), + /* 127 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 128 */ "IfPos" OpHelp("if r[P1]>0 goto P2"), + /* 129 */ "IfNeg" OpHelp("if r[P1]<0 goto P2"), + /* 130 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"), + /* 131 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 132 */ "IncrVacuum" OpHelp(""), + /* 133 */ "Real" OpHelp("r[P2]=P4"), + /* 134 */ "Expire" OpHelp(""), + /* 135 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 136 */ "VBegin" OpHelp(""), + /* 137 */ "VCreate" OpHelp(""), + /* 138 */ "VDestroy" OpHelp(""), + /* 139 */ "VOpen" OpHelp(""), + /* 140 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 141 */ "VNext" OpHelp(""), + /* 142 */ "VRename" OpHelp(""), + /* 143 */ "ToText" OpHelp(""), + /* 144 */ "ToBlob" OpHelp(""), + /* 145 */ "ToNumeric" OpHelp(""), + /* 146 */ "ToInt" OpHelp(""), + /* 147 */ "ToReal" OpHelp(""), + /* 148 */ "Pagecount" OpHelp(""), + /* 149 */ "MaxPgcnt" OpHelp(""), + /* 150 */ "Trace" OpHelp(""), + /* 151 */ "Noop" OpHelp(""), + /* 152 */ "Explain" OpHelp(""), }; return azName[i]; } @@ -23221,6 +23612,12 @@ struct unixFile { #endif }; +/* This variable holds the process id (pid) from when the xRandomness() +** method was called. If xOpen() is called from a different process id, +** indicating that a fork() has occurred, the PRNG will be reset. +*/ +static int randomnessPid = 0; + /* ** Allowed values for the unixFile.ctrlFlags bitmask: */ @@ -24484,6 +24881,15 @@ static int findInodeInfo( return SQLITE_OK; } +/* +** Return TRUE if pFile has been renamed or unlinked since it was first opened. +*/ +static int fileHasMoved(unixFile *pFile){ + struct stat buf; + return pFile->pInode!=0 && + (osStat(pFile->zPath, &buf)!=0 || buf.st_ino!=pFile->pInode->fileId.ino); +} + /* ** Check a unixFile that is a database. Verify the following: @@ -24518,10 +24924,7 @@ static void verifyDbFile(unixFile *pFile){ pFile->ctrlFlags |= UNIXFILE_WARNED; return; } - if( pFile->pInode!=0 - && ((rc = osStat(pFile->zPath, &buf))!=0 - || buf.st_ino!=pFile->pInode->fileId.ino) - ){ + if( fileHasMoved(pFile) ){ sqlite3_log(SQLITE_WARNING, "file renamed while open: %s", pFile->zPath); pFile->ctrlFlags |= UNIXFILE_WARNED; return; @@ -25059,7 +25462,9 @@ end_unlock: ** the requested locking level, this routine is a no-op. */ static int unixUnlock(sqlite3_file *id, int eFileLock){ +#if SQLITE_MAX_MMAP_SIZE>0 assert( eFileLock==SHARED_LOCK || ((unixFile *)id)->nFetchOut==0 ); +#endif return posixUnlock(id, eFileLock, 0); } @@ -26968,6 +27373,10 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ } return SQLITE_OK; } + case SQLITE_FCNTL_HAS_MOVED: { + *(int*)pArg = fileHasMoved(pFile); + return SQLITE_OK; + } #if SQLITE_MAX_MMAP_SIZE>0 case SQLITE_FCNTL_MMAP_SIZE: { i64 newLimit = *(i64*)pArg; @@ -27248,7 +27657,7 @@ static int unixShmSystemLock( #ifdef SQLITE_DEBUG { u16 mask; OSTRACE(("SHM-LOCK ")); - mask = (1<<(ofst+n)) - (1<31 ? 0xffff : (1<<(ofst+n)) - (1<0 unixFile *pFd = (unixFile *)fd; /* The underlying database file */ UNUSED_PARAMETER(iOff); -#if SQLITE_MAX_MMAP_SIZE>0 /* If p==0 (unmap the entire file) then there must be no outstanding ** xFetch references. Or, if p!=0 (meaning it is an xFetch reference), ** then there must be at least one outstanding. */ @@ -28018,6 +28427,10 @@ static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){ } assert( pFd->nFetchOut>=0 ); +#else + UNUSED_PARAMETER(fd); + UNUSED_PARAMETER(p); + UNUSED_PARAMETER(iOff); #endif return SQLITE_OK; } @@ -28808,6 +29221,16 @@ static int unixOpen( || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL ); + /* Detect a pid change and reset the PRNG. There is a race condition + ** here such that two or more threads all trying to open databases at + ** the same instant might all reset the PRNG. But multiple resets + ** are harmless. + */ + if( randomnessPid!=getpid() ){ + randomnessPid = getpid(); + sqlite3_randomness(0,0); + } + memset(p, 0, sizeof(unixFile)); if( eType==SQLITE_OPEN_MAIN_DB ){ @@ -29195,18 +29618,18 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ ** tests repeatable. */ memset(zBuf, 0, nBuf); + randomnessPid = getpid(); #if !defined(SQLITE_TEST) { - int pid, fd, got; + int fd, got; fd = robust_open("/dev/urandom", O_RDONLY, 0); if( fd<0 ){ time_t t; time(&t); memcpy(zBuf, &t, sizeof(t)); - pid = getpid(); - memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid)); - assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf ); - nBuf = sizeof(t) + sizeof(pid); + memcpy(&zBuf[sizeof(t)], &randomnessPid, sizeof(randomnessPid)); + assert( sizeof(t)+sizeof(randomnessPid)<=(size_t)nBuf ); + nBuf = sizeof(t) + sizeof(randomnessPid); }else{ do{ got = osRead(fd, zBuf, nBuf); }while( got<0 && errno==EINTR ); robust_close(0, fd, __LINE__); @@ -30884,6 +31307,41 @@ SQLITE_API int sqlite3_open_file_count = 0; must be defined." #endif +/* +** Define the required Windows SDK version constants if they are not +** already available. +*/ +#ifndef NTDDI_WIN8 +# define NTDDI_WIN8 0x06020000 +#endif + +#ifndef NTDDI_WINBLUE +# define NTDDI_WINBLUE 0x06030000 +#endif + +/* +** Check if the GetVersionEx[AW] functions should be considered deprecated +** and avoid using them in that case. It should be noted here that if the +** value of the SQLITE_WIN32_GETVERSIONEX pre-processor macro is zero +** (whether via this block or via being manually specified), that implies +** the underlying operating system will always be based on the Windows NT +** Kernel. +*/ +#ifndef SQLITE_WIN32_GETVERSIONEX +# if defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINBLUE +# define SQLITE_WIN32_GETVERSIONEX 0 +# else +# define SQLITE_WIN32_GETVERSIONEX 1 +# endif +#endif + +/* +** This constant should already be defined (in the "WinDef.h" SDK file). +*/ +#ifndef MAX_PATH +# define MAX_PATH (260) +#endif + /* ** Maximum pathname length (in chars) for Win32. This should normally be ** MAX_PATH. @@ -30892,17 +31350,24 @@ SQLITE_API int sqlite3_open_file_count = 0; # define SQLITE_WIN32_MAX_PATH_CHARS (MAX_PATH) #endif +/* +** This constant should already be defined (in the "WinNT.h" SDK file). +*/ +#ifndef UNICODE_STRING_MAX_CHARS +# define UNICODE_STRING_MAX_CHARS (32767) +#endif + /* ** Maximum pathname length (in chars) for WinNT. This should normally be -** 32767. +** UNICODE_STRING_MAX_CHARS. */ #ifndef SQLITE_WINNT_MAX_PATH_CHARS -# define SQLITE_WINNT_MAX_PATH_CHARS (32767) +# define SQLITE_WINNT_MAX_PATH_CHARS (UNICODE_STRING_MAX_CHARS) #endif /* ** Maximum pathname length (in bytes) for Win32. The MAX_PATH macro is in -** characters, so we allocate 3 bytes per character assuming worst-case of +** characters, so we allocate 4 bytes per character assuming worst-case of ** 4-bytes-per-character for UTF8. */ #ifndef SQLITE_WIN32_MAX_PATH_BYTES @@ -30911,7 +31376,7 @@ SQLITE_API int sqlite3_open_file_count = 0; /* ** Maximum pathname length (in bytes) for WinNT. This should normally be -** 32767 * sizeof(WCHAR). +** UNICODE_STRING_MAX_CHARS * sizeof(WCHAR). */ #ifndef SQLITE_WINNT_MAX_PATH_BYTES # define SQLITE_WINNT_MAX_PATH_BYTES \ @@ -30942,14 +31407,10 @@ SQLITE_API int sqlite3_open_file_count = 0; #endif /* -** Returns the string that should be used as the directory separator. +** Returns the character that should be used as the directory separator. */ -#ifndef winGetDirDep -# ifdef __CYGWIN__ -# define winGetDirDep() "/" -# else -# define winGetDirDep() "\\" -# endif +#ifndef winGetDirSep +# define winGetDirSep() '\\' #endif /* @@ -31141,30 +31602,41 @@ struct winFile { typedef struct winMemData winMemData; struct winMemData { #ifndef NDEBUG - u32 magic; /* Magic number to detect structure corruption. */ + u32 magic1; /* Magic number to detect structure corruption. */ #endif HANDLE hHeap; /* The handle to our heap. */ BOOL bOwned; /* Do we own the heap (i.e. destroy it on shutdown)? */ +#ifndef NDEBUG + u32 magic2; /* Magic number to detect structure corruption. */ +#endif }; #ifndef NDEBUG -#define WINMEM_MAGIC 0x42b2830b +#define WINMEM_MAGIC1 0x42b2830b +#define WINMEM_MAGIC2 0xbd4d7cf4 #endif static struct winMemData win_mem_data = { #ifndef NDEBUG - WINMEM_MAGIC, + WINMEM_MAGIC1, #endif NULL, FALSE +#ifndef NDEBUG + ,WINMEM_MAGIC2 +#endif }; #ifndef NDEBUG -#define winMemAssertMagic() assert( win_mem_data.magic==WINMEM_MAGIC ) +#define winMemAssertMagic1() assert( win_mem_data.magic1==WINMEM_MAGIC1 ) +#define winMemAssertMagic2() assert( win_mem_data.magic2==WINMEM_MAGIC2 ) +#define winMemAssertMagic() winMemAssertMagic1(); winMemAssertMagic2(); #else #define winMemAssertMagic() #endif -#define winMemGetHeap() win_mem_data.hHeap +#define winMemGetDataPtr() &win_mem_data +#define winMemGetHeap() win_mem_data.hHeap +#define winMemGetOwned() win_mem_data.bOwned static void *winMemMalloc(int nBytes); static void winMemFree(void *pPrior); @@ -31498,7 +31970,8 @@ static struct win_syscall { #define osGetTickCount ((DWORD(WINAPI*)(VOID))aSyscall[33].pCurrent) -#if defined(SQLITE_WIN32_HAS_ANSI) +#if defined(SQLITE_WIN32_HAS_ANSI) && defined(SQLITE_WIN32_GETVERSIONEX) && \ + SQLITE_WIN32_GETVERSIONEX { "GetVersionExA", (SYSCALL)GetVersionExA, 0 }, #else { "GetVersionExA", (SYSCALL)0, 0 }, @@ -31507,7 +31980,8 @@ static struct win_syscall { #define osGetVersionExA ((BOOL(WINAPI*)( \ LPOSVERSIONINFOA))aSyscall[34].pCurrent) -#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ + defined(SQLITE_WIN32_GETVERSIONEX) && SQLITE_WIN32_GETVERSIONEX { "GetVersionExW", (SYSCALL)GetVersionExW, 0 }, #else { "GetVersionExW", (SYSCALL)0, 0 }, @@ -31561,13 +32035,21 @@ static struct win_syscall { #define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \ LPCVOID))aSyscall[42].pCurrent) +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "HeapCompact", (SYSCALL)HeapCompact, 0 }, +#else + { "HeapCompact", (SYSCALL)0, 0 }, +#endif + +#define osHeapCompact ((UINT(WINAPI*)(HANDLE,DWORD))aSyscall[43].pCurrent) + #if defined(SQLITE_WIN32_HAS_ANSI) && !defined(SQLITE_OMIT_LOAD_EXTENSION) { "LoadLibraryA", (SYSCALL)LoadLibraryA, 0 }, #else { "LoadLibraryA", (SYSCALL)0, 0 }, #endif -#define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[43].pCurrent) +#define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[44].pCurrent) #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -31576,7 +32058,7 @@ static struct win_syscall { { "LoadLibraryW", (SYSCALL)0, 0 }, #endif -#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[44].pCurrent) +#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[45].pCurrent) #if !SQLITE_OS_WINRT { "LocalFree", (SYSCALL)LocalFree, 0 }, @@ -31584,7 +32066,7 @@ static struct win_syscall { { "LocalFree", (SYSCALL)0, 0 }, #endif -#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[45].pCurrent) +#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[46].pCurrent) #if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT { "LockFile", (SYSCALL)LockFile, 0 }, @@ -31594,7 +32076,7 @@ static struct win_syscall { #ifndef osLockFile #define osLockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - DWORD))aSyscall[46].pCurrent) + DWORD))aSyscall[47].pCurrent) #endif #if !SQLITE_OS_WINCE @@ -31605,7 +32087,7 @@ static struct win_syscall { #ifndef osLockFileEx #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \ - LPOVERLAPPED))aSyscall[47].pCurrent) + LPOVERLAPPED))aSyscall[48].pCurrent) #endif #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)) @@ -31615,26 +32097,26 @@ static struct win_syscall { #endif #define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - SIZE_T))aSyscall[48].pCurrent) + SIZE_T))aSyscall[49].pCurrent) { "MultiByteToWideChar", (SYSCALL)MultiByteToWideChar, 0 }, #define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \ - int))aSyscall[49].pCurrent) + int))aSyscall[50].pCurrent) { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 }, #define osQueryPerformanceCounter ((BOOL(WINAPI*)( \ - LARGE_INTEGER*))aSyscall[50].pCurrent) + LARGE_INTEGER*))aSyscall[51].pCurrent) { "ReadFile", (SYSCALL)ReadFile, 0 }, #define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \ - LPOVERLAPPED))aSyscall[51].pCurrent) + LPOVERLAPPED))aSyscall[52].pCurrent) { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 }, -#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[52].pCurrent) +#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[53].pCurrent) #if !SQLITE_OS_WINRT { "SetFilePointer", (SYSCALL)SetFilePointer, 0 }, @@ -31643,7 +32125,7 @@ static struct win_syscall { #endif #define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \ - DWORD))aSyscall[53].pCurrent) + DWORD))aSyscall[54].pCurrent) #if !SQLITE_OS_WINRT { "Sleep", (SYSCALL)Sleep, 0 }, @@ -31651,12 +32133,12 @@ static struct win_syscall { { "Sleep", (SYSCALL)0, 0 }, #endif -#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[54].pCurrent) +#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[55].pCurrent) { "SystemTimeToFileTime", (SYSCALL)SystemTimeToFileTime, 0 }, #define osSystemTimeToFileTime ((BOOL(WINAPI*)(CONST SYSTEMTIME*, \ - LPFILETIME))aSyscall[55].pCurrent) + LPFILETIME))aSyscall[56].pCurrent) #if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT { "UnlockFile", (SYSCALL)UnlockFile, 0 }, @@ -31666,7 +32148,7 @@ static struct win_syscall { #ifndef osUnlockFile #define osUnlockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - DWORD))aSyscall[56].pCurrent) + DWORD))aSyscall[57].pCurrent) #endif #if !SQLITE_OS_WINCE @@ -31676,7 +32158,7 @@ static struct win_syscall { #endif #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ - LPOVERLAPPED))aSyscall[57].pCurrent) + LPOVERLAPPED))aSyscall[58].pCurrent) #if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 }, @@ -31684,17 +32166,17 @@ static struct win_syscall { { "UnmapViewOfFile", (SYSCALL)0, 0 }, #endif -#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[58].pCurrent) +#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[59].pCurrent) { "WideCharToMultiByte", (SYSCALL)WideCharToMultiByte, 0 }, #define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \ - LPCSTR,LPBOOL))aSyscall[59].pCurrent) + LPCSTR,LPBOOL))aSyscall[60].pCurrent) { "WriteFile", (SYSCALL)WriteFile, 0 }, #define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \ - LPOVERLAPPED))aSyscall[60].pCurrent) + LPOVERLAPPED))aSyscall[61].pCurrent) #if SQLITE_OS_WINRT { "CreateEventExW", (SYSCALL)CreateEventExW, 0 }, @@ -31703,7 +32185,7 @@ static struct win_syscall { #endif #define osCreateEventExW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,LPCWSTR, \ - DWORD,DWORD))aSyscall[61].pCurrent) + DWORD,DWORD))aSyscall[62].pCurrent) #if !SQLITE_OS_WINRT { "WaitForSingleObject", (SYSCALL)WaitForSingleObject, 0 }, @@ -31712,7 +32194,7 @@ static struct win_syscall { #endif #define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \ - DWORD))aSyscall[62].pCurrent) + DWORD))aSyscall[63].pCurrent) #if SQLITE_OS_WINRT { "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 }, @@ -31721,7 +32203,7 @@ static struct win_syscall { #endif #define osWaitForSingleObjectEx ((DWORD(WINAPI*)(HANDLE,DWORD, \ - BOOL))aSyscall[63].pCurrent) + BOOL))aSyscall[64].pCurrent) #if SQLITE_OS_WINRT { "SetFilePointerEx", (SYSCALL)SetFilePointerEx, 0 }, @@ -31730,7 +32212,7 @@ static struct win_syscall { #endif #define osSetFilePointerEx ((BOOL(WINAPI*)(HANDLE,LARGE_INTEGER, \ - PLARGE_INTEGER,DWORD))aSyscall[64].pCurrent) + PLARGE_INTEGER,DWORD))aSyscall[65].pCurrent) #if SQLITE_OS_WINRT { "GetFileInformationByHandleEx", (SYSCALL)GetFileInformationByHandleEx, 0 }, @@ -31739,7 +32221,7 @@ static struct win_syscall { #endif #define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \ - FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[65].pCurrent) + FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent) #if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL) { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 }, @@ -31748,7 +32230,7 @@ static struct win_syscall { #endif #define osMapViewOfFileFromApp ((LPVOID(WINAPI*)(HANDLE,ULONG,ULONG64, \ - SIZE_T))aSyscall[66].pCurrent) + SIZE_T))aSyscall[67].pCurrent) #if SQLITE_OS_WINRT { "CreateFile2", (SYSCALL)CreateFile2, 0 }, @@ -31757,7 +32239,7 @@ static struct win_syscall { #endif #define osCreateFile2 ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD,DWORD, \ - LPCREATEFILE2_EXTENDED_PARAMETERS))aSyscall[67].pCurrent) + LPCREATEFILE2_EXTENDED_PARAMETERS))aSyscall[68].pCurrent) #if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_LOAD_EXTENSION) { "LoadPackagedLibrary", (SYSCALL)LoadPackagedLibrary, 0 }, @@ -31766,7 +32248,7 @@ static struct win_syscall { #endif #define osLoadPackagedLibrary ((HMODULE(WINAPI*)(LPCWSTR, \ - DWORD))aSyscall[68].pCurrent) + DWORD))aSyscall[69].pCurrent) #if SQLITE_OS_WINRT { "GetTickCount64", (SYSCALL)GetTickCount64, 0 }, @@ -31774,7 +32256,7 @@ static struct win_syscall { { "GetTickCount64", (SYSCALL)0, 0 }, #endif -#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[69].pCurrent) +#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[70].pCurrent) #if SQLITE_OS_WINRT { "GetNativeSystemInfo", (SYSCALL)GetNativeSystemInfo, 0 }, @@ -31783,7 +32265,7 @@ static struct win_syscall { #endif #define osGetNativeSystemInfo ((VOID(WINAPI*)( \ - LPSYSTEM_INFO))aSyscall[70].pCurrent) + LPSYSTEM_INFO))aSyscall[71].pCurrent) #if defined(SQLITE_WIN32_HAS_ANSI) { "OutputDebugStringA", (SYSCALL)OutputDebugStringA, 0 }, @@ -31791,7 +32273,7 @@ static struct win_syscall { { "OutputDebugStringA", (SYSCALL)0, 0 }, #endif -#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[71].pCurrent) +#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[72].pCurrent) #if defined(SQLITE_WIN32_HAS_WIDE) { "OutputDebugStringW", (SYSCALL)OutputDebugStringW, 0 }, @@ -31799,11 +32281,11 @@ static struct win_syscall { { "OutputDebugStringW", (SYSCALL)0, 0 }, #endif -#define osOutputDebugStringW ((VOID(WINAPI*)(LPCWSTR))aSyscall[72].pCurrent) +#define osOutputDebugStringW ((VOID(WINAPI*)(LPCWSTR))aSyscall[73].pCurrent) { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 }, -#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[73].pCurrent) +#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent) #if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL) { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 }, @@ -31812,7 +32294,7 @@ static struct win_syscall { #endif #define osCreateFileMappingFromApp ((HANDLE(WINAPI*)(HANDLE, \ - LPSECURITY_ATTRIBUTES,ULONG,ULONG64,LPCWSTR))aSyscall[74].pCurrent) + LPSECURITY_ATTRIBUTES,ULONG,ULONG64,LPCWSTR))aSyscall[75].pCurrent) }; /* End of the overrideable system calls */ @@ -31899,6 +32381,94 @@ static const char *winNextSystemCall(sqlite3_vfs *p, const char *zName){ return 0; } +#ifdef SQLITE_WIN32_MALLOC +/* +** If a Win32 native heap has been configured, this function will attempt to +** compact it. Upon success, SQLITE_OK will be returned. Upon failure, one +** of SQLITE_NOMEM, SQLITE_ERROR, or SQLITE_NOTFOUND will be returned. The +** "pnLargest" argument, if non-zero, will be used to return the size of the +** largest committed free block in the heap, in bytes. +*/ +SQLITE_API int sqlite3_win32_compact_heap(LPUINT pnLargest){ + int rc = SQLITE_OK; + UINT nLargest = 0; + HANDLE hHeap; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + if( (nLargest=osHeapCompact(hHeap, SQLITE_WIN32_HEAP_FLAGS))==0 ){ + DWORD lastErrno = osGetLastError(); + if( lastErrno==NO_ERROR ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapCompact (no space), heap=%p", + (void*)hHeap); + rc = SQLITE_NOMEM; + }else{ + sqlite3_log(SQLITE_ERROR, "failed to HeapCompact (%lu), heap=%p", + osGetLastError(), (void*)hHeap); + rc = SQLITE_ERROR; + } + } +#else + sqlite3_log(SQLITE_NOTFOUND, "failed to HeapCompact, heap=%p", + (void*)hHeap); + rc = SQLITE_NOTFOUND; +#endif + if( pnLargest ) *pnLargest = nLargest; + return rc; +} + +/* +** If a Win32 native heap has been configured, this function will attempt to +** destroy and recreate it. If the Win32 native heap is not isolated and/or +** the sqlite3_memory_used() function does not return zero, SQLITE_BUSY will +** be returned and no changes will be made to the Win32 native heap. +*/ +SQLITE_API int sqlite3_win32_reset_heap(){ + int rc; + MUTEX_LOGIC( sqlite3_mutex *pMaster; ) /* The main static mutex */ + MUTEX_LOGIC( sqlite3_mutex *pMem; ) /* The memsys static mutex */ + MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); ) + MUTEX_LOGIC( pMem = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); ) + sqlite3_mutex_enter(pMaster); + sqlite3_mutex_enter(pMem); + winMemAssertMagic(); + if( winMemGetHeap()!=NULL && winMemGetOwned() && sqlite3_memory_used()==0 ){ + /* + ** At this point, there should be no outstanding memory allocations on + ** the heap. Also, since both the master and memsys locks are currently + ** being held by us, no other function (i.e. from another thread) should + ** be able to even access the heap. Attempt to destroy and recreate our + ** isolated Win32 native heap now. + */ + assert( winMemGetHeap()!=NULL ); + assert( winMemGetOwned() ); + assert( sqlite3_memory_used()==0 ); + winMemShutdown(winMemGetDataPtr()); + assert( winMemGetHeap()==NULL ); + assert( !winMemGetOwned() ); + assert( sqlite3_memory_used()==0 ); + rc = winMemInit(winMemGetDataPtr()); + assert( rc!=SQLITE_OK || winMemGetHeap()!=NULL ); + assert( rc!=SQLITE_OK || winMemGetOwned() ); + assert( rc!=SQLITE_OK || sqlite3_memory_used()==0 ); + }else{ + /* + ** The Win32 native heap cannot be modified because it may be in use. + */ + rc = SQLITE_BUSY; + } + sqlite3_mutex_leave(pMem); + sqlite3_mutex_leave(pMaster); + return rc; +} +#endif /* SQLITE_WIN32_MALLOC */ + /* ** This function outputs the specified (ANSI) string to the Win32 debugger ** (if available). @@ -31968,11 +32538,10 @@ SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds){ ** WinNT/2K/XP so that we will know whether or not we can safely call ** the LockFileEx() API. */ -#ifndef NTDDI_WIN8 -# define NTDDI_WIN8 0x06020000 -#endif -#if SQLITE_OS_WINCE || SQLITE_OS_WINRT || !defined(SQLITE_WIN32_HAS_ANSI) +#if !defined(SQLITE_WIN32_GETVERSIONEX) || !SQLITE_WIN32_GETVERSIONEX +# define osIsNT() (1) +#elif SQLITE_OS_WINCE || SQLITE_OS_WINRT || !defined(SQLITE_WIN32_HAS_ANSI) # define osIsNT() (1) #elif !defined(SQLITE_WIN32_HAS_WIDE) # define osIsNT() (0) @@ -32007,7 +32576,7 @@ static void *winMemMalloc(int nBytes){ assert( hHeap!=0 ); assert( hHeap!=INVALID_HANDLE_VALUE ); #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) - assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); #endif assert( nBytes>=0 ); p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes); @@ -32029,7 +32598,7 @@ static void winMemFree(void *pPrior){ assert( hHeap!=0 ); assert( hHeap!=INVALID_HANDLE_VALUE ); #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) - assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); #endif if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */ if( !osHeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){ @@ -32050,7 +32619,7 @@ static void *winMemRealloc(void *pPrior, int nBytes){ assert( hHeap!=0 ); assert( hHeap!=INVALID_HANDLE_VALUE ); #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) - assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); #endif assert( nBytes>=0 ); if( !pPrior ){ @@ -32078,7 +32647,7 @@ static int winMemSize(void *p){ assert( hHeap!=0 ); assert( hHeap!=INVALID_HANDLE_VALUE ); #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) - assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, p) ); #endif if( !p ) return 0; n = osHeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p); @@ -32104,18 +32673,25 @@ static int winMemInit(void *pAppData){ winMemData *pWinMemData = (winMemData *)pAppData; if( !pWinMemData ) return SQLITE_ERROR; - assert( pWinMemData->magic==WINMEM_MAGIC ); + assert( pWinMemData->magic1==WINMEM_MAGIC1 ); + assert( pWinMemData->magic2==WINMEM_MAGIC2 ); #if !SQLITE_OS_WINRT && SQLITE_WIN32_HEAP_CREATE if( !pWinMemData->hHeap ){ + DWORD dwInitialSize = SQLITE_WIN32_HEAP_INIT_SIZE; + DWORD dwMaximumSize = (DWORD)sqlite3GlobalConfig.nHeap; + if( dwMaximumSize==0 ){ + dwMaximumSize = SQLITE_WIN32_HEAP_MAX_SIZE; + }else if( dwInitialSize>dwMaximumSize ){ + dwInitialSize = dwMaximumSize; + } pWinMemData->hHeap = osHeapCreate(SQLITE_WIN32_HEAP_FLAGS, - SQLITE_WIN32_HEAP_INIT_SIZE, - SQLITE_WIN32_HEAP_MAX_SIZE); + dwInitialSize, dwMaximumSize); if( !pWinMemData->hHeap ){ sqlite3_log(SQLITE_NOMEM, - "failed to HeapCreate (%lu), flags=%u, initSize=%u, maxSize=%u", - osGetLastError(), SQLITE_WIN32_HEAP_FLAGS, - SQLITE_WIN32_HEAP_INIT_SIZE, SQLITE_WIN32_HEAP_MAX_SIZE); + "failed to HeapCreate (%lu), flags=%u, initSize=%lu, maxSize=%lu", + osGetLastError(), SQLITE_WIN32_HEAP_FLAGS, dwInitialSize, + dwMaximumSize); return SQLITE_NOMEM; } pWinMemData->bOwned = TRUE; @@ -32146,6 +32722,9 @@ static void winMemShutdown(void *pAppData){ winMemData *pWinMemData = (winMemData *)pAppData; if( !pWinMemData ) return; + assert( pWinMemData->magic1==WINMEM_MAGIC1 ); + assert( pWinMemData->magic2==WINMEM_MAGIC2 ); + if( pWinMemData->hHeap ){ assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE ); #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) @@ -33788,7 +34367,7 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){ return SQLITE_OK; } case SQLITE_FCNTL_VFSNAME: { - *(char**)pArg = sqlite3_mprintf("win32"); + *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName); OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); return SQLITE_OK; } @@ -33893,7 +34472,7 @@ static void winShmEnterMutex(void){ static void winShmLeaveMutex(void){ sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); } -#ifdef SQLITE_DEBUG +#ifndef NDEBUG static int winShmMutexHeld(void) { return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); } @@ -34772,7 +35351,7 @@ static const sqlite3_io_methods winIoMethod = { ** sqlite3_vfs object. */ -#if 0 +#if defined(__CYGWIN__) /* ** Convert a filename from whatever the underlying operating system ** supports for filenames into UTF-8. Space to hold the result is @@ -34815,12 +35394,21 @@ static void *winConvertFromUtf8Filename(const char *zFilename){ /* ** This function returns non-zero if the specified UTF-8 string buffer -** ends with a directory separator character. +** ends with a directory separator character or one was successfully +** added to it. */ -static int winEndsInDirSep(char *zBuf){ +static int winMakeEndInDirSep(int nBuf, char *zBuf){ if( zBuf ){ int nLen = sqlite3Strlen30(zBuf); - return nLen>0 && winIsDirSep(zBuf[nLen-1]); + if( nLen>0 ){ + if( winIsDirSep(zBuf[nLen-1]) ){ + return 1; + }else if( nLen+1mxPathname; - zBuf = sqlite3MallocZero( nBuf+2 ); + nMax = pVfs->mxPathname; nBuf = nMax + 2; + zBuf = sqlite3MallocZero( nBuf ); if( !zBuf ){ OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); return SQLITE_IOERR_NOMEM; @@ -34858,11 +35447,21 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ ** has been explicitly set by the application; otherwise, use the one ** configured by the operating system. */ - assert( nBuf>30 ); + nDir = nMax - (nPre + 15); + assert( nDir>0 ); if( sqlite3_temp_directory ){ - sqlite3_snprintf(nBuf-30, zBuf, "%s%s", sqlite3_temp_directory, - winEndsInDirSep(sqlite3_temp_directory) ? "" : - winGetDirDep()); + int nDirLen = sqlite3Strlen30(sqlite3_temp_directory); + if( nDirLen>0 ){ + if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){ + nDirLen++; + } + if( nDirLen>nDir ){ + sqlite3_free(zBuf); + OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); + return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0); + } + sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory); + } } #if defined(__CYGWIN__) else{ @@ -34891,8 +35490,8 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ if( zDir==0 ) continue; /* If the path starts with a drive letter followed by the colon ** character, assume it is already a native Win32 path; otherwise, - ** it must be converted to a native Win32 path prior via the Cygwin - ** API prior to using it. + ** it must be converted to a native Win32 path via the Cygwin API + ** prior to using it. */ if( winIsDriveLetterAndColon(zDir) ){ zConverted = winConvertFromUtf8Filename(zDir); @@ -34902,13 +35501,13 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ return SQLITE_IOERR_NOMEM; } if( winIsDir(zConverted) ){ - sqlite3_snprintf(nBuf-30, zBuf, "%s", zDir); + sqlite3_snprintf(nMax, zBuf, "%s", zDir); sqlite3_free(zConverted); break; } sqlite3_free(zConverted); }else{ - zConverted = sqlite3MallocZero( nBuf+1 ); + zConverted = sqlite3MallocZero( nMax+1 ); if( !zConverted ){ sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); @@ -34916,35 +35515,29 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ } if( cygwin_conv_path( osIsNT() ? CCP_POSIX_TO_WIN_W : CCP_POSIX_TO_WIN_A, zDir, - zConverted, nBuf+1)<0 ){ + zConverted, nMax+1)<0 ){ sqlite3_free(zConverted); sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_CONVPATH\n")); return winLogError(SQLITE_IOERR_CONVPATH, (DWORD)errno, - "winGetTempname1", zDir); + "winGetTempname2", zDir); } if( winIsDir(zConverted) ){ /* At this point, we know the candidate directory exists and should ** be used. However, we may need to convert the string containing ** its name into UTF-8 (i.e. if it is UTF-16 right now). */ - if( osIsNT() ){ - char *zUtf8 = winUnicodeToUtf8(zConverted); - if( !zUtf8 ){ - sqlite3_free(zConverted); - sqlite3_free(zBuf); - OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); - return SQLITE_IOERR_NOMEM; - } - sqlite3_snprintf(nBuf-30, zBuf, "%s", zUtf8); - sqlite3_free(zUtf8); + char *zUtf8 = winConvertToUtf8Filename(zConverted); + if( !zUtf8 ){ sqlite3_free(zConverted); - break; - }else{ - sqlite3_snprintf(nBuf-30, zBuf, "%s", zConverted); - sqlite3_free(zConverted); - break; + sqlite3_free(zBuf); + OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); + return SQLITE_IOERR_NOMEM; } + sqlite3_snprintf(nMax, zBuf, "%s", zUtf8); + sqlite3_free(zUtf8); + sqlite3_free(zConverted); + break; } sqlite3_free(zConverted); } @@ -34953,22 +35546,22 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ #elif !SQLITE_OS_WINRT && !defined(__CYGWIN__) else if( osIsNT() ){ char *zMulti; - LPWSTR zWidePath = sqlite3MallocZero( nBuf*sizeof(WCHAR) ); + LPWSTR zWidePath = sqlite3MallocZero( nMax*sizeof(WCHAR) ); if( !zWidePath ){ sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); return SQLITE_IOERR_NOMEM; } - if( osGetTempPathW(nBuf, zWidePath)==0 ){ + if( osGetTempPathW(nMax, zWidePath)==0 ){ sqlite3_free(zWidePath); sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_GETTEMPPATH\n")); return winLogError(SQLITE_IOERR_GETTEMPPATH, osGetLastError(), - "winGetTempname1", 0); + "winGetTempname2", 0); } zMulti = winUnicodeToUtf8(zWidePath); if( zMulti ){ - sqlite3_snprintf(nBuf-30, zBuf, "%s", zMulti); + sqlite3_snprintf(nMax, zBuf, "%s", zMulti); sqlite3_free(zMulti); sqlite3_free(zWidePath); }else{ @@ -34981,21 +35574,21 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ #ifdef SQLITE_WIN32_HAS_ANSI else{ char *zUtf8; - char *zMbcsPath = sqlite3MallocZero( nBuf ); + char *zMbcsPath = sqlite3MallocZero( nMax ); if( !zMbcsPath ){ sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); return SQLITE_IOERR_NOMEM; } - if( osGetTempPathA(nBuf, zMbcsPath)==0 ){ + if( osGetTempPathA(nMax, zMbcsPath)==0 ){ sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_GETTEMPPATH\n")); return winLogError(SQLITE_IOERR_GETTEMPPATH, osGetLastError(), - "winGetTempname2", 0); + "winGetTempname3", 0); } zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath); if( zUtf8 ){ - sqlite3_snprintf(nBuf-30, zBuf, "%s", zUtf8); + sqlite3_snprintf(nMax, zBuf, "%s", zUtf8); sqlite3_free(zUtf8); }else{ sqlite3_free(zBuf); @@ -35006,18 +35599,36 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ #endif /* SQLITE_WIN32_HAS_ANSI */ #endif /* !SQLITE_OS_WINRT */ - /* Check that the output buffer is large enough for the temporary file - ** name. If it is not, return SQLITE_ERROR. + /* + ** Check to make sure the temporary directory ends with an appropriate + ** separator. If it does not and there is not enough space left to add + ** one, fail. */ - nLen = sqlite3Strlen30(zBuf); - - if( (nLen + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){ + if( !winMakeEndInDirSep(nDir+1, zBuf) ){ sqlite3_free(zBuf); OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); - return winLogError(SQLITE_ERROR, 0, "winGetTempname3", 0); + return winLogError(SQLITE_ERROR, 0, "winGetTempname4", 0); } - sqlite3_snprintf(nBuf-18-nLen, zBuf+nLen, SQLITE_TEMP_FILE_PREFIX); + /* + ** Check that the output buffer is large enough for the temporary file + ** name in the following format: + ** + ** "/etilqs_XXXXXXXXXXXXXXX\0\0" + ** + ** If not, return SQLITE_ERROR. The number 17 is used here in order to + ** account for the space used by the 15 character random suffix and the + ** two trailing NUL characters. The final directory separator character + ** has already added if it was not already present. + */ + nLen = sqlite3Strlen30(zBuf); + if( (nLen + nPre + 17) > nBuf ){ + sqlite3_free(zBuf); + OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); + return winLogError(SQLITE_ERROR, 0, "winGetTempname5", 0); + } + + sqlite3_snprintf(nBuf-16-nLen, zBuf+nLen, SQLITE_TEMP_FILE_PREFIX); j = sqlite3Strlen30(zBuf); sqlite3_randomness(15, &zBuf[j]); @@ -35072,7 +35683,7 @@ static int winOpen( int *pOutFlags /* Status return flags */ ){ HANDLE h; - DWORD lastErrno; + DWORD lastErrno = 0; DWORD dwDesiredAccess; DWORD dwShareMode; DWORD dwCreationDisposition; @@ -35363,7 +35974,7 @@ static int winDelete( int cnt = 0; int rc; DWORD attr; - DWORD lastErrno; + DWORD lastErrno = 0; void *zConverted; UNUSED_PARAMETER(pVfs); UNUSED_PARAMETER(syncDir); @@ -35471,7 +36082,7 @@ static int winAccess( ){ DWORD attr; int rc = 0; - DWORD lastErrno; + DWORD lastErrno = 0; void *zConverted; UNUSED_PARAMETER(pVfs); @@ -35611,19 +36222,43 @@ static int winFullPathname( if( !zOut ){ return SQLITE_IOERR_NOMEM; } - if( cygwin_conv_path(CCP_POSIX_TO_WIN_A|CCP_RELATIVE, zRelative, zOut, - pVfs->mxPathname+1)<0 ){ + if( cygwin_conv_path( + (osIsNT() ? CCP_POSIX_TO_WIN_W : CCP_POSIX_TO_WIN_A) | + CCP_RELATIVE, zRelative, zOut, pVfs->mxPathname+1)<0 ){ sqlite3_free(zOut); return winLogError(SQLITE_CANTOPEN_CONVPATH, (DWORD)errno, "winFullPathname1", zRelative); + }else{ + char *zUtf8 = winConvertToUtf8Filename(zOut); + if( !zUtf8 ){ + sqlite3_free(zOut); + return SQLITE_IOERR_NOMEM; + } + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s", + sqlite3_data_directory, winGetDirSep(), zUtf8); + sqlite3_free(zUtf8); + sqlite3_free(zOut); } - sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s", - sqlite3_data_directory, winGetDirDep(), zOut); - sqlite3_free(zOut); }else{ - if( cygwin_conv_path(CCP_POSIX_TO_WIN_A, zRelative, zFull, nFull)<0 ){ + char *zOut = sqlite3MallocZero( pVfs->mxPathname+1 ); + if( !zOut ){ + return SQLITE_IOERR_NOMEM; + } + if( cygwin_conv_path( + (osIsNT() ? CCP_POSIX_TO_WIN_W : CCP_POSIX_TO_WIN_A), + zRelative, zOut, pVfs->mxPathname+1)<0 ){ + sqlite3_free(zOut); return winLogError(SQLITE_CANTOPEN_CONVPATH, (DWORD)errno, "winFullPathname2", zRelative); + }else{ + char *zUtf8 = winConvertToUtf8Filename(zOut); + if( !zUtf8 ){ + sqlite3_free(zOut); + return SQLITE_IOERR_NOMEM; + } + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zUtf8); + sqlite3_free(zUtf8); + sqlite3_free(zOut); } } return SQLITE_OK; @@ -35640,8 +36275,8 @@ static int winFullPathname( ** for converting the relative path name to an absolute ** one by prepending the data directory and a backslash. */ - sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s", - sqlite3_data_directory, winGetDirDep(), zRelative); + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s", + sqlite3_data_directory, winGetDirSep(), zRelative); }else{ sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zRelative); } @@ -35673,8 +36308,8 @@ static int winFullPathname( ** for converting the relative path name to an absolute ** one by prepending the data directory and a backslash. */ - sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%s%s", - sqlite3_data_directory, winGetDirDep(), zRelative); + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s", + sqlite3_data_directory, winGetDirSep(), zRelative); return SQLITE_OK; } zConverted = winConvertFromUtf8Filename(zRelative); @@ -36012,7 +36647,7 @@ SQLITE_API int sqlite3_os_init(void){ /* Double-check that the aSyscall[] array has been constructed ** correctly. See ticket [bb3a86e890c8e96ab] */ - assert( ArraySize(aSyscall)==75 ); + assert( ArraySize(aSyscall)==76 ); /* get memory map allocation granularity */ memset(&winSysInfo, 0, sizeof(SYSTEM_INFO)); @@ -37174,6 +37809,7 @@ struct PCache1 { struct PgHdr1 { sqlite3_pcache_page page; unsigned int iKey; /* Key value (page number) */ + u8 isPinned; /* Page in use, not on the LRU list */ PgHdr1 *pNext; /* Next in hash table chain */ PCache1 *pCache; /* Cache that currently owns this page */ PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */ @@ -37502,34 +38138,32 @@ static int pcache1ResizeHash(PCache1 *p){ ** LRU list, then this function is a no-op. ** ** The PGroup mutex must be held when this function is called. -** -** If pPage is NULL then this routine is a no-op. */ static void pcache1PinPage(PgHdr1 *pPage){ PCache1 *pCache; PGroup *pGroup; - if( pPage==0 ) return; + assert( pPage!=0 ); + assert( pPage->isPinned==0 ); pCache = pPage->pCache; pGroup = pCache->pGroup; + assert( pPage->pLruNext || pPage==pGroup->pLruTail ); + assert( pPage->pLruPrev || pPage==pGroup->pLruHead ); assert( sqlite3_mutex_held(pGroup->mutex) ); - if( pPage->pLruNext || pPage==pGroup->pLruTail ){ - if( pPage->pLruPrev ){ - pPage->pLruPrev->pLruNext = pPage->pLruNext; - } - if( pPage->pLruNext ){ - pPage->pLruNext->pLruPrev = pPage->pLruPrev; - } - if( pGroup->pLruHead==pPage ){ - pGroup->pLruHead = pPage->pLruNext; - } - if( pGroup->pLruTail==pPage ){ - pGroup->pLruTail = pPage->pLruPrev; - } - pPage->pLruNext = 0; - pPage->pLruPrev = 0; - pPage->pCache->nRecyclable--; + if( pPage->pLruPrev ){ + pPage->pLruPrev->pLruNext = pPage->pLruNext; + }else{ + pGroup->pLruHead = pPage->pLruNext; } + if( pPage->pLruNext ){ + pPage->pLruNext->pLruPrev = pPage->pLruPrev; + }else{ + pGroup->pLruTail = pPage->pLruPrev; + } + pPage->pLruNext = 0; + pPage->pLruPrev = 0; + pPage->isPinned = 1; + pCache->nRecyclable--; } @@ -37561,6 +38195,7 @@ static void pcache1EnforceMaxPage(PGroup *pGroup){ while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){ PgHdr1 *p = pGroup->pLruTail; assert( p->pCache->pGroup==pGroup ); + assert( p->isPinned==0 ); pcache1PinPage(p); pcache1RemoveFromHash(p); pcache1FreePage(p); @@ -37588,7 +38223,7 @@ static void pcache1TruncateUnsafe( if( pPage->iKey>=iLimit ){ pCache->nPage--; *pp = pPage->pNext; - pcache1PinPage(pPage); + if( !pPage->isPinned ) pcache1PinPage(pPage); pcache1FreePage(pPage); }else{ pp = &pPage->pNext; @@ -37798,6 +38433,7 @@ static sqlite3_pcache_page *pcache1Fetch( PGroup *pGroup; PgHdr1 *pPage = 0; + assert( offsetof(PgHdr1,page)==0 ); assert( pCache->bPurgeable || createFlag!=1 ); assert( pCache->bPurgeable || pCache->nMin==0 ); assert( pCache->bPurgeable==0 || pCache->nMin==10 ); @@ -37811,8 +38447,11 @@ static sqlite3_pcache_page *pcache1Fetch( } /* Step 2: Abort if no existing page is found and createFlag is 0 */ - if( pPage || createFlag==0 ){ - pcache1PinPage(pPage); + if( pPage ){ + if( !pPage->isPinned ) pcache1PinPage(pPage); + goto fetch_out; + } + if( createFlag==0 ){ goto fetch_out; } @@ -37853,6 +38492,7 @@ static sqlite3_pcache_page *pcache1Fetch( )){ PCache1 *pOther; pPage = pGroup->pLruTail; + assert( pPage->isPinned==0 ); pcache1RemoveFromHash(pPage); pcache1PinPage(pPage); pOther = pPage->pCache; @@ -37889,6 +38529,7 @@ static sqlite3_pcache_page *pcache1Fetch( pPage->pCache = pCache; pPage->pLruPrev = 0; pPage->pLruNext = 0; + pPage->isPinned = 1; *(void **)pPage->page.pExtra = 0; pCache->apHash[h] = pPage; } @@ -37898,7 +38539,7 @@ fetch_out: pCache->iMaxKey = iKey; } pcache1LeaveMutex(pGroup); - return &pPage->page; + return (sqlite3_pcache_page*)pPage; } @@ -37924,6 +38565,7 @@ static void pcache1Unpin( */ assert( pPage->pLruPrev==0 && pPage->pLruNext==0 ); assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage ); + assert( pPage->isPinned==1 ); if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){ pcache1RemoveFromHash(pPage); @@ -37939,6 +38581,7 @@ static void pcache1Unpin( pGroup->pLruHead = pPage; } pCache->nRecyclable++; + pPage->isPinned = 0; } pcache1LeaveMutex(pCache->pGroup); @@ -38065,6 +38708,7 @@ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){ #ifdef SQLITE_PCACHE_SEPARATE_HEADER nFree += sqlite3MemSize(p); #endif + assert( p->isPinned==0 ); pcache1PinPage(p); pcache1RemoveFromHash(p); pcache1FreePage(p); @@ -38089,6 +38733,7 @@ SQLITE_PRIVATE void sqlite3PcacheStats( PgHdr1 *p; int nRecyclable = 0; for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){ + assert( p->isPinned==0 ); nRecyclable++; } *pnCurrent = pcache1.grp.nCurrentPage; @@ -39775,15 +40420,12 @@ static char *print_pager_state(Pager *p){ static int subjRequiresPage(PgHdr *pPg){ Pager *pPager = pPg->pPager; PagerSavepoint *p; - Pgno pgno; + Pgno pgno = pPg->pgno; int i; - if( pPager->nSavepoint ){ - pgno = pPg->pgno; - for(i=0; inSavepoint; i++){ - p = &pPager->aSavepoint[i]; - if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){ - return 1; - } + for(i=0; inSavepoint; i++){ + p = &pPager->aSavepoint[i]; + if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){ + return 1; } } return 0; @@ -39792,8 +40434,8 @@ static int subjRequiresPage(PgHdr *pPg){ /* ** Return true if the page is already in the journal file. */ -static int pageInJournal(PgHdr *pPg){ - return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno); +static int pageInJournal(Pager *pPager, PgHdr *pPg){ + return sqlite3BitvecTest(pPager->pInJournal, pPg->pgno); } /* @@ -40000,6 +40642,7 @@ static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){ || szJ<16 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len)) || len>=nMaster + || len==0 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum)) || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8)) || memcmp(aMagic, aJournalMagic, 8) @@ -40436,7 +41079,7 @@ static int writeMasterJournal(Pager *pPager, const char *zMaster){ ** already in memory. */ static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){ - PgHdr *p; /* Return value */ + PgHdr *p = 0; /* Return value */ /* It is not possible for a call to PcacheFetch() with createFlag==0 to ** fail, since no attempt to allocate dynamic memory will be made. @@ -40740,7 +41383,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){ PgHdr *p = pager_lookup(pPager, 1); if( p ){ p->pageHash = 0; - sqlite3PagerUnref(p); + sqlite3PagerUnrefNotNull(p); } } #endif @@ -40769,6 +41412,11 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){ rc = pager_truncate(pPager, pPager->dbSize); } + if( rc==SQLITE_OK && bCommit && isOpen(pPager->fd) ){ + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_COMMIT_PHASETWO, 0); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + } + if( !pPager->exclusiveMode && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0)) ){ @@ -41582,7 +42230,7 @@ end_playback: if( rc==SQLITE_OK && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) ){ - rc = sqlite3PagerSync(pPager); + rc = sqlite3PagerSync(pPager, 0); } if( rc==SQLITE_OK ){ rc = pager_end_transaction(pPager, zMaster[0]!='\0', 0); @@ -41728,7 +42376,7 @@ static int pagerUndoCallback(void *pCtx, Pgno iPg){ if( rc==SQLITE_OK ){ pPager->xReiniter(pPg); } - sqlite3PagerUnref(pPg); + sqlite3PagerUnrefNotNull(pPg); } } @@ -43083,7 +43731,7 @@ static int subjournalPage(PgHdr *pPg){ assert( isOpen(pPager->jfd) || pagerUseWal(pPager) ); assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 ); assert( pagerUseWal(pPager) - || pageInJournal(pPg) + || pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize ); rc = openSubJournal(pPager); @@ -43548,6 +44196,30 @@ SQLITE_PRIVATE int sqlite3PagerOpen( } +/* Verify that the database file has not be deleted or renamed out from +** under the pager. Return SQLITE_OK if the database is still were it ought +** to be on disk. Return non-zero (SQLITE_READONLY_DBMOVED or some other error +** code from sqlite3OsAccess()) if the database has gone missing. +*/ +static int databaseIsUnmoved(Pager *pPager){ + int bHasMoved = 0; + int rc; + + if( pPager->tempFile ) return SQLITE_OK; + if( pPager->dbSize==0 ) return SQLITE_OK; + assert( pPager->zFilename && pPager->zFilename[0] ); + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved); + if( rc==SQLITE_NOTFOUND ){ + /* If the HAS_MOVED file-control is unimplemented, assume that the file + ** has not been moved. That is the historical behavior of SQLite: prior to + ** version 3.8.3, it never checked */ + rc = SQLITE_OK; + }else if( rc==SQLITE_OK && bHasMoved ){ + rc = SQLITE_READONLY_DBMOVED; + } + return rc; +} + /* ** This function is called after transitioning from PAGER_UNLOCK to @@ -44019,7 +44691,7 @@ SQLITE_PRIVATE int sqlite3PagerAcquire( if( rc!=SQLITE_OK ) goto pager_acquire_err; } - if( iFrame==0 && bMmapOk ){ + if( bMmapOk && iFrame==0 ){ void *pData = 0; rc = sqlite3OsFetch(pPager->fd, @@ -44160,16 +44832,19 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ ** are released, a rollback occurs and the lock on the database is ** removed. */ -SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ - if( pPg ){ - Pager *pPager = pPg->pPager; - if( pPg->flags & PGHDR_MMAP ){ - pagerReleaseMapPage(pPg); - }else{ - sqlite3PcacheRelease(pPg); - } - pagerUnlockIfUnused(pPager); +SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){ + Pager *pPager; + assert( pPg!=0 ); + pPager = pPg->pPager; + if( pPg->flags & PGHDR_MMAP ){ + pagerReleaseMapPage(pPg); + }else{ + sqlite3PcacheRelease(pPg); } + pagerUnlockIfUnused(pPager); +} +SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ + if( pPg ) sqlite3PagerUnrefNotNull(pPg); } /* @@ -44224,13 +44899,19 @@ static int pager_open_journal(Pager *pPager){ (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL): (SQLITE_OPEN_MAIN_JOURNAL) ); - #ifdef SQLITE_ENABLE_ATOMIC_WRITE - rc = sqlite3JournalOpen( - pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager) - ); - #else - rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0); - #endif + + /* Verify that the database still has the same name as it did when + ** it was originally opened. */ + rc = databaseIsUnmoved(pPager); + if( rc==SQLITE_OK ){ +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + rc = sqlite3JournalOpen( + pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager) + ); +#else + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0); +#endif + } } assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); } @@ -44351,9 +45032,9 @@ SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory ** of any open savepoints as appropriate. */ static int pager_write(PgHdr *pPg){ - void *pData = pPg->pData; Pager *pPager = pPg->pPager; int rc = SQLITE_OK; + int inJournal; /* This routine is not called unless a write-transaction has already ** been started. The journal file may or may not be open at this point. @@ -44364,14 +45045,8 @@ static int pager_write(PgHdr *pPg){ || pPager->eState==PAGER_WRITER_DBMOD ); assert( assert_pager_state(pPager) ); - - /* If an error has been previously detected, report the same error - ** again. This should not happen, but the check provides robustness. */ - if( NEVER(pPager->errCode) ) return pPager->errCode; - - /* Higher-level routines never call this function if database is not - ** writable. But check anyway, just for robustness. */ - if( NEVER(pPager->readOnly) ) return SQLITE_PERM; + assert( pPager->errCode==0 ); + assert( pPager->readOnly==0 ); CHECK_PAGE(pPg); @@ -44395,7 +45070,8 @@ static int pager_write(PgHdr *pPg){ ** to the journal then we can return right away. */ sqlite3PcacheMakeDirty(pPg); - if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){ + inJournal = pageInJournal(pPager, pPg); + if( inJournal && (pPager->nSavepoint==0 || !subjRequiresPage(pPg)) ){ assert( !pagerUseWal(pPager) ); }else{ @@ -44403,7 +45079,7 @@ static int pager_write(PgHdr *pPg){ ** EXCLUSIVE lock on the main database file. Write the current page to ** the transaction journal if it is not there already. */ - if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){ + if( !inJournal && !pagerUseWal(pPager) ){ assert( pagerUseWal(pPager)==0 ); if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){ u32 cksum; @@ -44416,7 +45092,7 @@ static int pager_write(PgHdr *pPg){ assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) ); assert( pPager->journalHdr<=pPager->journalOff ); - CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); + CODEC2(pPager, pPg->pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2); cksum = pager_cksum(pPager, (u8*)pData2); /* Even if an IO or diskfull error occurs while journalling the @@ -44468,7 +45144,7 @@ static int pager_write(PgHdr *pPg){ ** the statement journal format differs from the standard journal format ** in that it omits the checksums and the header. */ - if( subjRequiresPage(pPg) ){ + if( pPager->nSavepoint>0 && subjRequiresPage(pPg) ){ rc = subjournalPage(pPg); } } @@ -44500,19 +45176,19 @@ SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){ PgHdr *pPg = pDbPage; Pager *pPager = pPg->pPager; - Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); assert( (pPg->flags & PGHDR_MMAP)==0 ); assert( pPager->eState>=PAGER_WRITER_LOCKED ); assert( pPager->eState!=PAGER_ERROR ); assert( assert_pager_state(pPager) ); - if( nPagePerSector>1 ){ + if( pPager->sectorSize > (u32)pPager->pageSize ){ Pgno nPageCount; /* Total number of pages in database file */ Pgno pg1; /* First page of the sector pPg is located on. */ int nPage = 0; /* Number of pages starting at pg1 to journal */ int ii; /* Loop counter */ int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */ + Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); /* Set the doNotSpill NOSYNC bit to 1. This is because we cannot allow ** a journal header to be written between the pages journaled by @@ -44551,14 +45227,14 @@ SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){ if( pPage->flags&PGHDR_NEED_SYNC ){ needSync = 1; } - sqlite3PagerUnref(pPage); + sqlite3PagerUnrefNotNull(pPage); } } }else if( (pPage = pager_lookup(pPager, pg))!=0 ){ if( pPage->flags&PGHDR_NEED_SYNC ){ needSync = 1; } - sqlite3PagerUnref(pPage); + sqlite3PagerUnrefNotNull(pPage); } } @@ -44574,7 +45250,7 @@ SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){ PgHdr *pPage = pager_lookup(pPager, pg1+ii); if( pPage ){ pPage->flags |= PGHDR_NEED_SYNC; - sqlite3PagerUnref(pPage); + sqlite3PagerUnrefNotNull(pPage); } } } @@ -44727,17 +45403,17 @@ static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ ** If successful, or if called on a pager for which it is a no-op, this ** function returns SQLITE_OK. Otherwise, an IO error code is returned. */ -SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){ +SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager, const char *zMaster){ int rc = SQLITE_OK; - if( !pPager->noSync ){ + + if( isOpen(pPager->fd) ){ + void *pArg = (void*)zMaster; + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC, pArg); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + } + if( rc==SQLITE_OK && !pPager->noSync ){ assert( !MEMDB ); rc = sqlite3OsSync(pPager->fd, pPager->syncFlags); - }else if( isOpen(pPager->fd) ){ - assert( !MEMDB ); - rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, 0); - if( rc==SQLITE_NOTFOUND ){ - rc = SQLITE_OK; - } } return rc; } @@ -44936,7 +45612,7 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( /* Finally, sync the database file. */ if( !noSync ){ - rc = sqlite3PagerSync(pPager); + rc = sqlite3PagerSync(pPager, zMaster); } IOTRACE(("DBSYNC %p\n", pPager)) } @@ -45065,7 +45741,9 @@ SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){ assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK ); assert( rc==SQLITE_OK || rc==SQLITE_FULL || rc==SQLITE_CORRUPT - || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR ); + || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR + || rc==SQLITE_CANTOPEN + ); /* If an error occurs during a ROLLBACK, we can no longer trust the pager ** cache. So call pager_error() on the way out to make any error persistent. @@ -45468,7 +46146,7 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){ needSyncPgno = pPg->pgno; assert( pPager->journalMode==PAGER_JOURNALMODE_OFF || - pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize ); + pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize ); assert( pPg->flags&PGHDR_DIRTY ); } @@ -45502,7 +46180,7 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i if( MEMDB ){ assert( pPgOld ); sqlite3PcacheMove(pPgOld, origPgno); - sqlite3PagerUnref(pPgOld); + sqlite3PagerUnrefNotNull(pPgOld); } if( needSyncPgno ){ @@ -45531,7 +46209,7 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i } pPgHdr->flags |= PGHDR_NEED_SYNC; sqlite3PcacheMakeDirty(pPgHdr); - sqlite3PagerUnref(pPgHdr); + sqlite3PagerUnrefNotNull(pPgHdr); } return SQLITE_OK; @@ -50682,7 +51360,7 @@ static int btreeMoveto( ){ int rc; /* Status code */ UnpackedRecord *pIdxKey; /* Unpacked index key */ - char aSpace[150]; /* Temp space for pIdxKey - to avoid a malloc */ + char aSpace[200]; /* Temp space for pIdxKey - to avoid a malloc */ char *pFree = 0; if( pKey ){ @@ -50692,6 +51370,10 @@ static int btreeMoveto( ); if( pIdxKey==0 ) return SQLITE_NOMEM; sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey); + if( pIdxKey->nField==0 ){ + sqlite3DbFree(pCur->pKeyInfo->db, pFree); + return SQLITE_CORRUPT_BKPT; + } }else{ pIdxKey = 0; } @@ -51646,7 +52328,7 @@ static int getAndInitPage( rc = SQLITE_CORRUPT_BKPT; }else{ rc = btreeGetPage(pBt, pgno, ppPage, bReadonly); - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && (*ppPage)->isInit==0 ){ rc = btreeInitPage(*ppPage); if( rc!=SQLITE_OK ){ releasePage(*ppPage); @@ -51667,10 +52349,11 @@ static void releasePage(MemPage *pPage){ if( pPage ){ assert( pPage->aData ); assert( pPage->pBt ); + assert( pPage->pDbPage!=0 ); assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - sqlite3PagerUnref(pPage->pDbPage); + sqlite3PagerUnrefNotNull(pPage->pDbPage); } } @@ -53747,7 +54430,7 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ int iPage = pCur->iPage; memset(&info, 0, sizeof(info)); btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info); - assert( memcmp(&info, &pCur->info, sizeof(info))==0 ); + assert( CORRUPT_DB || memcmp(&info, &pCur->info, sizeof(info))==0 ); } #else #define assertCellInfo(x) @@ -54186,10 +54869,10 @@ SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *p /* ** Return a pointer to payload information from the entry that the ** pCur cursor is pointing to. The pointer is to the beginning of -** the key if skipKey==0 and it points to the beginning of data if -** skipKey==1. The number of bytes of available key/data is written -** into *pAmt. If *pAmt==0, then the value returned will not be -** a valid pointer. +** the key if index btrees (pPage->intKey==0) and is the data for +** table btrees (pPage->intKey==1). The number of bytes of available +** key/data is written into *pAmt. If *pAmt==0, then the value +** returned will not be a valid pointer. ** ** This routine is an optimization. It is common for the entire key ** and data to fit on the local page and for there to be no overflow @@ -54202,41 +54885,21 @@ SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *p ** page of the database. The data might change or move the next time ** any btree routine is called. */ -static const unsigned char *fetchPayload( +static const void *fetchPayload( BtCursor *pCur, /* Cursor pointing to entry to read from */ - int *pAmt, /* Write the number of available bytes here */ - int skipKey /* read beginning at data if this is true */ + u32 *pAmt /* Write the number of available bytes here */ ){ - unsigned char *aPayload; - MemPage *pPage; - u32 nKey; - u32 nLocal; - assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]); assert( pCur->eState==CURSOR_VALID ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); assert( cursorHoldsMutex(pCur) ); - pPage = pCur->apPage[pCur->iPage]; - assert( pCur->aiIdx[pCur->iPage]nCell ); - if( NEVER(pCur->info.nSize==0) ){ + assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + if( pCur->info.nSize==0 ){ btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage], &pCur->info); } - aPayload = pCur->info.pCell; - aPayload += pCur->info.nHeader; - if( pPage->intKey ){ - nKey = 0; - }else{ - nKey = (int)pCur->info.nKey; - } - if( skipKey ){ - aPayload += nKey; - nLocal = pCur->info.nLocal - nKey; - }else{ - nLocal = pCur->info.nLocal; - assert( nLocal<=nKey ); - } - *pAmt = nLocal; - return aPayload; + *pAmt = pCur->info.nLocal; + return (void*)(pCur->info.pCell + pCur->info.nHeader); } @@ -54254,23 +54917,11 @@ static const unsigned char *fetchPayload( ** These routines is used to get quick access to key and data ** in the common case where no overflow pages are used. */ -SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){ - const void *p = 0; - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - assert( cursorHoldsMutex(pCur) ); - if( ALWAYS(pCur->eState==CURSOR_VALID) ){ - p = (const void*)fetchPayload(pCur, pAmt, 0); - } - return p; +SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, u32 *pAmt){ + return fetchPayload(pCur, pAmt); } -SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){ - const void *p = 0; - assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - assert( cursorHoldsMutex(pCur) ); - if( ALWAYS(pCur->eState==CURSOR_VALID) ){ - p = (const void*)fetchPayload(pCur, pAmt, 1); - } - return p; +SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, u32 *pAmt){ + return fetchPayload(pCur, pAmt); } @@ -54389,8 +55040,6 @@ static void moveToParent(BtCursor *pCur){ static int moveToRoot(BtCursor *pCur){ MemPage *pRoot; int rc = SQLITE_OK; - Btree *p = pCur->pBtree; - BtShared *pBt = p->pBt; assert( cursorHoldsMutex(pCur) ); assert( CURSOR_INVALID < CURSOR_REQUIRESEEK ); @@ -54405,56 +55054,52 @@ static int moveToRoot(BtCursor *pCur){ } if( pCur->iPage>=0 ){ - int i; - for(i=1; i<=pCur->iPage; i++){ - releasePage(pCur->apPage[i]); - } - pCur->iPage = 0; + while( pCur->iPage ) releasePage(pCur->apPage[pCur->iPage--]); }else if( pCur->pgnoRoot==0 ){ pCur->eState = CURSOR_INVALID; return SQLITE_OK; }else{ - rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0], + rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->apPage[0], pCur->wrFlag==0 ? PAGER_GET_READONLY : 0); if( rc!=SQLITE_OK ){ pCur->eState = CURSOR_INVALID; return rc; } pCur->iPage = 0; - - /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor - ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is - ** NULL, the caller expects a table b-tree. If this is not the case, - ** return an SQLITE_CORRUPT error. */ - assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 ); - if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){ - return SQLITE_CORRUPT_BKPT; - } } - - /* Assert that the root page is of the correct type. This must be the - ** case as the call to this function that loaded the root-page (either - ** this call or a previous invocation) would have detected corruption - ** if the assumption were not true, and it is not possible for the flags - ** byte to have been modified while this cursor is holding a reference - ** to the page. */ pRoot = pCur->apPage[0]; assert( pRoot->pgno==pCur->pgnoRoot ); - assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey ); + + /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor + ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is + ** NULL, the caller expects a table b-tree. If this is not the case, + ** return an SQLITE_CORRUPT error. + ** + ** Earlier versions of SQLite assumed that this test could not fail + ** if the root page was already loaded when this function was called (i.e. + ** if pCur->iPage>=0). But this is not so if the database is corrupted + ** in such a way that page pRoot is linked into a second b-tree table + ** (or the freelist). */ + assert( pRoot->intKey==1 || pRoot->intKey==0 ); + if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){ + return SQLITE_CORRUPT_BKPT; + } pCur->aiIdx[0] = 0; pCur->info.nSize = 0; pCur->atLast = 0; pCur->validNKey = 0; - if( pRoot->nCell==0 && !pRoot->leaf ){ + if( pRoot->nCell>0 ){ + pCur->eState = CURSOR_VALID; + }else if( !pRoot->leaf ){ Pgno subpage; if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT; subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]); pCur->eState = CURSOR_VALID; rc = moveToChild(pCur, subpage); }else{ - pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID); + pCur->eState = CURSOR_INVALID; } return rc; } @@ -54645,10 +55290,10 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( } assert( pCur->apPage[0]->intKey || pIdxKey ); for(;;){ - int lwr, upr, idx; + int lwr, upr, idx, c; Pgno chldPg; MemPage *pPage = pCur->apPage[pCur->iPage]; - int c; + u8 *pCell; /* Pointer to current cell in pPage */ /* pPage->nCell must be greater than zero. If this is the root-page ** the cursor would have been INVALID above and this for(;;) loop @@ -54660,35 +55305,47 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( assert( pPage->intKey==(pIdxKey==0) ); lwr = 0; upr = pPage->nCell-1; - if( biasRight ){ - pCur->aiIdx[pCur->iPage] = (u16)(idx = upr); - }else{ - pCur->aiIdx[pCur->iPage] = (u16)(idx = (upr+lwr)/2); - } - for(;;){ - u8 *pCell; /* Pointer to current cell in pPage */ - - assert( idx==pCur->aiIdx[pCur->iPage] ); - pCur->info.nSize = 0; - pCell = findCell(pPage, idx) + pPage->childPtrSize; - if( pPage->intKey ){ + assert( biasRight==0 || biasRight==1 ); + idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */ + pCur->aiIdx[pCur->iPage] = (u16)idx; + if( pPage->intKey ){ + for(;;){ i64 nCellKey; + pCell = findCell(pPage, idx) + pPage->childPtrSize; if( pPage->hasData ){ - u32 dummy; - pCell += getVarint32(pCell, dummy); + while( 0x80 <= *(pCell++) ){ + if( pCell>=pPage->aDataEnd ) return SQLITE_CORRUPT_BKPT; + } } getVarint(pCell, (u64*)&nCellKey); - if( nCellKey==intKey ){ - c = 0; - }else if( nCellKeyupr ){ c = -1; break; } + }else if( nCellKey>intKey ){ + upr = idx-1; + if( lwr>upr ){ c = +1; break; } }else{ - assert( nCellKey>intKey ); - c = +1; + assert( nCellKey==intKey ); + pCur->validNKey = 1; + pCur->info.nKey = nCellKey; + pCur->aiIdx[pCur->iPage] = (u16)idx; + if( !pPage->leaf ){ + lwr = idx; + goto moveto_next_layer; + }else{ + *pRes = 0; + rc = SQLITE_OK; + goto moveto_finish; + } } - pCur->validNKey = 1; - pCur->info.nKey = nCellKey; - }else{ + assert( lwr+upr>=0 ); + idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2; */ + } + }else{ + for(;;){ + int nCell; + pCell = findCell(pPage, idx) + pPage->childPtrSize; + /* The maximum supported page-size is 65536 bytes. This means that ** the maximum number of record bytes stored on an index B-Tree ** page is less than 16384 bytes and may be stored as a 2-byte @@ -54697,10 +55354,8 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( ** stored entirely within the b-tree page by inspecting the first ** 2 bytes of the cell. */ - int nCell = pCell[0]; - if( nCell<=pPage->max1bytePayload - /* && (pCell+nCell)aDataEnd */ - ){ + nCell = pCell[0]; + if( nCell<=pPage->max1bytePayload ){ /* This branch runs if the record-size field of the cell is a ** single byte varint and the record fits entirely on the main ** b-tree page. */ @@ -54708,7 +55363,6 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey); }else if( !(pCell[1] & 0x80) && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal - /* && (pCell+nCell+2)<=pPage->aDataEnd */ ){ /* The record-size field is a 2 byte varint and the record ** fits entirely on the main b-tree page. */ @@ -54728,6 +55382,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( rc = SQLITE_NOMEM; goto moveto_finish; } + pCur->aiIdx[pCur->iPage] = (u16)idx; rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0); if( rc ){ sqlite3_free(pCellKey); @@ -54736,49 +55391,44 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey); sqlite3_free(pCellKey); } - } - if( c==0 ){ - if( pPage->intKey && !pPage->leaf ){ - lwr = idx; - break; + if( c<0 ){ + lwr = idx+1; + }else if( c>0 ){ + upr = idx-1; }else{ + assert( c==0 ); *pRes = 0; rc = SQLITE_OK; + pCur->aiIdx[pCur->iPage] = (u16)idx; goto moveto_finish; } + if( lwr>upr ) break; + assert( lwr+upr>=0 ); + idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2 */ } - if( c<0 ){ - lwr = idx+1; - }else{ - upr = idx-1; - } - if( lwr>upr ){ - break; - } - pCur->aiIdx[pCur->iPage] = (u16)(idx = (lwr+upr)/2); } assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) ); assert( pPage->isInit ); if( pPage->leaf ){ - chldPg = 0; - }else if( lwr>=pPage->nCell ){ - chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); - }else{ - chldPg = get4byte(findCell(pPage, lwr)); - } - if( chldPg==0 ){ assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + pCur->aiIdx[pCur->iPage] = (u16)idx; *pRes = c; rc = SQLITE_OK; goto moveto_finish; } +moveto_next_layer: + if( lwr>=pPage->nCell ){ + chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); + }else{ + chldPg = get4byte(findCell(pPage, lwr)); + } pCur->aiIdx[pCur->iPage] = (u16)lwr; - pCur->info.nSize = 0; - pCur->validNKey = 0; rc = moveToChild(pCur, chldPg); - if( rc ) goto moveto_finish; + if( rc ) break; } moveto_finish: + pCur->info.nSize = 0; + pCur->validNKey = 0; return rc; } @@ -55275,6 +55925,7 @@ end_allocate_page: if( rc==SQLITE_OK ){ if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){ releasePage(*ppPage); + *ppPage = 0; return SQLITE_CORRUPT_BKPT; } (*ppPage)->isInit = 0; @@ -55536,7 +56187,7 @@ static int fillInCell( nHeader += 4; } if( pPage->hasData ){ - nHeader += putVarint(&pCell[nHeader], nData+nZero); + nHeader += putVarint32(&pCell[nHeader], nData+nZero); }else{ nData = nZero = 0; } @@ -55664,7 +56315,6 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ u32 pc; /* Offset to cell content of cell being deleted */ u8 *data; /* pPage->aData */ u8 *ptr; /* Used to move bytes around within data[] */ - u8 *endPtr; /* End of loop */ int rc; /* The return code */ int hdr; /* Beginning of the header. 0 most pages. 100 page 1 */ @@ -55689,13 +56339,8 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ *pRC = rc; return; } - endPtr = &pPage->aCellIdx[2*pPage->nCell - 2]; - assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */ - while( ptrnCell--; + memmove(ptr, ptr+2, 2*(pPage->nCell - idx)); put2byte(&data[hdr+3], pPage->nCell); pPage->nFree += 2; } @@ -55732,9 +56377,6 @@ static void insertCell( int ins; /* Index in data[] where new cell pointer is inserted */ int cellOffset; /* Address of first cell pointer in data[] */ u8 *data; /* The content of the whole page */ - u8 *ptr; /* Used for moving information around in data[] */ - u8 *endPtr; /* End of the loop */ - int nSkip = (iChild ? 4 : 0); if( *pRC ) return; @@ -55785,13 +56427,7 @@ static void insertCell( if( iChild ){ put4byte(&data[idx], iChild); } - ptr = &data[end]; - endPtr = &data[ins]; - assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */ - while( ptr>endPtr ){ - *(u16*)ptr = *(u16*)&ptr[-2]; - ptr -= 2; - } + memmove(&data[ins+2], &data[ins], end-ins); put2byte(&data[ins], idx); put2byte(&data[pPage->hdrOffset+3], pPage->nCell); #ifndef SQLITE_OMIT_AUTOVACUUM @@ -57389,6 +58025,7 @@ static int clearDatabasePage( int rc; unsigned char *pCell; int i; + int hdr; assert( sqlite3_mutex_held(pBt->mutex) ); if( pgno>btreePagecount(pBt) ){ @@ -57397,6 +58034,7 @@ static int clearDatabasePage( rc = getAndInitPage(pBt, pgno, &pPage, 0); if( rc ) return rc; + hdr = pPage->hdrOffset; for(i=0; inCell; i++){ pCell = findCell(pPage, i); if( !pPage->leaf ){ @@ -57407,7 +58045,7 @@ static int clearDatabasePage( if( rc ) goto cleardatabasepage_out; } if( !pPage->leaf ){ - rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange); + rc = clearDatabasePage(pBt, get4byte(&pPage->aData[hdr+8]), 1, pnChange); if( rc ) goto cleardatabasepage_out; }else if( pnChange ){ assert( pPage->intKey ); @@ -57416,7 +58054,7 @@ static int clearDatabasePage( if( freePageFlag ){ freePage(pPage, &rc); }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){ - zeroPage(pPage, pPage->aData[0] | PTF_LEAF); + zeroPage(pPage, pPage->aData[hdr] | PTF_LEAF); } cleardatabasepage_out: @@ -57753,7 +58391,7 @@ static void checkAppendMsg( sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1); } if( zMsg1 ){ - sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1); + sqlite3StrAccumAppendAll(&pCheck->errMsg, zMsg1); } sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap); va_end(ap); @@ -58617,6 +59255,7 @@ static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){ rc = SQLITE_ERROR; } sqlite3DbFree(pErrorDb, pParse->zErrMsg); + sqlite3ParserReset(pParse); sqlite3StackFree(pErrorDb, pParse); } if( rc ){ @@ -59046,7 +59685,7 @@ SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ /* Sync the database file to disk. */ if( rc==SQLITE_OK ){ - rc = sqlite3PagerSync(pDestPager); + rc = sqlite3PagerSync(pDestPager, 0); } }else{ sqlite3PagerTruncateImage(pDestPager, nDestTruncate); @@ -59121,10 +59760,10 @@ SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){ /* Set the error code of the destination database handle. */ rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc; - sqlite3Error(p->pDestDb, rc, 0); - - /* Exit the mutexes and free the backup context structure. */ if( p->pDestDb ){ + sqlite3Error(p->pDestDb, rc, 0); + + /* Exit the mutexes and free the backup context structure. */ sqlite3LeaveMutexAndCloseZombie(p->pDestDb); } sqlite3BtreeLeave(p->pSrc); @@ -59328,18 +59967,14 @@ SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){ /* ** Make sure pMem->z points to a writable allocation of at least -** n bytes. +** min(n,32) bytes. ** -** If the third argument passed to this function is true, then memory -** cell pMem must contain a string or blob. In this case the content is -** preserved. Otherwise, if the third parameter to this function is false, -** any current string or blob value may be discarded. -** -** This function sets the MEM_Dyn flag and clears any xDel callback. -** It also clears MEM_Ephem and MEM_Static. If the preserve flag is -** not set, Mem.n is zeroed. +** If the bPreserve argument is true, then copy of the content of +** pMem->z into the new allocation. pMem must be either a string or +** blob if bPreserve is true. If bPreserve is false, any prior content +** in pMem->z is discarded. */ -SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){ +SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){ assert( 1 >= ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) + (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + @@ -59348,37 +59983,39 @@ SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){ ); assert( (pMem->flags&MEM_RowSet)==0 ); - /* If the preserve flag is set to true, then the memory cell must already + /* If the bPreserve flag is set to true, then the memory cell must already ** contain a valid string or blob value. */ - assert( preserve==0 || pMem->flags&(MEM_Blob|MEM_Str) ); + assert( bPreserve==0 || pMem->flags&(MEM_Blob|MEM_Str) ); + testcase( bPreserve && pMem->z==0 ); - if( n<32 ) n = 32; - if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)z==pMem->zMalloc ){ + if( pMem->zMalloc==0 || sqlite3DbMallocSize(pMem->db, pMem->zMalloc)z==pMem->zMalloc ){ pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); - preserve = 0; + bPreserve = 0; }else{ sqlite3DbFree(pMem->db, pMem->zMalloc); pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); } + if( pMem->zMalloc==0 ){ + sqlite3VdbeMemRelease(pMem); + pMem->flags = MEM_Null; + return SQLITE_NOMEM; + } } - if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){ + if( pMem->z && bPreserve && pMem->z!=pMem->zMalloc ){ memcpy(pMem->zMalloc, pMem->z, pMem->n); } - if( pMem->flags&MEM_Dyn && pMem->xDel ){ + if( (pMem->flags&MEM_Dyn)!=0 && pMem->xDel ){ assert( pMem->xDel!=SQLITE_DYNAMIC ); pMem->xDel((void *)(pMem->z)); } pMem->z = pMem->zMalloc; - if( pMem->z==0 ){ - pMem->flags = MEM_Null; - }else{ - pMem->flags &= ~(MEM_Ephem|MEM_Static); - } + pMem->flags &= ~(MEM_Ephem|MEM_Static); pMem->xDel = 0; - return (pMem->z ? SQLITE_OK : SQLITE_NOMEM); + return SQLITE_OK; } /* @@ -59564,23 +60201,18 @@ SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){ */ SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){ VdbeMemRelease(p); - sqlite3DbFree(p->db, p->zMalloc); + if( p->zMalloc ){ + sqlite3DbFree(p->db, p->zMalloc); + p->zMalloc = 0; + } p->z = 0; - p->zMalloc = 0; - p->xDel = 0; + assert( p->xDel==0 ); /* Zeroed by VdbeMemRelease() above */ } /* ** Convert a 64-bit IEEE double into a 64-bit signed integer. -** If the double is too large, return 0x8000000000000000. -** -** Most systems appear to do this simply by assigning -** variables and without the extra range tests. But -** there are reports that windows throws an expection -** if the floating point value is out of range. (See ticket #2880.) -** Because we do not completely understand the problem, we will -** take the conservative approach and always do range tests -** before attempting the conversion. +** If the double is out of range of a 64-bit signed integer then +** return the closest available 64-bit signed integer. */ static i64 doubleToInt64(double r){ #ifdef SQLITE_OMIT_FLOATING_POINT @@ -59597,14 +60229,10 @@ static i64 doubleToInt64(double r){ static const i64 maxInt = LARGEST_INT64; static const i64 minInt = SMALLEST_INT64; - if( r<(double)minInt ){ - return minInt; - }else if( r>(double)maxInt ){ - /* minInt is correct here - not maxInt. It turns out that assigning - ** a very large positive number to an integer results in a very large - ** negative integer. This makes no sense, but it is what x86 hardware - ** does so for compatibility we will do the same in software. */ + if( r<=(double)minInt ){ return minInt; + }else if( r>=(double)maxInt ){ + return maxInt; }else{ return (i64)r; } @@ -59686,17 +60314,11 @@ SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ ** ** The second and third terms in the following conditional enforces ** the second condition under the assumption that addition overflow causes - ** values to wrap around. On x86 hardware, the third term is always - ** true and could be omitted. But we leave it in because other - ** architectures might behave differently. + ** values to wrap around. */ if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64 -#if defined(__i486__) || defined(__x86_64__) - && ALWAYS(pMem->u.iu.iflags |= MEM_Int; } @@ -59768,6 +60390,9 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){ MemSetTypeFlag(pMem, MEM_Null); pMem->type = SQLITE_NULL; } +SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value *p){ + sqlite3VdbeMemSetNull((Mem*)p); +} /* ** Delete any previous value and set the value to be a BLOB of length @@ -59881,7 +60506,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){ /* ** Size of struct Mem not including the Mem.zMalloc member. */ -#define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc)) +#define MEMCELLSIZE offsetof(Mem,zMalloc) /* ** Make an shallow copy of pFrom into pTo. Prior contents of @@ -60165,13 +60790,13 @@ SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const C */ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( BtCursor *pCur, /* Cursor pointing at record to retrieve. */ - int offset, /* Offset from the start of data to return bytes from. */ - int amt, /* Number of bytes to return. */ + u32 offset, /* Offset from the start of data to return bytes from. */ + u32 amt, /* Number of bytes to return. */ int key, /* If true, retrieve from the btree key, not data. */ Mem *pMem /* OUT: Return data in this Mem structure. */ ){ char *zData; /* Data from the btree layer */ - int available = 0; /* Number of bytes available on the local btree page */ + u32 available = 0; /* Number of bytes available on the local btree page */ int rc = SQLITE_OK; /* Return code */ assert( sqlite3BtreeCursorIsValid(pCur) ); @@ -60186,7 +60811,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( } assert( zData!=0 ); - if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){ + if( offset+amt<=available ){ sqlite3VdbeMemRelease(pMem); pMem->z = &zData[offset]; pMem->flags = MEM_Blob|MEM_Ephem; @@ -60205,7 +60830,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( sqlite3VdbeMemRelease(pMem); } } - pMem->n = amt; + pMem->n = (int)amt; return rc; } @@ -60300,17 +60925,17 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){ Index *pIdx = p->pIdx; /* Index being probed */ int nByte; /* Bytes of space to allocate */ int i; /* Counter variable */ - int nCol = pIdx->nColumn+1; /* Number of index columns including rowid */ + int nCol = pIdx->nColumn; /* Number of index columns including rowid */ - nByte = sizeof(Mem) * nCol + sizeof(UnpackedRecord); + nByte = sizeof(Mem) * nCol + ROUND8(sizeof(UnpackedRecord)); pRec = (UnpackedRecord*)sqlite3DbMallocZero(db, nByte); if( pRec ){ - pRec->pKeyInfo = sqlite3IndexKeyinfo(p->pParse, pIdx); + pRec->pKeyInfo = sqlite3KeyInfoOfIndex(p->pParse, pIdx); if( pRec->pKeyInfo ){ - assert( pRec->pKeyInfo->nField+1==nCol ); - pRec->pKeyInfo->enc = ENC(db); + assert( pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField==nCol ); + assert( pRec->pKeyInfo->enc==ENC(db) ); pRec->flags = UNPACKED_PREFIX_MATCH; - pRec->aMem = (Mem *)&pRec[1]; + pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord))); for(i=0; iaMem[i].flags = MEM_Null; pRec->aMem[i].type = SQLITE_NULL; @@ -60364,16 +60989,7 @@ static int valueFromExpr( return SQLITE_OK; } op = pExpr->op; - - /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT4. - ** The ifdef here is to enable us to achieve 100% branch test coverage even - ** when SQLITE_ENABLE_STAT4 is omitted. - */ -#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - if( op==TK_REGISTER ) op = pExpr->op2; -#else if( NEVER(op==TK_REGISTER) ) op = pExpr->op2; -#endif /* Handle negative integers in a single step. This is needed in the ** case when the value is -9223372036854775808. @@ -60514,7 +61130,7 @@ static void recordFunc( }else{ aRet[0] = nSerial+1; sqlite3PutVarint(&aRet[1], iSerial); - sqlite3VdbeSerialPut(&aRet[1+nSerial], nVal, argv[0], file_format); + sqlite3VdbeSerialPut(&aRet[1+nSerial], argv[0], iSerial); sqlite3_result_blob(context, aRet, nRet, SQLITE_TRANSIENT); sqlite3DbFree(db, aRet); } @@ -60592,10 +61208,9 @@ SQLITE_PRIVATE int sqlite3Stat4ProbeSetValue( pVal = valueNew(db, &alloc); if( pVal ){ sqlite3VdbeMemSetNull((Mem*)pVal); - *pbOk = 1; } }else if( pExpr->op==TK_VARIABLE - || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE) + || NEVER(pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE) ){ Vdbe *v; int iBindVar = pExpr->iColumn; @@ -60608,16 +61223,13 @@ SQLITE_PRIVATE int sqlite3Stat4ProbeSetValue( sqlite3ValueApplyAffinity(pVal, affinity, ENC(db)); } pVal->db = pParse->db; - *pbOk = 1; sqlite3VdbeMemStoreType((Mem*)pVal); } - }else{ - *pbOk = 0; } }else{ rc = valueFromExpr(db, pExpr, ENC(db), affinity, &pVal, &alloc); - *pbOk = (pVal!=0); } + *pbOk = (pVal!=0); assert( pVal==0 || pVal->db==db ); return rc; @@ -60631,13 +61243,13 @@ SQLITE_PRIVATE int sqlite3Stat4ProbeSetValue( SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){ if( pRec ){ int i; - int nCol = pRec->pKeyInfo->nField+1; + int nCol = pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField; Mem *aMem = pRec->aMem; sqlite3 *db = aMem[0].db; for(i=0; ipKeyInfo); + sqlite3KeyInfoUnref(pRec->pKeyInfo); sqlite3DbFree(db, pRec); } } @@ -60703,7 +61315,8 @@ SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){ /* ** Create a new virtual database engine. */ -SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){ +SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){ + sqlite3 *db = pParse->db; Vdbe *p; p = sqlite3DbMallocZero(db, sizeof(Vdbe) ); if( p==0 ) return 0; @@ -60715,6 +61328,10 @@ SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){ p->pPrev = 0; db->pVdbe = p; p->magic = VDBE_MAGIC_INIT; + p->pParse = pParse; + assert( pParse->aLabel==0 ); + assert( pParse->nLabel==0 ); + assert( pParse->nOpAlloc==0 ); return p; } @@ -60761,15 +61378,6 @@ SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ pB->isPrepareV2 = pA->isPrepareV2; } -#ifdef SQLITE_DEBUG -/* -** Turn tracing on or off -*/ -SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){ - p->trace = trace; -} -#endif - /* ** Resize the Vdbe.aOp array so that it is at least one op larger than ** it was. @@ -60779,17 +61387,29 @@ SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){ ** unchanged (this is so that any opcodes already allocated can be ** correctly deallocated along with the rest of the Vdbe). */ -static int growOpArray(Vdbe *p){ +static int growOpArray(Vdbe *v){ VdbeOp *pNew; + Parse *p = v->pParse; int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op))); - pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op)); + pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op)); if( pNew ){ p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op); - p->aOp = pNew; + v->aOp = pNew; } return (pNew ? SQLITE_OK : SQLITE_NOMEM); } +#ifdef SQLITE_DEBUG +/* This routine is just a convenient place to set a breakpoint that will +** fire after each opcode is inserted and displayed using +** "PRAGMA vdbe_addoptrace=on". +*/ +static void test_addop_breakpoint(void){ + static int n = 0; + n++; +} +#endif + /* ** Add a new instruction to the list of instructions current in the ** VDBE. Return the address of the new instruction. @@ -60813,7 +61433,7 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ i = p->nOp; assert( p->magic==VDBE_MAGIC_INIT ); assert( op>0 && op<0xff ); - if( p->nOpAlloc<=i ){ + if( p->pParse->nOpAlloc<=i ){ if( growOpArray(p) ){ return 1; } @@ -60827,10 +61447,22 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ pOp->p3 = p3; pOp->p4.p = 0; pOp->p4type = P4_NOTUSED; -#ifdef SQLITE_DEBUG +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS pOp->zComment = 0; +#endif +#ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ + int jj, kk; + Parse *pParse = p->pParse; + for(jj=kk=0; jjaColCache + jj; + if( x->iLevel>pParse->iCacheLevel || x->iReg==0 ) continue; + printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn); + kk++; + } + if( kk ) printf("\n"); sqlite3VdbePrintOp(0, i, &p->aOp[i]); + test_addop_breakpoint(); } #endif #ifdef VDBE_PROFILE @@ -60912,9 +61544,10 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp4Int( ** ** Zero is returned if a malloc() fails. */ -SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){ +SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *v){ + Parse *p = v->pParse; int i = p->nLabel++; - assert( p->magic==VDBE_MAGIC_INIT ); + assert( v->magic==VDBE_MAGIC_INIT ); if( (i & (i-1))==0 ){ p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, (i*2+1)*sizeof(p->aLabel[0])); @@ -60930,13 +61563,15 @@ SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){ ** be inserted. The parameter "x" must have been obtained from ** a prior call to sqlite3VdbeMakeLabel(). */ -SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){ +SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *v, int x){ + Parse *p = v->pParse; int j = -1-x; - assert( p->magic==VDBE_MAGIC_INIT ); + assert( v->magic==VDBE_MAGIC_INIT ); assert( jnLabel ); if( j>=0 && p->aLabel ){ - p->aLabel[j] = p->nOp; + p->aLabel[j] = v->nOp; } + p->iFixedOp = v->nOp - 1; } /* @@ -61084,7 +61719,8 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ int i; int nMaxArgs = *pMaxFuncArgs; Op *pOp; - int *aLabel = p->aLabel; + Parse *pParse = p->pParse; + int *aLabel = pParse->aLabel; p->readOnly = 1; p->bIsReader = 0; for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ @@ -61131,12 +61767,14 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ } #endif case OP_Next: + case OP_NextIfOpen: case OP_SorterNext: { pOp->p4.xAdvance = sqlite3BtreeNext; pOp->p4type = P4_ADVANCE; break; } - case OP_Prev: { + case OP_Prev: + case OP_PrevIfOpen: { pOp->p4.xAdvance = sqlite3BtreePrevious; pOp->p4type = P4_ADVANCE; break; @@ -61145,12 +61783,13 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ pOp->opflags = sqlite3OpcodeProperty[opcode]; if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){ - assert( -1-pOp->p2nLabel ); + assert( -1-pOp->p2nLabel ); pOp->p2 = aLabel[-1-pOp->p2]; } } - sqlite3DbFree(p->db, p->aLabel); - p->aLabel = 0; + sqlite3DbFree(p->db, pParse->aLabel); + pParse->aLabel = 0; + pParse->nLabel = 0; *pMaxFuncArgs = nMaxArgs; assert( p->bIsReader!=0 || p->btreeMask==0 ); } @@ -61194,7 +61833,7 @@ SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg) SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){ int addr; assert( p->magic==VDBE_MAGIC_INIT ); - if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){ + if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p) ){ return 0; } addr = p->nOp; @@ -61206,7 +61845,8 @@ SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp) VdbeOp *pOut = &p->aOp[i+addr]; pOut->opcode = pIn->opcode; pOut->p1 = pIn->p1; - if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){ + if( p2<0 ){ + assert( sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP ); pOut->p2 = addr + ADDR(p2); }else{ pOut->p2 = p2; @@ -61215,8 +61855,10 @@ SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp) pOut->p4type = P4_NOTUSED; pOut->p4.p = 0; pOut->p5 = 0; -#ifdef SQLITE_DEBUG +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS pOut->zComment = 0; +#endif +#ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]); } @@ -61278,7 +61920,8 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){ ** the address of the next instruction to be coded. */ SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){ - if( ALWAYS(addr>=0) ) sqlite3VdbeChangeP2(p, addr, p->nOp); + sqlite3VdbeChangeP2(p, addr, p->nOp); + p->pParse->iFixedOp = p->nOp - 1; } @@ -61304,12 +61947,14 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){ case P4_REAL: case P4_INT64: case P4_DYNAMIC: - case P4_KEYINFO: - case P4_INTARRAY: - case P4_KEYINFO_HANDOFF: { + case P4_INTARRAY: { sqlite3DbFree(db, p4); break; } + case P4_KEYINFO: { + if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); + break; + } case P4_MPRINTF: { if( db->pnBytesFreed==0 ) sqlite3_free(p4); break; @@ -61346,7 +61991,7 @@ static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ Op *pOp; for(pOp=aOp; pOp<&aOp[nOp]; pOp++){ freeP4(db, pOp->p4type, pOp->p4.p); -#ifdef SQLITE_DEBUG +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS sqlite3DbFree(db, pOp->zComment); #endif } @@ -61374,6 +62019,19 @@ SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ freeP4(db, pOp->p4type, pOp->p4.p); memset(pOp, 0, sizeof(pOp[0])); pOp->opcode = OP_Noop; + if( addr==p->nOp-1 ) p->nOp--; + } +} + +/* +** Remove the last opcode inserted +*/ +SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){ + if( (p->nOp-1)>(p->pParse->iFixedOp) && p->aOp[p->nOp-1].opcode==op ){ + sqlite3VdbeChangeToNoop(p, p->nOp-1); + return 1; + }else{ + return 0; } } @@ -61387,14 +62045,6 @@ SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ ** the string is made into memory obtained from sqlite3_malloc(). ** A value of n==0 means copy bytes of zP4 up to and including the ** first null byte. If n>0 then copy n+1 bytes of zP4. -** -** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure. -** A copy is made of the KeyInfo structure into memory obtained from -** sqlite3_malloc, to be freed when the Vdbe is finalized. -** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure -** stored in memory that the caller has obtained from sqlite3_malloc. The -** caller should not free the allocation, it will be freed when the Vdbe is -** finalized. ** ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points ** to a string or structure that is guaranteed to exist for the lifetime of @@ -61409,7 +62059,7 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int db = p->db; assert( p->magic==VDBE_MAGIC_INIT ); if( p->aOp==0 || db->mallocFailed ){ - if ( n!=P4_KEYINFO && n!=P4_VTAB ) { + if( n!=P4_VTAB ){ freeP4(db, n, (void*)*(char**)&zP4); } return; @@ -61432,19 +62082,6 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int pOp->p4.p = 0; pOp->p4type = P4_NOTUSED; }else if( n==P4_KEYINFO ){ - KeyInfo *pOrig, *pNew; - - pOrig = (KeyInfo*)zP4; - pOp->p4.pKeyInfo = pNew = sqlite3KeyInfoAlloc(db, pOrig->nField); - if( pNew ){ - memcpy(pNew->aColl, pOrig->aColl, pOrig->nField*sizeof(pNew->aColl[0])); - memcpy(pNew->aSortOrder, pOrig->aSortOrder, pOrig->nField); - pOp->p4type = P4_KEYINFO; - }else{ - p->db->mallocFailed = 1; - pOp->p4type = P4_NOTUSED; - } - }else if( n==P4_KEYINFO_HANDOFF ){ pOp->p4.p = (void*)zP4; pOp->p4type = P4_KEYINFO; }else if( n==P4_VTAB ){ @@ -61462,7 +62099,19 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int } } -#ifndef NDEBUG +/* +** Set the P4 on the most recently added opcode to the KeyInfo for the +** index given. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse *pParse, Index *pIdx){ + Vdbe *v = pParse->pVdbe; + assert( v!=0 ); + assert( pIdx!=0 ); + sqlite3VdbeChangeP4(v, -1, (char*)sqlite3KeyInfoOfIndex(pParse, pIdx), + P4_KEYINFO); +} + +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS /* ** Change the comment on the most recently coded instruction. Or ** insert a No-op and add the comment to that new instruction. This @@ -61537,6 +62186,97 @@ SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ } } +#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) +/* +** Return an integer value for one of the parameters to the opcode pOp +** determined by character c. +*/ +static int translateP(char c, const Op *pOp){ + if( c=='1' ) return pOp->p1; + if( c=='2' ) return pOp->p2; + if( c=='3' ) return pOp->p3; + if( c=='4' ) return pOp->p4.i; + return pOp->p5; +} + +/* +** Compute a string for the "comment" field of a VDBE opcode listing. +** +** The Synopsis: field in comments in the vdbe.c source file gets converted +** to an extra string that is appended to the sqlite3OpcodeName(). In the +** absence of other comments, this synopsis becomes the comment on the opcode. +** Some translation occurs: +** +** "PX" -> "r[X]" +** "PX@PY" -> "r[X..X+Y-1]" or "r[x]" if y is 0 or 1 +** "PX@PY+1" -> "r[X..X+Y]" or "r[x]" if y is 0 +** "PY..PY" -> "r[X..Y]" or "r[x]" if y<=x +*/ +static int displayComment( + const Op *pOp, /* The opcode to be commented */ + const char *zP4, /* Previously obtained value for P4 */ + char *zTemp, /* Write result here */ + int nTemp /* Space available in zTemp[] */ +){ + const char *zOpName; + const char *zSynopsis; + int nOpName; + int ii, jj; + zOpName = sqlite3OpcodeName(pOp->opcode); + nOpName = sqlite3Strlen30(zOpName); + if( zOpName[nOpName+1] ){ + int seenCom = 0; + char c; + zSynopsis = zOpName += nOpName + 1; + for(ii=jj=0; jjzComment); + seenCom = 1; + }else{ + int v1 = translateP(c, pOp); + int v2; + sqlite3_snprintf(nTemp-jj, zTemp+jj, "%d", v1); + if( strncmp(zSynopsis+ii+1, "@P", 2)==0 ){ + ii += 3; + jj += sqlite3Strlen30(zTemp+jj); + v2 = translateP(zSynopsis[ii], pOp); + if( strncmp(zSynopsis+ii+1,"+1",2)==0 ){ + ii += 2; + v2++; + } + if( v2>1 ){ + sqlite3_snprintf(nTemp-jj, zTemp+jj, "..%d", v1+v2-1); + } + }else if( strncmp(zSynopsis+ii+1, "..P3", 4)==0 && pOp->p3==0 ){ + ii += 4; + } + } + jj += sqlite3Strlen30(zTemp+jj); + }else{ + zTemp[jj++] = c; + } + } + if( !seenCom && jjzComment ){ + sqlite3_snprintf(nTemp-jj, zTemp+jj, "; %s", pOp->zComment); + jj += sqlite3Strlen30(zTemp+jj); + } + if( jjzComment ){ + sqlite3_snprintf(nTemp, zTemp, "%s", pOp->zComment); + jj = sqlite3Strlen30(zTemp); + }else{ + zTemp[0] = 0; + jj = 0; + } + return jj; +} +#endif /* SQLITE_DEBUG */ + + #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \ || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) /* @@ -61547,17 +62287,20 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){ char *zP4 = zTemp; assert( nTemp>=20 ); switch( pOp->p4type ){ - case P4_KEYINFO_STATIC: case P4_KEYINFO: { int i, j; KeyInfo *pKeyInfo = pOp->p4.pKeyInfo; assert( pKeyInfo->aSortOrder!=0 ); - sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField); + sqlite3_snprintf(nTemp, zTemp, "k(%d", pKeyInfo->nField); i = sqlite3Strlen30(zTemp); for(j=0; jnField; j++){ CollSeq *pColl = pKeyInfo->aColl[j]; const char *zColl = pColl ? pColl->zName : "nil"; int n = sqlite3Strlen30(zColl); + if( n==6 && memcmp(zColl,"BINARY",6)==0 ){ + zColl = "B"; + n = 1; + } if( i+n>nTemp-6 ){ memcpy(&zTemp[i],",...",4); break; @@ -61576,7 +62319,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){ } case P4_COLLSEQ: { CollSeq *pColl = pOp->p4.pColl; - sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName); + sqlite3_snprintf(nTemp, zTemp, "(%.20s)", pColl->zName); break; } case P4_FUNCDEF: { @@ -61730,16 +62473,21 @@ SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){ SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ char *zP4; char zPtr[50]; - static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n"; + char zCom[100]; + static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-13s %.2X %s\n"; if( pOut==0 ) pOut = stdout; zP4 = displayP4(pOp, zPtr, sizeof(zPtr)); +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + displayComment(pOp, zP4, zCom, sizeof(zCom)); +#else + zCom[0] = 0 +#endif + /* NB: The sqlite3OpcodeName() function is implemented by code created + ** by the mkopcodeh.awk and mkopcodec.awk scripts which extract the + ** information from the vdbe.c source text */ fprintf(pOut, zFormat1, pc, sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5, -#ifdef SQLITE_DEBUG - pOp->zComment ? pOp->zComment : "" -#else - "" -#endif + zCom ); fflush(pOut); } @@ -61885,7 +62633,7 @@ SQLITE_PRIVATE int sqlite3VdbeList( rc = SQLITE_ERROR; sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc)); }else{ - char *z; + char *zP4; Op *pOp; if( inOp ){ /* The output line number is small enough that we are still in the @@ -61908,7 +62656,7 @@ SQLITE_PRIVATE int sqlite3VdbeList( pMem++; pMem->flags = MEM_Static|MEM_Str|MEM_Term; - pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ + pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ assert( pMem->z!=0 ); pMem->n = sqlite3Strlen30(pMem->z); pMem->type = SQLITE_TEXT; @@ -61955,9 +62703,9 @@ SQLITE_PRIVATE int sqlite3VdbeList( return SQLITE_ERROR; } pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; - z = displayP4(pOp, pMem->z, 32); - if( z!=pMem->z ){ - sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0); + zP4 = displayP4(pOp, pMem->z, 32); + if( zP4!=pMem->z ){ + sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0); }else{ assert( pMem->z!=0 ); pMem->n = sqlite3Strlen30(pMem->z); @@ -61978,19 +62726,19 @@ SQLITE_PRIVATE int sqlite3VdbeList( pMem->enc = SQLITE_UTF8; pMem++; -#ifdef SQLITE_DEBUG - if( pOp->zComment ){ - pMem->flags = MEM_Str|MEM_Term; - pMem->z = pOp->zComment; - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; - pMem->type = SQLITE_TEXT; - }else -#endif - { - pMem->flags = MEM_Null; /* Comment */ - pMem->type = SQLITE_NULL; +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + if( sqlite3VdbeMemGrow(pMem, 500, 0) ){ + assert( p->db->mallocFailed ); + return SQLITE_ERROR; } + pMem->flags = MEM_Dyn|MEM_Str|MEM_Term; + pMem->n = displayComment(pOp, zP4, pMem->z, 500); + pMem->type = SQLITE_TEXT; + pMem->enc = SQLITE_UTF8; +#else + pMem->flags = MEM_Null; /* Comment */ + pMem->type = SQLITE_NULL; +#endif } p->nResColumn = 8 - 4*(p->explain-1); @@ -62007,15 +62755,17 @@ SQLITE_PRIVATE int sqlite3VdbeList( ** Print the SQL that was used to generate a VDBE program. */ SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){ - int nOp = p->nOp; - VdbeOp *pOp; - if( nOp<1 ) return; - pOp = &p->aOp[0]; - if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ - const char *z = pOp->p4.z; - while( sqlite3Isspace(*z) ) z++; - printf("SQL: [%s]\n", z); + const char *z = 0; + if( p->zSql ){ + z = p->zSql; + }else if( p->nOp>=1 ){ + const VdbeOp *pOp = &p->aOp[0]; + if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){ + z = pOp->p4.z; + while( sqlite3Isspace(*z) ) z++; + } } + if( z ) printf("SQL: [%s]\n", z); } #endif @@ -62166,6 +62916,7 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( assert( p->nOp>0 ); assert( pParse!=0 ); assert( p->magic==VDBE_MAGIC_INIT ); + assert( pParse==p->pParse ); db = p->db; assert( db->mallocFailed==0 ); nVar = pParse->nVar; @@ -62189,8 +62940,8 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( /* Allocate space for memory registers, SQL variables, VDBE cursors and ** an array to marshal SQL function arguments in. */ - zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */ - zEnd = (u8*)&p->aOp[p->nOpAlloc]; /* First byte past end of zCsr[] */ + zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */ + zEnd = (u8*)&p->aOp[pParse->nOpAlloc]; /* First byte past end of zCsr[] */ resolveP2Values(p, &nArg); p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); @@ -62273,7 +63024,7 @@ SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ #ifndef SQLITE_OMIT_VIRTUALTABLE if( pCx->pVtabCursor ){ sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor; - const sqlite3_module *pModule = pCx->pModule; + const sqlite3_module *pModule = pVtabCursor->pVtab->pModule; p->inVtabMethod = 1; pModule->xClose(pVtabCursor); p->inVtabMethod = 0; @@ -62781,7 +63532,7 @@ SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ ){ p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; p->errorAction = OE_Abort; - sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed"); + sqlite3SetString(&p->zErrMsg, db, "FOREIGN KEY constraint failed"); return SQLITE_ERROR; } return SQLITE_OK; @@ -63017,6 +63768,7 @@ SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){ if( p->zErrMsg ){ u8 mallocFailed = db->mallocFailed; sqlite3BeginBenignMalloc(); + if( db->pErr==0 ) db->pErr = sqlite3ValueNew(db); sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); sqlite3EndBenignMalloc(); db->mallocFailed = mallocFailed; @@ -63085,8 +63837,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ ** to sqlite3_step(). For consistency (since sqlite3_step() was ** called), set the database error in this case as well. */ - sqlite3Error(db, p->rc, 0); - sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); + sqlite3Error(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg); sqlite3DbFree(db, p->zErrMsg); p->zErrMsg = 0; } @@ -63159,8 +63910,9 @@ SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(Vdbe *pVdbe, int iOp, int mask){ while( *pp ){ AuxData *pAux = *pp; if( (iOp<0) - || (pAux->iOp==iOp && (pAux->iArg>31 || !(mask & ((u32)1<iArg)))) + || (pAux->iOp==iOp && (pAux->iArg>31 || !(mask & MASKBIT32(pAux->iArg)))) ){ + testcase( pAux->iArg==31 ); if( pAux->xDelete ){ pAux->xDelete(pAux->pAux); } @@ -63193,7 +63945,6 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ } for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]); vdbeFreeOpArray(db, p->aOp, p->nOp); - sqlite3DbFree(db, p->aLabel); sqlite3DbFree(db, p->aColName); sqlite3DbFree(db, p->zSql); sqlite3DbFree(db, p->pFree); @@ -63257,7 +64008,7 @@ SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){ #endif p->deferredMoveto = 0; p->cacheStatus = CACHE_STALE; - }else if( ALWAYS(p->pCursor) ){ + }else if( p->pCursor ){ int hasMoved; int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved); if( rc ) return rc; @@ -63424,21 +64175,15 @@ static u64 floatSwap(u64 in){ ** buf. It is assumed that the caller has allocated sufficient space. ** Return the number of bytes written. ** -** nBuf is the amount of space left in buf[]. nBuf must always be -** large enough to hold the entire field. Except, if the field is -** a blob with a zero-filled tail, then buf[] might be just the right -** size to hold everything except for the zero-filled tail. If buf[] -** is only big enough to hold the non-zero prefix, then only write that -** prefix into buf[]. But if buf[] is large enough to hold both the -** prefix and the tail then write the prefix and set the tail to all -** zeros. +** nBuf is the amount of space left in buf[]. The caller is responsible +** for allocating enough space to buf[] to hold the entire field, exclusive +** of the pMem->u.nZero bytes for a MEM_Zero value. ** ** Return the number of bytes actually written into buf[]. The number ** of bytes in the zero-filled tail is included in the return value only ** if those bytes were zeroed in buf[]. */ -SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){ - u32 serial_type = sqlite3VdbeSerialType(pMem, file_format); +SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){ u32 len; /* Integer and Real */ @@ -63453,7 +64198,6 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_f v = pMem->u.i; } len = i = sqlite3VdbeSerialTypeLen(serial_type); - assert( len<=(u32)nBuf ); while( i-- ){ buf[i] = (u8)(v&0xFF); v >>= 8; @@ -63465,17 +64209,8 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_f if( serial_type>=12 ){ assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0) == (int)sqlite3VdbeSerialTypeLen(serial_type) ); - assert( pMem->n<=nBuf ); len = pMem->n; memcpy(buf, pMem->z, len); - if( pMem->flags & MEM_Zero ){ - len += pMem->u.nZero; - assert( nBuf>=0 ); - if( len > (u32)nBuf ){ - len = (u32)nBuf; - } - memset(&buf[pMem->n], 0, len-pMem->n); - } return len; } @@ -63492,6 +64227,9 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( u32 serial_type, /* Serial type to deserialize */ Mem *pMem /* Memory cell to write value into */ ){ + u64 x; + u32 y; + int i; switch( serial_type ){ case 10: /* Reserved for future use */ case 11: /* Reserved for future use */ @@ -63505,23 +64243,26 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( return 1; } case 2: { /* 2-byte signed integer */ - pMem->u.i = (((signed char)buf[0])<<8) | buf[1]; + i = 256*(signed char)buf[0] | buf[1]; + pMem->u.i = (i64)i; pMem->flags = MEM_Int; return 2; } case 3: { /* 3-byte signed integer */ - pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2]; + i = 65536*(signed char)buf[0] | (buf[1]<<8) | buf[2]; + pMem->u.i = (i64)i; pMem->flags = MEM_Int; return 3; } case 4: { /* 4-byte signed integer */ - pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + y = ((unsigned)buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + pMem->u.i = (i64)*(int*)&y; pMem->flags = MEM_Int; return 4; } case 5: { /* 6-byte signed integer */ - u64 x = (((signed char)buf[0])<<8) | buf[1]; - u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5]; + x = 256*(signed char)buf[0] + buf[1]; + y = ((unsigned)buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5]; x = (x<<32) | y; pMem->u.i = *(i64*)&x; pMem->flags = MEM_Int; @@ -63529,8 +64270,6 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( } case 6: /* 8-byte signed integer */ case 7: { /* IEEE floating point */ - u64 x; - u32 y; #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) /* Verify that integers and floating point values use the same ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is @@ -63543,9 +64282,8 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( swapMixedEndianFloat(t2); assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); #endif - - x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; - y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; + x = ((unsigned)buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + y = ((unsigned)buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; x = (x<<32) | y; if( serial_type==6 ){ pMem->u.i = *(i64*)&x; @@ -63565,15 +64303,12 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( return 0; } default: { + static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem }; u32 len = (serial_type-12)/2; pMem->z = (char *)buf; pMem->n = len; pMem->xDel = 0; - if( serial_type&0x01 ){ - pMem->flags = MEM_Str | MEM_Ephem; - }else{ - pMem->flags = MEM_Blob | MEM_Ephem; - } + pMem->flags = aFlag[serial_type&1]; return len; } } @@ -63712,9 +64447,11 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare( idx1 = getVarint32(aKey1, szHdr1); d1 = szHdr1; - assert( pKeyInfo->nField+1>=pPKey2->nField ); + assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB ); assert( pKeyInfo->aSortOrder!=0 ); - while( idx1nField ){ + assert( pKeyInfo->nField>0 ); + assert( idx1<=szHdr1 || CORRUPT_DB ); + do{ u32 serial_type1; /* Read the serial types for the next element in each key. */ @@ -63741,28 +64478,13 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare( rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], pKeyInfo->aColl[i]); if( rc!=0 ){ assert( mem1.zMalloc==0 ); /* See comment below */ - - /* Invert the result if we are using DESC sort order. */ if( pKeyInfo->aSortOrder[i] ){ - rc = -rc; + rc = -rc; /* Invert the result for DESC sort order. */ } - - /* If the PREFIX_SEARCH flag is set and all fields except the final - ** rowid field were equal, then clear the PREFIX_SEARCH flag and set - ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1). - ** This is used by the OP_IsUnique opcode. - */ - if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){ - assert( idx1==szHdr1 && rc ); - assert( mem1.flags & MEM_Int ); - pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH; - pPKey2->rowid = mem1.u.i; - } - return rc; } i++; - } + }while( idx1nField ); /* No memory allocation is ever used on mem1. Prove this using ** the following assert(). If the assert() fails, it indicates a @@ -63820,7 +64542,7 @@ SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){ /* Read in the complete content of the index entry */ memset(&m, 0, sizeof(m)); - rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m); + rc = sqlite3VdbeMemFromBtree(pCur, 0, (u32)nCellKey, 1, &m); if( rc ){ return rc; } @@ -63898,7 +64620,7 @@ SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare( return SQLITE_CORRUPT_BKPT; } memset(&m, 0, sizeof(m)); - rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m); + rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (u32)nCellKey, 1, &m); if( rc ){ return rc; } @@ -64492,7 +65214,7 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ v->doingRerun = 1; assert( v->expired==0 ); } - if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){ + if( rc2!=SQLITE_OK ){ /* This case occurs after failing to recompile an sql statement. ** The error message from the SQL compiler has already been loaded ** into the database handle. This block copies the error message @@ -64502,6 +65224,7 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ ** sqlite3_errmsg() and sqlite3_errcode(). */ const char *zErr = (const char *)sqlite3_value_text(db->pErr); + assert( zErr!=0 || db->mallocFailed ); sqlite3DbFree(db, v->zErrMsg); if( !db->mallocFailed ){ v->zErrMsg = sqlite3DbStrDup(db, zErr); @@ -65417,6 +66140,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql( const char *zStart = zRawSql; while( *(zRawSql++)!='\n' && *zRawSql ); sqlite3StrAccumAppend(&out, "-- ", 3); + assert( (zRawSql - zStart) > 0 ); sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart)); } }else{ @@ -65449,9 +66173,9 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql( if( pVar->flags & MEM_Null ){ sqlite3StrAccumAppend(&out, "NULL", 4); }else if( pVar->flags & MEM_Int ){ - sqlite3XPrintf(&out, "%lld", pVar->u.i); + sqlite3XPrintf(&out, 0, "%lld", pVar->u.i); }else if( pVar->flags & MEM_Real ){ - sqlite3XPrintf(&out, "%!.15g", pVar->r); + sqlite3XPrintf(&out, 0, "%!.15g", pVar->r); }else if( pVar->flags & MEM_Str ){ int nOut; /* Number of bytes of the string text to include in output */ #ifndef SQLITE_OMIT_UTF16 @@ -65472,15 +66196,17 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql( while( nOutn && (pVar->z[nOut]&0xc0)==0x80 ){ nOut++; } } #endif - sqlite3XPrintf(&out, "'%.*q'", nOut, pVar->z); + sqlite3XPrintf(&out, 0, "'%.*q'", nOut, pVar->z); #ifdef SQLITE_TRACE_SIZE_LIMIT - if( nOutn ) sqlite3XPrintf(&out, "/*+%d bytes*/", pVar->n-nOut); + if( nOutn ){ + sqlite3XPrintf(&out, 0, "/*+%d bytes*/", pVar->n-nOut); + } #endif #ifndef SQLITE_OMIT_UTF16 if( enc!=SQLITE_UTF8 ) sqlite3VdbeMemRelease(&utf8); #endif }else if( pVar->flags & MEM_Zero ){ - sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero); + sqlite3XPrintf(&out, 0, "zeroblob(%d)", pVar->u.nZero); }else{ int nOut; /* Number of bytes of the blob to include in output */ assert( pVar->flags & MEM_Blob ); @@ -65490,11 +66216,13 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql( if( nOut>SQLITE_TRACE_SIZE_LIMIT ) nOut = SQLITE_TRACE_SIZE_LIMIT; #endif for(i=0; iz[i]&0xff); + sqlite3XPrintf(&out, 0, "%02x", pVar->z[i]&0xff); } sqlite3StrAccumAppend(&out, "'", 1); #ifdef SQLITE_TRACE_SIZE_LIMIT - if( nOutn ) sqlite3XPrintf(&out, "/*+%d bytes*/", pVar->n-nOut); + if( nOutn ){ + sqlite3XPrintf(&out, 0, "/*+%d bytes*/", pVar->n-nOut); + } #endif } } @@ -65553,7 +66281,7 @@ SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){ sqlite3AppendSpace(&p->str, p->aIndent[n-1]); } va_start(ap, zFormat); - sqlite3VXPrintf(&p->str, 1, zFormat, ap); + sqlite3VXPrintf(&p->str, SQLITE_PRINTF_INTERNAL, zFormat, ap); va_end(ap); } } @@ -65833,9 +66561,8 @@ static VdbeCursor *allocateCursor( int nByte; VdbeCursor *pCx = 0; nByte = - ROUND8(sizeof(VdbeCursor)) + - (isBtreeCursor?sqlite3BtreeCursorSize():0) + - 2*nField*sizeof(u32); + ROUND8(sizeof(VdbeCursor)) + 2*sizeof(u32)*nField + + (isBtreeCursor?sqlite3BtreeCursorSize():0); assert( iCurnCursor ); if( p->apCsr[iCur] ){ @@ -65847,12 +66574,9 @@ static VdbeCursor *allocateCursor( memset(pCx, 0, sizeof(VdbeCursor)); pCx->iDb = iDb; pCx->nField = nField; - if( nField ){ - pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))]; - } if( isBtreeCursor ){ pCx->pCursor = (BtCursor*) - &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)]; + &pMem->z[ROUND8(sizeof(VdbeCursor))+2*sizeof(u32)*nField]; sqlite3BtreeCursorZero(pCx->pCursor); } } @@ -66038,37 +66762,36 @@ SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){ /* ** Print the value of a register for tracing purposes: */ -static void memTracePrint(FILE *out, Mem *p){ +static void memTracePrint(Mem *p){ if( p->flags & MEM_Invalid ){ - fprintf(out, " undefined"); + printf(" undefined"); }else if( p->flags & MEM_Null ){ - fprintf(out, " NULL"); + printf(" NULL"); }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ - fprintf(out, " si:%lld", p->u.i); + printf(" si:%lld", p->u.i); }else if( p->flags & MEM_Int ){ - fprintf(out, " i:%lld", p->u.i); + printf(" i:%lld", p->u.i); #ifndef SQLITE_OMIT_FLOATING_POINT }else if( p->flags & MEM_Real ){ - fprintf(out, " r:%g", p->r); + printf(" r:%g", p->r); #endif }else if( p->flags & MEM_RowSet ){ - fprintf(out, " (rowset)"); + printf(" (rowset)"); }else{ char zBuf[200]; sqlite3VdbeMemPrettyPrint(p, zBuf); - fprintf(out, " "); - fprintf(out, "%s", zBuf); + printf(" %s", zBuf); } } -static void registerTrace(FILE *out, int iReg, Mem *p){ - fprintf(out, "REG[%d] = ", iReg); - memTracePrint(out, p); - fprintf(out, "\n"); +static void registerTrace(int iReg, Mem *p){ + printf("REG[%d] = ", iReg); + memTracePrint(p); + printf("\n"); } #endif #ifdef SQLITE_DEBUG -# define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M) +# define REGISTER_TRACE(R,M) if(db->flags&SQLITE_VdbeTrace)registerTrace(R,M) #else # define REGISTER_TRACE(R,M) #endif @@ -66265,436 +66988,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec( u64 start; /* CPU clock count at start of opcode */ int origPc; /* Program counter at start of opcode */ #endif - /******************************************************************** - ** Automatically generated code - ** - ** The following union is automatically generated by the - ** vdbe-compress.tcl script. The purpose of this union is to - ** reduce the amount of stack space required by this function. - ** See comments in the vdbe-compress.tcl script for details. - */ - union vdbeExecUnion { - struct OP_Yield_stack_vars { - int pcDest; - } aa; - struct OP_Null_stack_vars { - int cnt; - u16 nullFlag; - } ab; - struct OP_Variable_stack_vars { - Mem *pVar; /* Value being transferred */ - } ac; - struct OP_Move_stack_vars { - char *zMalloc; /* Holding variable for allocated memory */ - int n; /* Number of registers left to copy */ - int p1; /* Register to copy from */ - int p2; /* Register to copy to */ - } ad; - struct OP_Copy_stack_vars { - int n; - } ae; - struct OP_ResultRow_stack_vars { - Mem *pMem; - int i; - } af; - struct OP_Concat_stack_vars { - i64 nByte; - } ag; - struct OP_Remainder_stack_vars { - char bIntint; /* Started out as two integer operands */ - int flags; /* Combined MEM_* flags from both inputs */ - i64 iA; /* Integer value of left operand */ - i64 iB; /* Integer value of right operand */ - double rA; /* Real value of left operand */ - double rB; /* Real value of right operand */ - } ah; - struct OP_Function_stack_vars { - int i; - Mem *pArg; - sqlite3_context ctx; - sqlite3_value **apVal; - int n; - } ai; - struct OP_ShiftRight_stack_vars { - i64 iA; - u64 uA; - i64 iB; - u8 op; - } aj; - struct OP_Ge_stack_vars { - int res; /* Result of the comparison of pIn1 against pIn3 */ - char affinity; /* Affinity to use for comparison */ - u16 flags1; /* Copy of initial value of pIn1->flags */ - u16 flags3; /* Copy of initial value of pIn3->flags */ - } ak; - struct OP_Compare_stack_vars { - int n; - int i; - int p1; - int p2; - const KeyInfo *pKeyInfo; - int idx; - CollSeq *pColl; /* Collating sequence to use on this term */ - int bRev; /* True for DESCENDING sort order */ - } al; - struct OP_Or_stack_vars { - int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - } am; - struct OP_IfNot_stack_vars { - int c; - } an; - struct OP_Column_stack_vars { - u32 payloadSize; /* Number of bytes in the record */ - i64 payloadSize64; /* Number of bytes in the record */ - int p1; /* P1 value of the opcode */ - int p2; /* column number to retrieve */ - VdbeCursor *pC; /* The VDBE cursor */ - char *zRec; /* Pointer to complete record-data */ - BtCursor *pCrsr; /* The BTree cursor */ - u32 *aType; /* aType[i] holds the numeric type of the i-th column */ - u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ - int nField; /* number of fields in the record */ - int len; /* The length of the serialized data for the column */ - int i; /* Loop counter */ - char *zData; /* Part of the record being decoded */ - Mem *pDest; /* Where to write the extracted value */ - Mem sMem; /* For storing the record being decoded */ - u8 *zIdx; /* Index into header */ - u8 *zEndHdr; /* Pointer to first byte after the header */ - u32 offset; /* Offset into the data */ - u32 szField; /* Number of bytes in the content of a field */ - int szHdr; /* Size of the header size field at start of record */ - int avail; /* Number of bytes of available data */ - u32 t; /* A type code from the record header */ - Mem *pReg; /* PseudoTable input register */ - } ao; - struct OP_Affinity_stack_vars { - const char *zAffinity; /* The affinity to be applied */ - char cAff; /* A single character of affinity */ - } ap; - struct OP_MakeRecord_stack_vars { - u8 *zNewRecord; /* A buffer to hold the data for the new record */ - Mem *pRec; /* The new record */ - u64 nData; /* Number of bytes of data space */ - int nHdr; /* Number of bytes of header space */ - i64 nByte; /* Data space required for this record */ - int nZero; /* Number of zero bytes at the end of the record */ - int nVarint; /* Number of bytes in a varint */ - u32 serial_type; /* Type field */ - Mem *pData0; /* First field to be combined into the record */ - Mem *pLast; /* Last field of the record */ - int nField; /* Number of fields in the record */ - char *zAffinity; /* The affinity string for the record */ - int file_format; /* File format to use for encoding */ - int i; /* Space used in zNewRecord[] */ - int len; /* Length of a field */ - } aq; - struct OP_Count_stack_vars { - i64 nEntry; - BtCursor *pCrsr; - } ar; - struct OP_Savepoint_stack_vars { - int p1; /* Value of P1 operand */ - char *zName; /* Name of savepoint */ - int nName; - Savepoint *pNew; - Savepoint *pSavepoint; - Savepoint *pTmp; - int iSavepoint; - int ii; - } as; - struct OP_AutoCommit_stack_vars { - int desiredAutoCommit; - int iRollback; - int turnOnAC; - } at; - struct OP_Transaction_stack_vars { - Btree *pBt; - } au; - struct OP_ReadCookie_stack_vars { - int iMeta; - int iDb; - int iCookie; - } av; - struct OP_SetCookie_stack_vars { - Db *pDb; - } aw; - struct OP_VerifyCookie_stack_vars { - int iMeta; - int iGen; - Btree *pBt; - } ax; - struct OP_OpenWrite_stack_vars { - int nField; - KeyInfo *pKeyInfo; - int p2; - int iDb; - int wrFlag; - Btree *pX; - VdbeCursor *pCur; - Db *pDb; - } ay; - struct OP_OpenEphemeral_stack_vars { - VdbeCursor *pCx; - } az; - struct OP_SorterOpen_stack_vars { - VdbeCursor *pCx; - } ba; - struct OP_OpenPseudo_stack_vars { - VdbeCursor *pCx; - } bb; - struct OP_SeekGt_stack_vars { - int res; - int oc; - VdbeCursor *pC; - UnpackedRecord r; - int nField; - i64 iKey; /* The rowid we are to seek to */ - } bc; - struct OP_Seek_stack_vars { - VdbeCursor *pC; - } bd; - struct OP_Found_stack_vars { - int alreadyExists; - VdbeCursor *pC; - int res; - char *pFree; - UnpackedRecord *pIdxKey; - UnpackedRecord r; - char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; - } be; - struct OP_IsUnique_stack_vars { - u16 ii; - VdbeCursor *pCx; - BtCursor *pCrsr; - u16 nField; - Mem *aMx; - UnpackedRecord r; /* B-Tree index search key */ - i64 R; /* Rowid stored in register P3 */ - } bf; - struct OP_NotExists_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - u64 iKey; - } bg; - struct OP_NewRowid_stack_vars { - i64 v; /* The new rowid */ - VdbeCursor *pC; /* Cursor of table to get the new rowid */ - int res; /* Result of an sqlite3BtreeLast() */ - int cnt; /* Counter to limit the number of searches */ - Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ - VdbeFrame *pFrame; /* Root frame of VDBE */ - } bh; - struct OP_InsertInt_stack_vars { - Mem *pData; /* MEM cell holding data for the record to be inserted */ - Mem *pKey; /* MEM cell holding key for the record */ - i64 iKey; /* The integer ROWID or key for the record to be inserted */ - VdbeCursor *pC; /* Cursor to table into which insert is written */ - int nZero; /* Number of zero-bytes to append */ - int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */ - const char *zDb; /* database name - used by the update hook */ - const char *zTbl; /* Table name - used by the opdate hook */ - int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */ - } bi; - struct OP_Delete_stack_vars { - i64 iKey; - VdbeCursor *pC; - } bj; - struct OP_SorterCompare_stack_vars { - VdbeCursor *pC; - int res; - } bk; - struct OP_SorterData_stack_vars { - VdbeCursor *pC; - } bl; - struct OP_RowData_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - u32 n; - i64 n64; - } bm; - struct OP_Rowid_stack_vars { - VdbeCursor *pC; - i64 v; - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - } bn; - struct OP_NullRow_stack_vars { - VdbeCursor *pC; - } bo; - struct OP_Last_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - } bp; - struct OP_Rewind_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - } bq; - struct OP_Next_stack_vars { - VdbeCursor *pC; - int res; - } br; - struct OP_IdxInsert_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int nKey; - const char *zKey; - } bs; - struct OP_IdxDelete_stack_vars { - VdbeCursor *pC; - BtCursor *pCrsr; - int res; - UnpackedRecord r; - } bt; - struct OP_IdxRowid_stack_vars { - BtCursor *pCrsr; - VdbeCursor *pC; - i64 rowid; - } bu; - struct OP_IdxGE_stack_vars { - VdbeCursor *pC; - int res; - UnpackedRecord r; - } bv; - struct OP_Destroy_stack_vars { - int iMoved; - int iCnt; - Vdbe *pVdbe; - int iDb; - } bw; - struct OP_Clear_stack_vars { - int nChange; - } bx; - struct OP_CreateTable_stack_vars { - int pgno; - int flags; - Db *pDb; - } by; - struct OP_ParseSchema_stack_vars { - int iDb; - const char *zMaster; - char *zSql; - InitData initData; - } bz; - struct OP_IntegrityCk_stack_vars { - int nRoot; /* Number of tables to check. (Number of root pages.) */ - int *aRoot; /* Array of rootpage numbers for tables to be checked */ - int j; /* Loop counter */ - int nErr; /* Number of errors reported */ - char *z; /* Text of the error report */ - Mem *pnErr; /* Register keeping track of errors remaining */ - } ca; - struct OP_RowSetRead_stack_vars { - i64 val; - } cb; - struct OP_RowSetTest_stack_vars { - int iSet; - int exists; - } cc; - struct OP_Program_stack_vars { - int nMem; /* Number of memory registers for sub-program */ - int nByte; /* Bytes of runtime space required for sub-program */ - Mem *pRt; /* Register to allocate runtime space */ - Mem *pMem; /* Used to iterate through memory cells */ - Mem *pEnd; /* Last memory cell in new array */ - VdbeFrame *pFrame; /* New vdbe frame to execute in */ - SubProgram *pProgram; /* Sub-program to execute */ - void *t; /* Token identifying trigger */ - } cd; - struct OP_Param_stack_vars { - VdbeFrame *pFrame; - Mem *pIn; - } ce; - struct OP_MemMax_stack_vars { - Mem *pIn1; - VdbeFrame *pFrame; - } cf; - struct OP_AggStep_stack_vars { - int n; - int i; - Mem *pMem; - Mem *pRec; - sqlite3_context ctx; - sqlite3_value **apVal; - } cg; - struct OP_AggFinal_stack_vars { - Mem *pMem; - } ch; - struct OP_Checkpoint_stack_vars { - int i; /* Loop counter */ - int aRes[3]; /* Results */ - Mem *pMem; /* Write results here */ - } ci; - struct OP_JournalMode_stack_vars { - Btree *pBt; /* Btree to change journal mode of */ - Pager *pPager; /* Pager associated with pBt */ - int eNew; /* New journal mode */ - int eOld; /* The old journal mode */ -#ifndef SQLITE_OMIT_WAL - const char *zFilename; /* Name of database file for pPager */ -#endif - } cj; - struct OP_IncrVacuum_stack_vars { - Btree *pBt; - } ck; - struct OP_VBegin_stack_vars { - VTable *pVTab; - } cl; - struct OP_VOpen_stack_vars { - VdbeCursor *pCur; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - sqlite3_module *pModule; - } cm; - struct OP_VFilter_stack_vars { - int nArg; - int iQuery; - const sqlite3_module *pModule; - Mem *pQuery; - Mem *pArgc; - sqlite3_vtab_cursor *pVtabCursor; - sqlite3_vtab *pVtab; - VdbeCursor *pCur; - int res; - int i; - Mem **apArg; - } cn; - struct OP_VColumn_stack_vars { - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - Mem *pDest; - sqlite3_context sContext; - } co; - struct OP_VNext_stack_vars { - sqlite3_vtab *pVtab; - const sqlite3_module *pModule; - int res; - VdbeCursor *pCur; - } cp; - struct OP_VRename_stack_vars { - sqlite3_vtab *pVtab; - Mem *pName; - } cq; - struct OP_VUpdate_stack_vars { - sqlite3_vtab *pVtab; - sqlite3_module *pModule; - int nArg; - int i; - sqlite_int64 rowid; - Mem **apArg; - Mem *pX; - } cr; - struct OP_Trace_stack_vars { - char *zTrace; - char *z; - } cs; - } u; - /* End automatically generated code - ********************************************************************/ + /*** INSERT STACK UNION HERE ***/ assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */ sqlite3VdbeEnter(p); @@ -66725,13 +67019,28 @@ SQLITE_PRIVATE int sqlite3VdbeExec( #endif #ifdef SQLITE_DEBUG sqlite3BeginBenignMalloc(); - if( p->pc==0 && (p->db->flags & SQLITE_VdbeListing)!=0 ){ + if( p->pc==0 + && (p->db->flags & (SQLITE_VdbeListing|SQLITE_VdbeEQP|SQLITE_VdbeTrace))!=0 + ){ int i; - printf("VDBE Program Listing:\n"); + int once = 1; sqlite3VdbePrintSql(p); - for(i=0; inOp; i++){ - sqlite3VdbePrintOp(stdout, i, &aOp[i]); + if( p->db->flags & SQLITE_VdbeListing ){ + printf("VDBE Program Listing:\n"); + for(i=0; inOp; i++){ + sqlite3VdbePrintOp(stdout, i, &aOp[i]); + } } + if( p->db->flags & SQLITE_VdbeEQP ){ + for(i=0; inOp; i++){ + if( aOp[i].opcode==OP_Explain ){ + if( once ) printf("VDBE Query Plan:\n"); + printf("%s\n", aOp[i].p4.z); + once = 0; + } + } + } + if( p->db->flags & SQLITE_VdbeTrace ) printf("VDBE Trace:\n"); } sqlite3EndBenignMalloc(); #endif @@ -66748,12 +67057,8 @@ SQLITE_PRIVATE int sqlite3VdbeExec( /* Only allow tracing if SQLITE_DEBUG is defined. */ #ifdef SQLITE_DEBUG - if( p->trace ){ - if( pc==0 ){ - printf("VDBE Execution Trace:\n"); - sqlite3VdbePrintSql(p); - } - sqlite3VdbePrintOp(p->trace, pc, pOp); + if( db->flags & SQLITE_VdbeTrace ){ + sqlite3VdbePrintOp(stdout, pc, pOp); } #endif @@ -66884,15 +67189,12 @@ check_for_interrupt: ** a return code SQLITE_ABORT. */ if( db->xProgress!=0 && nVmStep>=nProgressLimit ){ - int prc; - prc = db->xProgress(db->pProgressArg); - if( prc!=0 ){ + assert( db->nProgressOps!=0 ); + nProgressLimit = nVmStep + db->nProgressOps - (nVmStep%db->nProgressOps); + if( db->xProgress(db->pProgressArg) ){ rc = SQLITE_INTERRUPT; goto vdbe_error_halt; } - if( db->xProgress!=0 ){ - nProgressLimit = nVmStep + db->nProgressOps - (nVmStep%db->nProgressOps); - } } #endif @@ -66932,24 +67234,24 @@ case OP_Return: { /* in1 */ ** Swap the program counter with the value in register P1. */ case OP_Yield: { /* in1 */ -#if 0 /* local variables moved into u.aa */ int pcDest; -#endif /* local variables moved into u.aa */ pIn1 = &aMem[pOp->p1]; assert( (pIn1->flags & MEM_Dyn)==0 ); pIn1->flags = MEM_Int; - u.aa.pcDest = (int)pIn1->u.i; + pcDest = (int)pIn1->u.i; pIn1->u.i = pc; REGISTER_TRACE(pOp->p1, pIn1); - pc = u.aa.pcDest; + pc = pcDest; break; } -/* Opcode: HaltIfNull P1 P2 P3 P4 * +/* Opcode: HaltIfNull P1 P2 P3 P4 P5 +** Synopsis: if r[P3] null then halt ** ** Check the value in register P3. If it is NULL then Halt using ** parameter P1, P2, and P4 as if this were a Halt instruction. If the ** value in register P3 is not NULL, then this routine is a no-op. +** The P5 parameter should be 1. */ case OP_HaltIfNull: { /* in3 */ pIn3 = &aMem[pOp->p3]; @@ -66957,7 +67259,7 @@ case OP_HaltIfNull: { /* in3 */ /* Fall through into OP_Halt */ } -/* Opcode: Halt P1 P2 * P4 * +/* Opcode: Halt P1 P2 * P4 P5 ** ** Exit immediately. All open cursors, etc are closed ** automatically. @@ -66972,11 +67274,25 @@ case OP_HaltIfNull: { /* in3 */ ** ** If P4 is not null then it is an error message string. ** +** P5 is a value between 0 and 4, inclusive, that modifies the P4 string. +** +** 0: (no change) +** 1: NOT NULL contraint failed: P4 +** 2: UNIQUE constraint failed: P4 +** 3: CHECK constraint failed: P4 +** 4: FOREIGN KEY constraint failed: P4 +** +** If P5 is not zero and P4 is NULL, then everything after the ":" is +** omitted. +** ** There is an implied "Halt 0 0 0" instruction inserted at the very end of ** every program. So a jump past the last instruction of the program ** is the same as executing Halt. */ case OP_Halt: { + const char *zType; + const char *zLogFmt; + if( pOp->p1==SQLITE_OK && p->pFrame ){ /* Halt the sub-program. Return control to the parent frame. */ VdbeFrame *pFrame = p->pFrame; @@ -66997,18 +67313,33 @@ case OP_Halt: { aMem = p->aMem; break; } - p->rc = pOp->p1; p->errorAction = (u8)pOp->p2; p->pc = pc; - if( pOp->p4.z ){ - assert( p->rc!=SQLITE_OK ); - sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z); - testcase( sqlite3GlobalConfig.xLog!=0 ); - sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z); - }else if( p->rc ){ - testcase( sqlite3GlobalConfig.xLog!=0 ); - sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql); + if( p->rc ){ + if( pOp->p5 ){ + static const char * const azType[] = { "NOT NULL", "UNIQUE", "CHECK", + "FOREIGN KEY" }; + assert( pOp->p5>=1 && pOp->p5<=4 ); + testcase( pOp->p5==1 ); + testcase( pOp->p5==2 ); + testcase( pOp->p5==3 ); + testcase( pOp->p5==4 ); + zType = azType[pOp->p5-1]; + }else{ + zType = 0; + } + assert( zType!=0 || pOp->p4.z!=0 ); + zLogFmt = "abort at %d in [%s]: %s"; + if( zType && pOp->p4.z ){ + sqlite3SetString(&p->zErrMsg, db, "%s constraint failed: %s", + zType, pOp->p4.z); + }else if( pOp->p4.z ){ + sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z); + }else{ + sqlite3SetString(&p->zErrMsg, db, "%s constraint failed", zType); + } + sqlite3_log(pOp->p1, zLogFmt, pc, p->zSql, p->zErrMsg); } rc = sqlite3VdbeHalt(p); assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR ); @@ -67023,6 +67354,7 @@ case OP_Halt: { } /* Opcode: Integer P1 P2 * * * +** Synopsis: r[P2]=P1 ** ** The 32-bit integer value P1 is written into register P2. */ @@ -67032,6 +67364,7 @@ case OP_Integer: { /* out2-prerelease */ } /* Opcode: Int64 * P2 * P4 * +** Synopsis: r[P2]=P4 ** ** P4 is a pointer to a 64-bit integer value. ** Write that value into register P2. @@ -67044,6 +67377,7 @@ case OP_Int64: { /* out2-prerelease */ #ifndef SQLITE_OMIT_FLOATING_POINT /* Opcode: Real * P2 * P4 * +** Synopsis: r[P2]=P4 ** ** P4 is a pointer to a 64-bit floating point value. ** Write that value into register P2. @@ -67057,6 +67391,7 @@ case OP_Real: { /* same as TK_FLOAT, out2-prerelease */ #endif /* Opcode: String8 * P2 * P4 * +** Synopsis: r[P2]='P4' ** ** P4 points to a nul terminated UTF-8 string. This opcode is transformed ** into an OP_String before it is executed for the first time. @@ -67091,6 +67426,7 @@ case OP_String8: { /* same as TK_STRING, out2-prerelease */ } /* Opcode: String P1 P2 * P4 * +** Synopsis: r[P2]='P4' (len=P1) ** ** The string value P4 of length P1 (bytes) is stored in register P2. */ @@ -67105,6 +67441,7 @@ case OP_String: { /* out2-prerelease */ } /* Opcode: Null P1 P2 P3 * * +** Synopsis: r[P2..P3]=NULL ** ** Write a NULL into registers P2. If P3 greater than P2, then also write ** NULL into register P3 and every register in between P2 and P3. If P3 @@ -67116,25 +67453,24 @@ case OP_String: { /* out2-prerelease */ ** OP_Ne or OP_Eq. */ case OP_Null: { /* out2-prerelease */ -#if 0 /* local variables moved into u.ab */ int cnt; u16 nullFlag; -#endif /* local variables moved into u.ab */ - u.ab.cnt = pOp->p3-pOp->p2; + cnt = pOp->p3-pOp->p2; assert( pOp->p3<=(p->nMem-p->nCursor) ); - pOut->flags = u.ab.nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; - while( u.ab.cnt>0 ){ + pOut->flags = nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; + while( cnt>0 ){ pOut++; memAboutToChange(p, pOut); VdbeMemRelease(pOut); - pOut->flags = u.ab.nullFlag; - u.ab.cnt--; + pOut->flags = nullFlag; + cnt--; } break; } /* Opcode: Blob P1 P2 * P4 +** Synopsis: r[P2]=P4 (len=P1) ** ** P4 points to a blob of data P1 bytes long. Store this ** blob in register P2. @@ -67148,6 +67484,7 @@ case OP_Blob: { /* out2-prerelease */ } /* Opcode: Variable P1 P2 * P4 * +** Synopsis: r[P2]=parameter(P1,P4) ** ** Transfer the values of bound parameter P1 into register P2 ** @@ -67155,22 +67492,21 @@ case OP_Blob: { /* out2-prerelease */ ** The P4 value is used by sqlite3_bind_parameter_name(). */ case OP_Variable: { /* out2-prerelease */ -#if 0 /* local variables moved into u.ac */ Mem *pVar; /* Value being transferred */ -#endif /* local variables moved into u.ac */ assert( pOp->p1>0 && pOp->p1<=p->nVar ); assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] ); - u.ac.pVar = &p->aVar[pOp->p1 - 1]; - if( sqlite3VdbeMemTooBig(u.ac.pVar) ){ + pVar = &p->aVar[pOp->p1 - 1]; + if( sqlite3VdbeMemTooBig(pVar) ){ goto too_big; } - sqlite3VdbeMemShallowCopy(pOut, u.ac.pVar, MEM_Static); + sqlite3VdbeMemShallowCopy(pOut, pVar, MEM_Static); UPDATE_MAX_BLOBSIZE(pOut); break; } /* Opcode: Move P1 P2 P3 * * +** Synopsis: r[P2@P3]=r[P1@P3] ** ** Move the values in register P1..P1+P3 over into ** registers P2..P2+P3. Registers P1..P1+P3 are @@ -67178,43 +67514,42 @@ case OP_Variable: { /* out2-prerelease */ ** P1..P1+P3 and P2..P2+P3 to overlap. */ case OP_Move: { -#if 0 /* local variables moved into u.ad */ char *zMalloc; /* Holding variable for allocated memory */ int n; /* Number of registers left to copy */ int p1; /* Register to copy from */ int p2; /* Register to copy to */ -#endif /* local variables moved into u.ad */ - u.ad.n = pOp->p3 + 1; - u.ad.p1 = pOp->p1; - u.ad.p2 = pOp->p2; - assert( u.ad.n>0 && u.ad.p1>0 && u.ad.p2>0 ); - assert( u.ad.p1+u.ad.n<=u.ad.p2 || u.ad.p2+u.ad.n<=u.ad.p1 ); + n = pOp->p3; + p1 = pOp->p1; + p2 = pOp->p2; + assert( n>=0 && p1>0 && p2>0 ); + assert( p1+n<=p2 || p2+n<=p1 ); - pIn1 = &aMem[u.ad.p1]; - pOut = &aMem[u.ad.p2]; - while( u.ad.n-- ){ + pIn1 = &aMem[p1]; + pOut = &aMem[p2]; + do{ assert( pOut<=&aMem[(p->nMem-p->nCursor)] ); assert( pIn1<=&aMem[(p->nMem-p->nCursor)] ); assert( memIsValid(pIn1) ); memAboutToChange(p, pOut); - u.ad.zMalloc = pOut->zMalloc; + zMalloc = pOut->zMalloc; pOut->zMalloc = 0; sqlite3VdbeMemMove(pOut, pIn1); #ifdef SQLITE_DEBUG - if( pOut->pScopyFrom>=&aMem[u.ad.p1] && pOut->pScopyFrom<&aMem[u.ad.p1+pOp->p3] ){ - pOut->pScopyFrom += u.ad.p1 - pOp->p2; + if( pOut->pScopyFrom>=&aMem[p1] && pOut->pScopyFrom<&aMem[p1+pOp->p3] ){ + pOut->pScopyFrom += p1 - pOp->p2; } #endif - pIn1->zMalloc = u.ad.zMalloc; - REGISTER_TRACE(u.ad.p2++, pOut); + pIn1->zMalloc = zMalloc; + REGISTER_TRACE(p2++, pOut); pIn1++; pOut++; - } + }while( n-- ); break; } /* Opcode: Copy P1 P2 P3 * * +** Synopsis: r[P2@P3+1]=r[P1@P3+1] ** ** Make a copy of registers P1..P1+P3 into registers P2..P2+P3. ** @@ -67222,11 +67557,9 @@ case OP_Move: { ** is made of any string or blob constant. See also OP_SCopy. */ case OP_Copy: { -#if 0 /* local variables moved into u.ae */ int n; -#endif /* local variables moved into u.ae */ - u.ae.n = pOp->p3; + n = pOp->p3; pIn1 = &aMem[pOp->p1]; pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); @@ -67236,8 +67569,8 @@ case OP_Copy: { #ifdef SQLITE_DEBUG pOut->pScopyFrom = 0; #endif - REGISTER_TRACE(pOp->p2+pOp->p3-u.ae.n, pOut); - if( (u.ae.n--)==0 ) break; + REGISTER_TRACE(pOp->p2+pOp->p3-n, pOut); + if( (n--)==0 ) break; pOut++; pIn1++; } @@ -67245,6 +67578,7 @@ case OP_Copy: { } /* Opcode: SCopy P1 P2 * * * +** Synopsis: r[P2]=r[P1] ** ** Make a shallow copy of register P1 into register P2. ** @@ -67256,7 +67590,7 @@ case OP_Copy: { ** during the lifetime of the copy. Use OP_Copy to make a complete ** copy. */ -case OP_SCopy: { /* in1, out2 */ +case OP_SCopy: { /* out2 */ pIn1 = &aMem[pOp->p1]; pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); @@ -67264,11 +67598,11 @@ case OP_SCopy: { /* in1, out2 */ #ifdef SQLITE_DEBUG if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1; #endif - REGISTER_TRACE(pOp->p2, pOut); break; } /* Opcode: ResultRow P1 P2 * * * +** Synopsis: output=r[P1@P2] ** ** The registers P1 through P1+P2-1 contain a single row of ** results. This opcode causes the sqlite3_step() call to terminate @@ -67277,14 +67611,24 @@ case OP_SCopy: { /* in1, out2 */ ** row. */ case OP_ResultRow: { -#if 0 /* local variables moved into u.af */ Mem *pMem; int i; -#endif /* local variables moved into u.af */ assert( p->nResColumn==pOp->p2 ); assert( pOp->p1>0 ); assert( pOp->p1+pOp->p2<=(p->nMem-p->nCursor)+1 ); +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + /* Run the progress counter just before returning. + */ + if( db->xProgress!=0 + && nVmStep>=nProgressLimit + && db->xProgress(db->pProgressArg)!=0 + ){ + rc = SQLITE_INTERRUPT; + goto vdbe_error_halt; + } +#endif + /* If this statement has violated immediate foreign key constraints, do ** not return the number of rows modified. And do not RELEASE the statement ** transaction. It needs to be rolled back. */ @@ -67294,8 +67638,8 @@ case OP_ResultRow: { break; } - /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then - ** DML statements invoke this opcode to return the number of rows + /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then + ** DML statements invoke this opcode to return the number of rows ** modified to the user. This is the only way that a VM that ** opens a statement transaction may invoke this opcode. ** @@ -67322,15 +67666,15 @@ case OP_ResultRow: { ** and have an assigned type. The results are de-ephemeralized as ** a side effect. */ - u.af.pMem = p->pResultSet = &aMem[pOp->p1]; - for(u.af.i=0; u.af.ip2; u.af.i++){ - assert( memIsValid(&u.af.pMem[u.af.i]) ); - Deephemeralize(&u.af.pMem[u.af.i]); - assert( (u.af.pMem[u.af.i].flags & MEM_Ephem)==0 - || (u.af.pMem[u.af.i].flags & (MEM_Str|MEM_Blob))==0 ); - sqlite3VdbeMemNulTerminate(&u.af.pMem[u.af.i]); - sqlite3VdbeMemStoreType(&u.af.pMem[u.af.i]); - REGISTER_TRACE(pOp->p1+u.af.i, &u.af.pMem[u.af.i]); + pMem = p->pResultSet = &aMem[pOp->p1]; + for(i=0; ip2; i++){ + assert( memIsValid(&pMem[i]) ); + Deephemeralize(&pMem[i]); + assert( (pMem[i].flags & MEM_Ephem)==0 + || (pMem[i].flags & (MEM_Str|MEM_Blob))==0 ); + sqlite3VdbeMemNulTerminate(&pMem[i]); + sqlite3VdbeMemStoreType(&pMem[i]); + REGISTER_TRACE(pOp->p1+i, &pMem[i]); } if( db->mallocFailed ) goto no_mem; @@ -67342,6 +67686,7 @@ case OP_ResultRow: { } /* Opcode: Concat P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]+r[P1] ** ** Add the text in register P1 onto the end of the text in ** register P2 and store the result in register P3. @@ -67354,9 +67699,7 @@ case OP_ResultRow: { ** to avoid a memcpy(). */ case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ -#if 0 /* local variables moved into u.ag */ i64 nByte; -#endif /* local variables moved into u.ag */ pIn1 = &aMem[pOp->p1]; pIn2 = &aMem[pOp->p2]; @@ -67369,34 +67712,36 @@ case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem; Stringify(pIn1, encoding); Stringify(pIn2, encoding); - u.ag.nByte = pIn1->n + pIn2->n; - if( u.ag.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + nByte = pIn1->n + pIn2->n; + if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } MemSetTypeFlag(pOut, MEM_Str); - if( sqlite3VdbeMemGrow(pOut, (int)u.ag.nByte+2, pOut==pIn2) ){ + if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){ goto no_mem; } if( pOut!=pIn2 ){ memcpy(pOut->z, pIn2->z, pIn2->n); } memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); - pOut->z[u.ag.nByte] = 0; - pOut->z[u.ag.nByte+1] = 0; + pOut->z[nByte]=0; + pOut->z[nByte+1] = 0; pOut->flags |= MEM_Term; - pOut->n = (int)u.ag.nByte; + pOut->n = (int)nByte; pOut->enc = encoding; UPDATE_MAX_BLOBSIZE(pOut); break; } /* Opcode: Add P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]+r[P2] ** ** Add the value in register P1 to the value in register P2 ** and store the result in register P3. ** If either input is NULL, the result is NULL. */ /* Opcode: Multiply P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]*r[P2] ** ** ** Multiply the value in register P1 by the value in register P2 @@ -67404,12 +67749,14 @@ case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ ** If either input is NULL, the result is NULL. */ /* Opcode: Subtract P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]-r[P1] ** ** Subtract the value in register P1 from the value in register P2 ** and store the result in register P3. ** If either input is NULL, the result is NULL. */ /* Opcode: Divide P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]/r[P1] ** ** Divide the value in register P1 by the value in register P2 ** and store the result in register P3 (P3=P2/P1). If the value in @@ -67417,10 +67764,11 @@ case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ ** NULL, the result is NULL. */ /* Opcode: Remainder P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]%r[P1] ** -** Compute the remainder after integer division of the value in -** register P1 by the value in register P2 and store the result in P3. -** If the value in register P2 is zero the result is NULL. +** Compute the remainder after integer register P2 is divided by +** register P1 and store the result in register P3. +** If the value in register P1 is zero the result is NULL. ** If either operand is NULL, the result is NULL. */ case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ @@ -67428,79 +67776,77 @@ case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ -#if 0 /* local variables moved into u.ah */ char bIntint; /* Started out as two integer operands */ int flags; /* Combined MEM_* flags from both inputs */ i64 iA; /* Integer value of left operand */ i64 iB; /* Integer value of right operand */ double rA; /* Real value of left operand */ double rB; /* Real value of right operand */ -#endif /* local variables moved into u.ah */ pIn1 = &aMem[pOp->p1]; applyNumericAffinity(pIn1); pIn2 = &aMem[pOp->p2]; applyNumericAffinity(pIn2); pOut = &aMem[pOp->p3]; - u.ah.flags = pIn1->flags | pIn2->flags; - if( (u.ah.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; + flags = pIn1->flags | pIn2->flags; + if( (flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ - u.ah.iA = pIn1->u.i; - u.ah.iB = pIn2->u.i; - u.ah.bIntint = 1; + iA = pIn1->u.i; + iB = pIn2->u.i; + bIntint = 1; switch( pOp->opcode ){ - case OP_Add: if( sqlite3AddInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; - case OP_Subtract: if( sqlite3SubInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; - case OP_Multiply: if( sqlite3MulInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; + case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break; + case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break; + case OP_Multiply: if( sqlite3MulInt64(&iB,iA) ) goto fp_math; break; case OP_Divide: { - if( u.ah.iA==0 ) goto arithmetic_result_is_null; - if( u.ah.iA==-1 && u.ah.iB==SMALLEST_INT64 ) goto fp_math; - u.ah.iB /= u.ah.iA; + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 && iB==SMALLEST_INT64 ) goto fp_math; + iB /= iA; break; } default: { - if( u.ah.iA==0 ) goto arithmetic_result_is_null; - if( u.ah.iA==-1 ) u.ah.iA = 1; - u.ah.iB %= u.ah.iA; + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 ) iA = 1; + iB %= iA; break; } } - pOut->u.i = u.ah.iB; + pOut->u.i = iB; MemSetTypeFlag(pOut, MEM_Int); }else{ - u.ah.bIntint = 0; + bIntint = 0; fp_math: - u.ah.rA = sqlite3VdbeRealValue(pIn1); - u.ah.rB = sqlite3VdbeRealValue(pIn2); + rA = sqlite3VdbeRealValue(pIn1); + rB = sqlite3VdbeRealValue(pIn2); switch( pOp->opcode ){ - case OP_Add: u.ah.rB += u.ah.rA; break; - case OP_Subtract: u.ah.rB -= u.ah.rA; break; - case OP_Multiply: u.ah.rB *= u.ah.rA; break; + case OP_Add: rB += rA; break; + case OP_Subtract: rB -= rA; break; + case OP_Multiply: rB *= rA; break; case OP_Divide: { /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - if( u.ah.rA==(double)0 ) goto arithmetic_result_is_null; - u.ah.rB /= u.ah.rA; + if( rA==(double)0 ) goto arithmetic_result_is_null; + rB /= rA; break; } default: { - u.ah.iA = (i64)u.ah.rA; - u.ah.iB = (i64)u.ah.rB; - if( u.ah.iA==0 ) goto arithmetic_result_is_null; - if( u.ah.iA==-1 ) u.ah.iA = 1; - u.ah.rB = (double)(u.ah.iB % u.ah.iA); + iA = (i64)rA; + iB = (i64)rB; + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 ) iA = 1; + rB = (double)(iB % iA); break; } } #ifdef SQLITE_OMIT_FLOATING_POINT - pOut->u.i = u.ah.rB; + pOut->u.i = rB; MemSetTypeFlag(pOut, MEM_Int); #else - if( sqlite3IsNaN(u.ah.rB) ){ + if( sqlite3IsNaN(rB) ){ goto arithmetic_result_is_null; } - pOut->r = u.ah.rB; + pOut->r = rB; MemSetTypeFlag(pOut, MEM_Real); - if( (u.ah.flags & MEM_Real)==0 && !u.ah.bIntint ){ + if( (flags & MEM_Real)==0 && !bIntint ){ sqlite3VdbeIntegerAffinity(pOut); } #endif @@ -67536,6 +67882,7 @@ case OP_CollSeq: { } /* Opcode: Function P1 P2 P3 P4 P5 +** Synopsis: r[P3]=func(r[P2@P5]) ** ** Invoke a user function (P4 is a pointer to a Function structure that ** defines the function) with P5 arguments taken from register P2 and @@ -67552,57 +67899,54 @@ case OP_CollSeq: { ** See also: AggStep and AggFinal */ case OP_Function: { -#if 0 /* local variables moved into u.ai */ int i; Mem *pArg; sqlite3_context ctx; sqlite3_value **apVal; int n; -#endif /* local variables moved into u.ai */ - u.ai.n = pOp->p5; - u.ai.apVal = p->apArg; - assert( u.ai.apVal || u.ai.n==0 ); + n = pOp->p5; + apVal = p->apArg; + assert( apVal || n==0 ); assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); pOut = &aMem[pOp->p3]; memAboutToChange(p, pOut); - assert( u.ai.n==0 || (pOp->p2>0 && pOp->p2+u.ai.n<=(p->nMem-p->nCursor)+1) ); - assert( pOp->p3p2 || pOp->p3>=pOp->p2+u.ai.n ); - u.ai.pArg = &aMem[pOp->p2]; - for(u.ai.i=0; u.ai.ip2+u.ai.i, u.ai.pArg); + assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) ); + assert( pOp->p3p2 || pOp->p3>=pOp->p2+n ); + pArg = &aMem[pOp->p2]; + for(i=0; ip2+i, pArg); } assert( pOp->p4type==P4_FUNCDEF ); - u.ai.ctx.pFunc = pOp->p4.pFunc; - u.ai.ctx.s.flags = MEM_Null; - u.ai.ctx.s.db = db; - u.ai.ctx.s.xDel = 0; - u.ai.ctx.s.zMalloc = 0; - u.ai.ctx.iOp = pc; - u.ai.ctx.pVdbe = p; + ctx.pFunc = pOp->p4.pFunc; + ctx.iOp = pc; + ctx.pVdbe = p; /* The output cell may already have a buffer allocated. Move - ** the pointer to u.ai.ctx.s so in case the user-function can use + ** the pointer to ctx.s so in case the user-function can use ** the already allocated buffer instead of allocating a new one. */ - sqlite3VdbeMemMove(&u.ai.ctx.s, pOut); - MemSetTypeFlag(&u.ai.ctx.s, MEM_Null); + memcpy(&ctx.s, pOut, sizeof(Mem)); + pOut->flags = MEM_Null; + pOut->xDel = 0; + pOut->zMalloc = 0; + MemSetTypeFlag(&ctx.s, MEM_Null); - u.ai.ctx.fErrorOrAux = 0; - if( u.ai.ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + ctx.fErrorOrAux = 0; + if( ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ assert( pOp>aOp ); assert( pOp[-1].p4type==P4_COLLSEQ ); assert( pOp[-1].opcode==OP_CollSeq ); - u.ai.ctx.pColl = pOp[-1].p4.pColl; + ctx.pColl = pOp[-1].p4.pColl; } db->lastRowid = lastRowid; - (*u.ai.ctx.pFunc->xFunc)(&u.ai.ctx, u.ai.n, u.ai.apVal); /* IMP: R-24505-23230 */ + (*ctx.pFunc->xFunc)(&ctx, n, apVal); /* IMP: R-24505-23230 */ lastRowid = db->lastRowid; if( db->mallocFailed ){ @@ -67611,22 +67955,23 @@ case OP_Function: { ** to return a value. The following call releases any resources ** associated with such a value. */ - sqlite3VdbeMemRelease(&u.ai.ctx.s); + sqlite3VdbeMemRelease(&ctx.s); goto no_mem; } /* If the function returned an error, throw an exception */ - if( u.ai.ctx.fErrorOrAux ){ - if( u.ai.ctx.isError ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ai.ctx.s)); - rc = u.ai.ctx.isError; + if( ctx.fErrorOrAux ){ + if( ctx.isError ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s)); + rc = ctx.isError; } sqlite3VdbeDeleteAuxData(p, pc, pOp->p1); } /* Copy the result of the function into register P3 */ - sqlite3VdbeChangeEncoding(&u.ai.ctx.s, encoding); - sqlite3VdbeMemMove(pOut, &u.ai.ctx.s); + sqlite3VdbeChangeEncoding(&ctx.s, encoding); + assert( pOut->flags==MEM_Null ); + memcpy(pOut, &ctx.s, sizeof(Mem)); if( sqlite3VdbeMemTooBig(pOut) ){ goto too_big; } @@ -67645,18 +67990,21 @@ case OP_Function: { } /* Opcode: BitAnd P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]&r[P2] ** ** Take the bit-wise AND of the values in register P1 and P2 and ** store the result in register P3. ** If either input is NULL, the result is NULL. */ /* Opcode: BitOr P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]|r[P2] ** ** Take the bit-wise OR of the values in register P1 and P2 and ** store the result in register P3. ** If either input is NULL, the result is NULL. */ /* Opcode: ShiftLeft P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]<>r[P1] ** ** Shift the integer value in register P2 to the right by the ** number of bits specified by the integer in register P1. @@ -67674,12 +68023,10 @@ case OP_BitAnd: /* same as TK_BITAND, in1, in2, out3 */ case OP_BitOr: /* same as TK_BITOR, in1, in2, out3 */ case OP_ShiftLeft: /* same as TK_LSHIFT, in1, in2, out3 */ case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */ -#if 0 /* local variables moved into u.aj */ i64 iA; u64 uA; i64 iB; u8 op; -#endif /* local variables moved into u.aj */ pIn1 = &aMem[pOp->p1]; pIn2 = &aMem[pOp->p2]; @@ -67688,43 +68035,44 @@ case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */ sqlite3VdbeMemSetNull(pOut); break; } - u.aj.iA = sqlite3VdbeIntValue(pIn2); - u.aj.iB = sqlite3VdbeIntValue(pIn1); - u.aj.op = pOp->opcode; - if( u.aj.op==OP_BitAnd ){ - u.aj.iA &= u.aj.iB; - }else if( u.aj.op==OP_BitOr ){ - u.aj.iA |= u.aj.iB; - }else if( u.aj.iB!=0 ){ - assert( u.aj.op==OP_ShiftRight || u.aj.op==OP_ShiftLeft ); + iA = sqlite3VdbeIntValue(pIn2); + iB = sqlite3VdbeIntValue(pIn1); + op = pOp->opcode; + if( op==OP_BitAnd ){ + iA &= iB; + }else if( op==OP_BitOr ){ + iA |= iB; + }else if( iB!=0 ){ + assert( op==OP_ShiftRight || op==OP_ShiftLeft ); /* If shifting by a negative amount, shift in the other direction */ - if( u.aj.iB<0 ){ + if( iB<0 ){ assert( OP_ShiftRight==OP_ShiftLeft+1 ); - u.aj.op = 2*OP_ShiftLeft + 1 - u.aj.op; - u.aj.iB = u.aj.iB>(-64) ? -u.aj.iB : 64; + op = 2*OP_ShiftLeft + 1 - op; + iB = iB>(-64) ? -iB : 64; } - if( u.aj.iB>=64 ){ - u.aj.iA = (u.aj.iA>=0 || u.aj.op==OP_ShiftLeft) ? 0 : -1; + if( iB>=64 ){ + iA = (iA>=0 || op==OP_ShiftLeft) ? 0 : -1; }else{ - memcpy(&u.aj.uA, &u.aj.iA, sizeof(u.aj.uA)); - if( u.aj.op==OP_ShiftLeft ){ - u.aj.uA <<= u.aj.iB; + memcpy(&uA, &iA, sizeof(uA)); + if( op==OP_ShiftLeft ){ + uA <<= iB; }else{ - u.aj.uA >>= u.aj.iB; + uA >>= iB; /* Sign-extend on a right shift of a negative number */ - if( u.aj.iA<0 ) u.aj.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.aj.iB); + if( iA<0 ) uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-iB); } - memcpy(&u.aj.iA, &u.aj.uA, sizeof(u.aj.iA)); + memcpy(&iA, &uA, sizeof(iA)); } } - pOut->u.i = u.aj.iA; + pOut->u.i = iA; MemSetTypeFlag(pOut, MEM_Int); break; } /* Opcode: AddImm P1 P2 * * * +** Synopsis: r[P1]=r[P1]+P2 ** ** Add the constant P2 to the value in register P1. ** The result is always an integer. @@ -67748,17 +68096,19 @@ case OP_AddImm: { /* in1 */ */ case OP_MustBeInt: { /* jump, in1 */ pIn1 = &aMem[pOp->p1]; - applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); if( (pIn1->flags & MEM_Int)==0 ){ - if( pOp->p2==0 ){ - rc = SQLITE_MISMATCH; - goto abort_due_to_error; - }else{ - pc = pOp->p2 - 1; + applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); + if( (pIn1->flags & MEM_Int)==0 ){ + if( pOp->p2==0 ){ + rc = SQLITE_MISMATCH; + goto abort_due_to_error; + }else{ + pc = pOp->p2 - 1; + break; + } } - }else{ - MemSetTypeFlag(pIn1, MEM_Int); } + MemSetTypeFlag(pIn1, MEM_Int); break; } @@ -67883,6 +68233,7 @@ case OP_ToReal: { /* same as TK_TO_REAL, in1 */ #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */ /* Opcode: Lt P1 P2 P3 P4 P5 +** Synopsis: if r[P1]r[P3] goto P2 ** ** This works just like the Lt opcode except that the jump is taken if ** the content of register P3 is greater than the content of ** register P1. See the Lt opcode for additional information. */ /* Opcode: Ge P1 P2 P3 P4 P5 +** Synopsis: if r[P1]>=r[P3] goto P2 ** ** This works just like the Lt opcode except that the jump is taken if ** the content of register P3 is greater than or equal to the content of @@ -67964,18 +68320,16 @@ case OP_Lt: /* same as TK_LT, jump, in1, in3 */ case OP_Le: /* same as TK_LE, jump, in1, in3 */ case OP_Gt: /* same as TK_GT, jump, in1, in3 */ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ -#if 0 /* local variables moved into u.ak */ int res; /* Result of the comparison of pIn1 against pIn3 */ char affinity; /* Affinity to use for comparison */ u16 flags1; /* Copy of initial value of pIn1->flags */ u16 flags3; /* Copy of initial value of pIn3->flags */ -#endif /* local variables moved into u.ak */ pIn1 = &aMem[pOp->p1]; pIn3 = &aMem[pOp->p3]; - u.ak.flags1 = pIn1->flags; - u.ak.flags3 = pIn3->flags; - if( (u.ak.flags1 | u.ak.flags3)&MEM_Null ){ + flags1 = pIn1->flags; + flags3 = pIn3->flags; + if( (flags1 | flags3)&MEM_Null ){ /* One or both operands are NULL */ if( pOp->p5 & SQLITE_NULLEQ ){ /* If SQLITE_NULLEQ is set (which will only happen if the operator is @@ -67983,14 +68337,14 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ ** or not both operands are null. */ assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne ); - assert( (u.ak.flags1 & MEM_Cleared)==0 ); - if( (u.ak.flags1&MEM_Null)!=0 - && (u.ak.flags3&MEM_Null)!=0 - && (u.ak.flags3&MEM_Cleared)==0 + assert( (flags1 & MEM_Cleared)==0 ); + if( (flags1&MEM_Null)!=0 + && (flags3&MEM_Null)!=0 + && (flags3&MEM_Cleared)==0 ){ - u.ak.res = 0; /* Results are equal */ + res = 0; /* Results are equal */ }else{ - u.ak.res = 1; /* Results are not equal */ + res = 1; /* Results are not equal */ } }else{ /* SQLITE_NULLEQ is clear and at least one operand is NULL, @@ -68008,40 +68362,40 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ } }else{ /* Neither operand is NULL. Do a comparison. */ - u.ak.affinity = pOp->p5 & SQLITE_AFF_MASK; - if( u.ak.affinity ){ - applyAffinity(pIn1, u.ak.affinity, encoding); - applyAffinity(pIn3, u.ak.affinity, encoding); + affinity = pOp->p5 & SQLITE_AFF_MASK; + if( affinity ){ + applyAffinity(pIn1, affinity, encoding); + applyAffinity(pIn3, affinity, encoding); if( db->mallocFailed ) goto no_mem; } assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); ExpandBlob(pIn1); ExpandBlob(pIn3); - u.ak.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); + res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); } switch( pOp->opcode ){ - case OP_Eq: u.ak.res = u.ak.res==0; break; - case OP_Ne: u.ak.res = u.ak.res!=0; break; - case OP_Lt: u.ak.res = u.ak.res<0; break; - case OP_Le: u.ak.res = u.ak.res<=0; break; - case OP_Gt: u.ak.res = u.ak.res>0; break; - default: u.ak.res = u.ak.res>=0; break; + case OP_Eq: res = res==0; break; + case OP_Ne: res = res!=0; break; + case OP_Lt: res = res<0; break; + case OP_Le: res = res<=0; break; + case OP_Gt: res = res>0; break; + default: res = res>=0; break; } if( pOp->p5 & SQLITE_STOREP2 ){ pOut = &aMem[pOp->p2]; memAboutToChange(p, pOut); MemSetTypeFlag(pOut, MEM_Int); - pOut->u.i = u.ak.res; + pOut->u.i = res; REGISTER_TRACE(pOp->p2, pOut); - }else if( u.ak.res ){ + }else if( res ){ pc = pOp->p2-1; } /* Undo any changes made by applyAffinity() to the input registers. */ - pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.ak.flags1&MEM_TypeMask); - pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.ak.flags3&MEM_TypeMask); + pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (flags1&MEM_TypeMask); + pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (flags3&MEM_TypeMask); break; } @@ -68081,7 +68435,6 @@ case OP_Permutation: { ** and strings are less than blobs. */ case OP_Compare: { -#if 0 /* local variables moved into u.al */ int n; int i; int p1; @@ -68090,38 +68443,37 @@ case OP_Compare: { int idx; CollSeq *pColl; /* Collating sequence to use on this term */ int bRev; /* True for DESCENDING sort order */ -#endif /* local variables moved into u.al */ if( (pOp->p5 & OPFLAG_PERMUTE)==0 ) aPermute = 0; - u.al.n = pOp->p3; - u.al.pKeyInfo = pOp->p4.pKeyInfo; - assert( u.al.n>0 ); - assert( u.al.pKeyInfo!=0 ); - u.al.p1 = pOp->p1; - u.al.p2 = pOp->p2; + n = pOp->p3; + pKeyInfo = pOp->p4.pKeyInfo; + assert( n>0 ); + assert( pKeyInfo!=0 ); + p1 = pOp->p1; + p2 = pOp->p2; #if SQLITE_DEBUG if( aPermute ){ int k, mx = 0; - for(k=0; kmx ) mx = aPermute[k]; - assert( u.al.p1>0 && u.al.p1+mx<=(p->nMem-p->nCursor)+1 ); - assert( u.al.p2>0 && u.al.p2+mx<=(p->nMem-p->nCursor)+1 ); + for(k=0; kmx ) mx = aPermute[k]; + assert( p1>0 && p1+mx<=(p->nMem-p->nCursor)+1 ); + assert( p2>0 && p2+mx<=(p->nMem-p->nCursor)+1 ); }else{ - assert( u.al.p1>0 && u.al.p1+u.al.n<=(p->nMem-p->nCursor)+1 ); - assert( u.al.p2>0 && u.al.p2+u.al.n<=(p->nMem-p->nCursor)+1 ); + assert( p1>0 && p1+n<=(p->nMem-p->nCursor)+1 ); + assert( p2>0 && p2+n<=(p->nMem-p->nCursor)+1 ); } #endif /* SQLITE_DEBUG */ - for(u.al.i=0; u.al.inField ); - u.al.pColl = u.al.pKeyInfo->aColl[u.al.i]; - u.al.bRev = u.al.pKeyInfo->aSortOrder[u.al.i]; - iCompare = sqlite3MemCompare(&aMem[u.al.p1+u.al.idx], &aMem[u.al.p2+u.al.idx], u.al.pColl); + for(i=0; inField ); + pColl = pKeyInfo->aColl[i]; + bRev = pKeyInfo->aSortOrder[i]; + iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl); if( iCompare ){ - if( u.al.bRev ) iCompare = -iCompare; + if( bRev ) iCompare = -iCompare; break; } } @@ -68147,6 +68499,7 @@ case OP_Jump: { /* jump */ } /* Opcode: And P1 P2 P3 * * +** Synopsis: r[P3]=(r[P1] && r[P2]) ** ** Take the logical AND of the values in registers P1 and P2 and ** write the result into register P3. @@ -68156,6 +68509,7 @@ case OP_Jump: { /* jump */ ** a NULL output. */ /* Opcode: Or P1 P2 P3 * * +** Synopsis: r[P3]=(r[P1] || r[P2]) ** ** Take the logical OR of the values in register P1 and P2 and ** store the answer in register P3. @@ -68166,41 +68520,40 @@ case OP_Jump: { /* jump */ */ case OP_And: /* same as TK_AND, in1, in2, out3 */ case OP_Or: { /* same as TK_OR, in1, in2, out3 */ -#if 0 /* local variables moved into u.am */ int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ -#endif /* local variables moved into u.am */ pIn1 = &aMem[pOp->p1]; if( pIn1->flags & MEM_Null ){ - u.am.v1 = 2; + v1 = 2; }else{ - u.am.v1 = sqlite3VdbeIntValue(pIn1)!=0; + v1 = sqlite3VdbeIntValue(pIn1)!=0; } pIn2 = &aMem[pOp->p2]; if( pIn2->flags & MEM_Null ){ - u.am.v2 = 2; + v2 = 2; }else{ - u.am.v2 = sqlite3VdbeIntValue(pIn2)!=0; + v2 = sqlite3VdbeIntValue(pIn2)!=0; } if( pOp->opcode==OP_And ){ static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 }; - u.am.v1 = and_logic[u.am.v1*3+u.am.v2]; + v1 = and_logic[v1*3+v2]; }else{ static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 }; - u.am.v1 = or_logic[u.am.v1*3+u.am.v2]; + v1 = or_logic[v1*3+v2]; } pOut = &aMem[pOp->p3]; - if( u.am.v1==2 ){ + if( v1==2 ){ MemSetTypeFlag(pOut, MEM_Null); }else{ - pOut->u.i = u.am.v1; + pOut->u.i = v1; MemSetTypeFlag(pOut, MEM_Int); } break; } /* Opcode: Not P1 P2 * * * +** Synopsis: r[P2]= !r[P1] ** ** Interpret the value in register P1 as a boolean value. Store the ** boolean complement in register P2. If the value in register P1 is @@ -68218,6 +68571,7 @@ case OP_Not: { /* same as TK_NOT, in1, out2 */ } /* Opcode: BitNot P1 P2 * * * +** Synopsis: r[P1]= ~r[P1] ** ** Interpret the content of register P1 as an integer. Store the ** ones-complement of the P1 value into register P2. If P1 holds @@ -68263,27 +68617,26 @@ case OP_Once: { /* jump */ */ case OP_If: /* jump, in1 */ case OP_IfNot: { /* jump, in1 */ -#if 0 /* local variables moved into u.an */ int c; -#endif /* local variables moved into u.an */ pIn1 = &aMem[pOp->p1]; if( pIn1->flags & MEM_Null ){ - u.an.c = pOp->p3; + c = pOp->p3; }else{ #ifdef SQLITE_OMIT_FLOATING_POINT - u.an.c = sqlite3VdbeIntValue(pIn1)!=0; + c = sqlite3VdbeIntValue(pIn1)!=0; #else - u.an.c = sqlite3VdbeRealValue(pIn1)!=0.0; + c = sqlite3VdbeRealValue(pIn1)!=0.0; #endif - if( pOp->opcode==OP_IfNot ) u.an.c = !u.an.c; + if( pOp->opcode==OP_IfNot ) c = !c; } - if( u.an.c ){ + if( c ){ pc = pOp->p2-1; } break; } /* Opcode: IsNull P1 P2 * * * +** Synopsis: if r[P1]==NULL goto P2 ** ** Jump to P2 if the value in register P1 is NULL. */ @@ -68296,6 +68649,7 @@ case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ } /* Opcode: NotNull P1 P2 * * * +** Synopsis: if r[P1]!=NULL goto P2 ** ** Jump to P2 if the value in register P1 is not NULL. */ @@ -68308,6 +68662,7 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ } /* Opcode: Column P1 P2 P3 P4 P5 +** Synopsis: r[P3]=PX ** ** Interpret the data that cursor P1 points to as a structure built using ** the MakeRecord instruction. (See the MakeRecord opcode for additional @@ -68332,155 +68687,103 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ ** skipped for length() and all content loading can be skipped for typeof(). */ case OP_Column: { -#if 0 /* local variables moved into u.ao */ - u32 payloadSize; /* Number of bytes in the record */ i64 payloadSize64; /* Number of bytes in the record */ - int p1; /* P1 value of the opcode */ int p2; /* column number to retrieve */ VdbeCursor *pC; /* The VDBE cursor */ - char *zRec; /* Pointer to complete record-data */ BtCursor *pCrsr; /* The BTree cursor */ u32 *aType; /* aType[i] holds the numeric type of the i-th column */ u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ - int nField; /* number of fields in the record */ int len; /* The length of the serialized data for the column */ int i; /* Loop counter */ - char *zData; /* Part of the record being decoded */ Mem *pDest; /* Where to write the extracted value */ Mem sMem; /* For storing the record being decoded */ - u8 *zIdx; /* Index into header */ - u8 *zEndHdr; /* Pointer to first byte after the header */ + const u8 *zData; /* Part of the record being decoded */ + const u8 *zHdr; /* Next unparsed byte of the header */ + const u8 *zEndHdr; /* Pointer to first byte after the header */ u32 offset; /* Offset into the data */ u32 szField; /* Number of bytes in the content of a field */ - int szHdr; /* Size of the header size field at start of record */ - int avail; /* Number of bytes of available data */ + u32 avail; /* Number of bytes of available data */ u32 t; /* A type code from the record header */ Mem *pReg; /* PseudoTable input register */ -#endif /* local variables moved into u.ao */ - - u.ao.p1 = pOp->p1; - u.ao.p2 = pOp->p2; - u.ao.pC = 0; - memset(&u.ao.sMem, 0, sizeof(u.ao.sMem)); - assert( u.ao.p1nCursor ); + p2 = pOp->p2; assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); - u.ao.pDest = &aMem[pOp->p3]; - memAboutToChange(p, u.ao.pDest); - u.ao.zRec = 0; - - /* This block sets the variable u.ao.payloadSize to be the total number of - ** bytes in the record. - ** - ** u.ao.zRec is set to be the complete text of the record if it is available. - ** The complete record text is always available for pseudo-tables - ** If the record is stored in a cursor, the complete record text - ** might be available in the u.ao.pC->aRow cache. Or it might not be. - ** If the data is unavailable, u.ao.zRec is set to NULL. - ** - ** We also compute the number of columns in the record. For cursors, - ** the number of columns is stored in the VdbeCursor.nField element. - */ - u.ao.pC = p->apCsr[u.ao.p1]; - assert( u.ao.pC!=0 ); + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( p2nField ); + aType = pC->aType; + aOffset = aType + pC->nField; #ifndef SQLITE_OMIT_VIRTUALTABLE - assert( u.ao.pC->pVtabCursor==0 ); + assert( pC->pVtabCursor==0 ); /* OP_Column never called on virtual table */ #endif - u.ao.pCrsr = u.ao.pC->pCursor; - if( u.ao.pCrsr!=0 ){ - /* The record is stored in a B-Tree */ - rc = sqlite3VdbeCursorMoveto(u.ao.pC); - if( rc ) goto abort_due_to_error; - if( u.ao.pC->nullRow ){ - u.ao.payloadSize = 0; - }else if( u.ao.pC->cacheStatus==p->cacheCtr ){ - u.ao.payloadSize = u.ao.pC->payloadSize; - u.ao.zRec = (char*)u.ao.pC->aRow; - }else if( u.ao.pC->isIndex ){ - assert( sqlite3BtreeCursorIsValid(u.ao.pCrsr) ); - VVA_ONLY(rc =) sqlite3BtreeKeySize(u.ao.pCrsr, &u.ao.payloadSize64); - assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */ - /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the - ** payload size, so it is impossible for u.ao.payloadSize64 to be - ** larger than 32 bits. */ - assert( (u.ao.payloadSize64 & SQLITE_MAX_U32)==(u64)u.ao.payloadSize64 ); - u.ao.payloadSize = (u32)u.ao.payloadSize64; - }else{ - assert( sqlite3BtreeCursorIsValid(u.ao.pCrsr) ); - VVA_ONLY(rc =) sqlite3BtreeDataSize(u.ao.pCrsr, &u.ao.payloadSize); - assert( rc==SQLITE_OK ); /* DataSize() cannot fail */ - } - }else if( ALWAYS(u.ao.pC->pseudoTableReg>0) ){ - u.ao.pReg = &aMem[u.ao.pC->pseudoTableReg]; - if( u.ao.pC->multiPseudo ){ - sqlite3VdbeMemShallowCopy(u.ao.pDest, u.ao.pReg+u.ao.p2, MEM_Ephem); - Deephemeralize(u.ao.pDest); - goto op_column_out; - } - assert( u.ao.pReg->flags & MEM_Blob ); - assert( memIsValid(u.ao.pReg) ); - u.ao.payloadSize = u.ao.pReg->n; - u.ao.zRec = u.ao.pReg->z; - u.ao.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr; - assert( u.ao.payloadSize==0 || u.ao.zRec!=0 ); - }else{ - /* Consider the row to be NULL */ - u.ao.payloadSize = 0; - } + pCrsr = pC->pCursor; + assert( pCrsr!=0 || pC->pseudoTableReg>0 ); /* pCrsr NULL on PseudoTables */ + assert( pCrsr!=0 || pC->nullRow ); /* pC->nullRow on PseudoTables */ - /* If u.ao.payloadSize is 0, then just store a NULL. This can happen because of - ** nullRow or because of a corrupt database. */ - if( u.ao.payloadSize==0 ){ - MemSetTypeFlag(u.ao.pDest, MEM_Null); - goto op_column_out; - } - assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 ); - if( u.ao.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ - goto too_big; - } - - u.ao.nField = u.ao.pC->nField; - assert( u.ao.p2aType; - if( u.ao.pC->cacheStatus==p->cacheCtr ){ - u.ao.aOffset = u.ao.pC->aOffset; - }else{ - assert(u.ao.aType); - u.ao.avail = 0; - u.ao.pC->aOffset = u.ao.aOffset = &u.ao.aType[u.ao.nField]; - u.ao.pC->payloadSize = u.ao.payloadSize; - u.ao.pC->cacheStatus = p->cacheCtr; - - /* Figure out how many bytes are in the header */ - if( u.ao.zRec ){ - u.ao.zData = u.ao.zRec; - }else{ - if( u.ao.pC->isIndex ){ - u.ao.zData = (char*)sqlite3BtreeKeyFetch(u.ao.pCrsr, &u.ao.avail); + /* If the cursor cache is stale, bring it up-to-date */ + rc = sqlite3VdbeCursorMoveto(pC); + if( rc ) goto abort_due_to_error; + if( pC->cacheStatus!=p->cacheCtr || (pOp->p5&OPFLAG_CLEARCACHE)!=0 ){ + if( pC->nullRow ){ + if( pCrsr==0 ){ + assert( pC->pseudoTableReg>0 ); + pReg = &aMem[pC->pseudoTableReg]; + if( pC->multiPseudo ){ + sqlite3VdbeMemShallowCopy(pDest, pReg+p2, MEM_Ephem); + Deephemeralize(pDest); + goto op_column_out; + } + assert( pReg->flags & MEM_Blob ); + assert( memIsValid(pReg) ); + pC->payloadSize = pC->szRow = avail = pReg->n; + pC->aRow = (u8*)pReg->z; }else{ - u.ao.zData = (char*)sqlite3BtreeDataFetch(u.ao.pCrsr, &u.ao.avail); + MemSetTypeFlag(pDest, MEM_Null); + goto op_column_out; } - /* If KeyFetch()/DataFetch() managed to get the entire payload, - ** save the payload in the u.ao.pC->aRow cache. That will save us from - ** having to make additional calls to fetch the content portion of - ** the record. - */ - assert( u.ao.avail>=0 ); - if( u.ao.payloadSize <= (u32)u.ao.avail ){ - u.ao.zRec = u.ao.zData; - u.ao.pC->aRow = (u8*)u.ao.zData; + }else{ + assert( pCrsr ); + if( pC->isTable==0 ){ + assert( sqlite3BtreeCursorIsValid(pCrsr) ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(pCrsr, &payloadSize64); + assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */ + /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the + ** payload size, so it is impossible for payloadSize64 to be + ** larger than 32 bits. */ + assert( (payloadSize64 & SQLITE_MAX_U32)==(u64)payloadSize64 ); + pC->aRow = sqlite3BtreeKeyFetch(pCrsr, &avail); + pC->payloadSize = (u32)payloadSize64; }else{ - u.ao.pC->aRow = 0; + assert( sqlite3BtreeCursorIsValid(pCrsr) ); + VVA_ONLY(rc =) sqlite3BtreeDataSize(pCrsr, &pC->payloadSize); + assert( rc==SQLITE_OK ); /* DataSize() cannot fail */ + pC->aRow = sqlite3BtreeDataFetch(pCrsr, &avail); + } + assert( avail<=65536 ); /* Maximum page size is 64KiB */ + if( pC->payloadSize <= (u32)avail ){ + pC->szRow = pC->payloadSize; + }else{ + pC->szRow = avail; + } + if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; } } - /* The following assert is true in all cases except when - ** the database file has been corrupted externally. - ** assert( u.ao.zRec!=0 || u.ao.avail>=u.ao.payloadSize || u.ao.avail>=9 ); */ - u.ao.szHdr = getVarint32((u8*)u.ao.zData, u.ao.offset); + pC->cacheStatus = p->cacheCtr; + pC->iHdrOffset = getVarint32(pC->aRow, offset); + pC->nHdrParsed = 0; + aOffset[0] = offset; + if( availaRow does not have to hold the entire row, but it does at least + ** need to cover the header of the record. If pC->aRow does not contain + ** the complete header, then set it to zero, forcing the header to be + ** dynamically allocated. */ + pC->aRow = 0; + pC->szRow = 0; + } /* Make sure a corrupt database has not given us an oversize header. ** Do this now to avoid an oversize memory allocation. @@ -68491,161 +68794,155 @@ case OP_Column: { ** 3-byte type for each of the maximum of 32768 columns plus three ** extra bytes for the header length itself. 32768*3 + 3 = 98307. */ - if( u.ao.offset > 98307 ){ + if( offset > 98307 || offset > pC->payloadSize ){ rc = SQLITE_CORRUPT_BKPT; - goto op_column_out; + goto op_column_error; } + } - /* Compute in u.ao.len the number of bytes of data we need to read in order - ** to get u.ao.nField type values. u.ao.offset is an upper bound on this. But - ** u.ao.nField might be significantly less than the true number of columns - ** in the table, and in that case, 5*u.ao.nField+3 might be smaller than u.ao.offset. - ** We want to minimize u.ao.len in order to limit the size of the memory - ** allocation, especially if a corrupt database file has caused u.ao.offset - ** to be oversized. Offset is limited to 98307 above. But 98307 might - ** still exceed Robson memory allocation limits on some configurations. - ** On systems that cannot tolerate large memory allocations, u.ao.nField*5+3 - ** will likely be much smaller since u.ao.nField will likely be less than - ** 20 or so. This insures that Robson memory allocation limits are - ** not exceeded even for corrupt database files. + /* Make sure at least the first p2+1 entries of the header have been + ** parsed and valid information is in aOffset[] and aType[]. + */ + if( pC->nHdrParsed<=p2 ){ + /* If there is more header available for parsing in the record, try + ** to extract additional fields up through the p2+1-th field */ - u.ao.len = u.ao.nField*5 + 3; - if( u.ao.len > (int)u.ao.offset ) u.ao.len = (int)u.ao.offset; - - /* The KeyFetch() or DataFetch() above are fast and will get the entire - ** record header in most cases. But they will fail to get the complete - ** record header if the record header does not fit on a single page - ** in the B-Tree. When that happens, use sqlite3VdbeMemFromBtree() to - ** acquire the complete header text. - */ - if( !u.ao.zRec && u.ao.availisIndex, &u.ao.sMem); - if( rc!=SQLITE_OK ){ - goto op_column_out; - } - u.ao.zData = u.ao.sMem.z; - } - u.ao.zEndHdr = (u8 *)&u.ao.zData[u.ao.len]; - u.ao.zIdx = (u8 *)&u.ao.zData[u.ao.szHdr]; - - /* Scan the header and use it to fill in the u.ao.aType[] and u.ao.aOffset[] - ** arrays. u.ao.aType[u.ao.i] will contain the type integer for the u.ao.i-th - ** column and u.ao.aOffset[u.ao.i] will contain the u.ao.offset from the beginning - ** of the record to the start of the data for the u.ao.i-th column - */ - for(u.ao.i=0; u.ao.iiHdrOffsetaRow==0 ){ + memset(&sMem, 0, sizeof(sMem)); + rc = sqlite3VdbeMemFromBtree(pCrsr, 0, aOffset[0], + !pC->isTable, &sMem); + if( rc!=SQLITE_OK ){ + goto op_column_error; } - u.ao.aType[u.ao.i] = u.ao.t; - u.ao.szField = sqlite3VdbeSerialTypeLen(u.ao.t); - u.ao.offset += u.ao.szField; - if( u.ao.offsetaRow; + } + + /* Fill in aType[i] and aOffset[i] values through the p2-th field. */ + i = pC->nHdrParsed; + offset = aOffset[i]; + zHdr = zData + pC->iHdrOffset; + zEndHdr = zData + aOffset[0]; + assert( i<=p2 && zHdrnHdrParsed = i; + pC->iHdrOffset = (u32)(zHdr - zData); + if( pC->aRow==0 ){ + sqlite3VdbeMemRelease(&sMem); + sMem.flags = MEM_Null; + } + + /* If we have read more header data than was contained in the header, + ** or if the end of the last field appears to be past the end of the + ** record, or if the end of the last field appears to be before the end + ** of the record (when all fields present), then we must be dealing + ** with a corrupt database. + */ + if( (zHdr > zEndHdr) + || (offset > pC->payloadSize) + || (zHdr==zEndHdr && offset!=pC->payloadSize) + ){ + rc = SQLITE_CORRUPT_BKPT; + goto op_column_error; } } - sqlite3VdbeMemRelease(&u.ao.sMem); - u.ao.sMem.flags = MEM_Null; - /* If we have read more header data than was contained in the header, - ** or if the end of the last field appears to be past the end of the - ** record, or if the end of the last field appears to be before the end - ** of the record (when all fields present), then we must be dealing - ** with a corrupt database. + /* If after trying to extra new entries from the header, nHdrParsed is + ** still not up to p2, that means that the record has fewer than p2 + ** columns. So the result will be either the default value or a NULL. */ - if( (u.ao.zIdx > u.ao.zEndHdr) || (u.ao.offset > u.ao.payloadSize) - || (u.ao.zIdx==u.ao.zEndHdr && u.ao.offset!=u.ao.payloadSize) ){ - rc = SQLITE_CORRUPT_BKPT; + if( pC->nHdrParsed<=p2 ){ + if( pOp->p4type==P4_MEM ){ + sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static); + }else{ + MemSetTypeFlag(pDest, MEM_Null); + } goto op_column_out; } } - /* Get the column information. If u.ao.aOffset[u.ao.p2] is non-zero, then - ** deserialize the value from the record. If u.ao.aOffset[u.ao.p2] is zero, - ** then there are not enough fields in the record to satisfy the - ** request. In this case, set the value NULL or to P4 if P4 is - ** a pointer to a Mem object. + /* Extract the content for the p2+1-th column. Control can only + ** reach this point if aOffset[p2], aOffset[p2+1], and aType[p2] are + ** all valid. */ - if( u.ao.aOffset[u.ao.p2] ){ - assert( rc==SQLITE_OK ); - if( u.ao.zRec ){ - /* This is the common case where the whole row fits on a single page */ - VdbeMemRelease(u.ao.pDest); - sqlite3VdbeSerialGet((u8 *)&u.ao.zRec[u.ao.aOffset[u.ao.p2]], u.ao.aType[u.ao.p2], u.ao.pDest); - }else{ - /* This branch happens only when the row overflows onto multiple pages */ - u.ao.t = u.ao.aType[u.ao.p2]; - if( (pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0 - && ((u.ao.t>=12 && (u.ao.t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0) - ){ - /* Content is irrelevant for the typeof() function and for - ** the length(X) function if X is a blob. So we might as well use - ** bogus content rather than reading content from disk. NULL works - ** for text and blob and whatever is in the u.ao.payloadSize64 variable - ** will work for everything else. */ - u.ao.zData = u.ao.t<12 ? (char*)&u.ao.payloadSize64 : 0; - }else{ - u.ao.len = sqlite3VdbeSerialTypeLen(u.ao.t); - sqlite3VdbeMemMove(&u.ao.sMem, u.ao.pDest); - rc = sqlite3VdbeMemFromBtree(u.ao.pCrsr, u.ao.aOffset[u.ao.p2], u.ao.len, u.ao.pC->isIndex, - &u.ao.sMem); - if( rc!=SQLITE_OK ){ - goto op_column_out; - } - u.ao.zData = u.ao.sMem.z; - } - sqlite3VdbeSerialGet((u8*)u.ao.zData, u.ao.t, u.ao.pDest); - } - u.ao.pDest->enc = encoding; + assert( p2nHdrParsed ); + assert( rc==SQLITE_OK ); + if( pC->szRow>=aOffset[p2+1] ){ + /* This is the common case where the desired content fits on the original + ** page - where the content is not on an overflow page */ + VdbeMemRelease(pDest); + sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest); }else{ - if( pOp->p4type==P4_MEM ){ - sqlite3VdbeMemShallowCopy(u.ao.pDest, pOp->p4.pMem, MEM_Static); + /* This branch happens only when content is on overflow pages */ + t = aType[p2]; + if( ((pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0 + && ((t>=12 && (t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0)) + || (len = sqlite3VdbeSerialTypeLen(t))==0 + ){ + /* Content is irrelevant for the typeof() function and for + ** the length(X) function if X is a blob. So we might as well use + ** bogus content rather than reading content from disk. NULL works + ** for text and blob and whatever is in the payloadSize64 variable + ** will work for everything else. Content is also irrelevant if + ** the content length is 0. */ + zData = t<=13 ? (u8*)&payloadSize64 : 0; + sMem.zMalloc = 0; }else{ - MemSetTypeFlag(u.ao.pDest, MEM_Null); + memset(&sMem, 0, sizeof(sMem)); + sqlite3VdbeMemMove(&sMem, pDest); + rc = sqlite3VdbeMemFromBtree(pCrsr, aOffset[p2], len, !pC->isTable, + &sMem); + if( rc!=SQLITE_OK ){ + goto op_column_error; + } + zData = (u8*)sMem.z; + } + sqlite3VdbeSerialGet(zData, t, pDest); + /* If we dynamically allocated space to hold the data (in the + ** sqlite3VdbeMemFromBtree() call above) then transfer control of that + ** dynamically allocated space over to the pDest structure. + ** This prevents a memory copy. */ + if( sMem.zMalloc ){ + assert( sMem.z==sMem.zMalloc ); + assert( !(pDest->flags & MEM_Dyn) ); + assert( !(pDest->flags & (MEM_Blob|MEM_Str)) || pDest->z==sMem.z ); + pDest->flags &= ~(MEM_Ephem|MEM_Static); + pDest->flags |= MEM_Term; + pDest->z = sMem.z; + pDest->zMalloc = sMem.zMalloc; } } - - /* If we dynamically allocated space to hold the data (in the - ** sqlite3VdbeMemFromBtree() call above) then transfer control of that - ** dynamically allocated space over to the u.ao.pDest structure. - ** This prevents a memory copy. - */ - if( u.ao.sMem.zMalloc ){ - assert( u.ao.sMem.z==u.ao.sMem.zMalloc ); - assert( !(u.ao.pDest->flags & MEM_Dyn) ); - assert( !(u.ao.pDest->flags & (MEM_Blob|MEM_Str)) || u.ao.pDest->z==u.ao.sMem.z ); - u.ao.pDest->flags &= ~(MEM_Ephem|MEM_Static); - u.ao.pDest->flags |= MEM_Term; - u.ao.pDest->z = u.ao.sMem.z; - u.ao.pDest->zMalloc = u.ao.sMem.zMalloc; - } - - rc = sqlite3VdbeMemMakeWriteable(u.ao.pDest); + pDest->enc = encoding; op_column_out: - UPDATE_MAX_BLOBSIZE(u.ao.pDest); - REGISTER_TRACE(pOp->p3, u.ao.pDest); + Deephemeralize(pDest); +op_column_error: + UPDATE_MAX_BLOBSIZE(pDest); + REGISTER_TRACE(pOp->p3, pDest); break; } /* Opcode: Affinity P1 P2 * P4 * +** Synopsis: affinity(r[P1@P2]) ** ** Apply affinities to a range of P2 registers starting with P1. ** @@ -68654,26 +68951,25 @@ op_column_out: ** memory cell in the range. */ case OP_Affinity: { -#if 0 /* local variables moved into u.ap */ const char *zAffinity; /* The affinity to be applied */ char cAff; /* A single character of affinity */ -#endif /* local variables moved into u.ap */ - u.ap.zAffinity = pOp->p4.z; - assert( u.ap.zAffinity!=0 ); - assert( u.ap.zAffinity[pOp->p2]==0 ); + zAffinity = pOp->p4.z; + assert( zAffinity!=0 ); + assert( zAffinity[pOp->p2]==0 ); pIn1 = &aMem[pOp->p1]; - while( (u.ap.cAff = *(u.ap.zAffinity++))!=0 ){ + while( (cAff = *(zAffinity++))!=0 ){ assert( pIn1 <= &p->aMem[(p->nMem-p->nCursor)] ); assert( memIsValid(pIn1) ); ExpandBlob(pIn1); - applyAffinity(pIn1, u.ap.cAff, encoding); + applyAffinity(pIn1, cAff, encoding); pIn1++; } break; } /* Opcode: MakeRecord P1 P2 P3 P4 * +** Synopsis: r[P3]=mkrec(r[P1@P2]) ** ** Convert P2 registers beginning with P1 into the [record format] ** use as a data record in a database table or as a key @@ -68689,7 +68985,6 @@ case OP_Affinity: { ** If P4 is NULL then all index fields have the affinity NONE. */ case OP_MakeRecord: { -#if 0 /* local variables moved into u.aq */ u8 *zNewRecord; /* A buffer to hold the data for the new record */ Mem *pRec; /* The new record */ u64 nData; /* Number of bytes of data space */ @@ -68703,102 +68998,119 @@ case OP_MakeRecord: { int nField; /* Number of fields in the record */ char *zAffinity; /* The affinity string for the record */ int file_format; /* File format to use for encoding */ - int i; /* Space used in zNewRecord[] */ + int i; /* Space used in zNewRecord[] header */ + int j; /* Space used in zNewRecord[] content */ int len; /* Length of a field */ -#endif /* local variables moved into u.aq */ /* Assuming the record contains N fields, the record format looks ** like this: ** ** ------------------------------------------------------------------------ - ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 | + ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 | ** ------------------------------------------------------------------------ ** ** Data(0) is taken from register P1. Data(1) comes from register P1+1 ** and so froth. ** - ** Each type field is a varint representing the serial type of the + ** Each type field is a varint representing the serial type of the ** corresponding data element (see sqlite3VdbeSerialType()). The ** hdr-size field is also a varint which is the offset from the beginning ** of the record to data0. */ - u.aq.nData = 0; /* Number of bytes of data space */ - u.aq.nHdr = 0; /* Number of bytes of header space */ - u.aq.nZero = 0; /* Number of zero bytes at the end of the record */ - u.aq.nField = pOp->p1; - u.aq.zAffinity = pOp->p4.z; - assert( u.aq.nField>0 && pOp->p2>0 && pOp->p2+u.aq.nField<=(p->nMem-p->nCursor)+1 ); - u.aq.pData0 = &aMem[u.aq.nField]; - u.aq.nField = pOp->p2; - u.aq.pLast = &u.aq.pData0[u.aq.nField-1]; - u.aq.file_format = p->minWriteFileFormat; + nData = 0; /* Number of bytes of data space */ + nHdr = 0; /* Number of bytes of header space */ + nZero = 0; /* Number of zero bytes at the end of the record */ + nField = pOp->p1; + zAffinity = pOp->p4.z; + assert( nField>0 && pOp->p2>0 && pOp->p2+nField<=(p->nMem-p->nCursor)+1 ); + pData0 = &aMem[nField]; + nField = pOp->p2; + pLast = &pData0[nField-1]; + file_format = p->minWriteFileFormat; /* Identify the output register */ assert( pOp->p3p1 || pOp->p3>=pOp->p1+pOp->p2 ); pOut = &aMem[pOp->p3]; memAboutToChange(p, pOut); + /* Apply the requested affinity to all inputs + */ + assert( pData0<=pLast ); + if( zAffinity ){ + pRec = pData0; + do{ + applyAffinity(pRec, *(zAffinity++), encoding); + }while( (++pRec)<=pLast ); + } + /* Loop through the elements that will make up the record to figure ** out how much space is required for the new record. */ - for(u.aq.pRec=u.aq.pData0; u.aq.pRec<=u.aq.pLast; u.aq.pRec++){ - assert( memIsValid(u.aq.pRec) ); - if( u.aq.zAffinity ){ - applyAffinity(u.aq.pRec, u.aq.zAffinity[u.aq.pRec-u.aq.pData0], encoding); + pRec = pLast; + do{ + assert( memIsValid(pRec) ); + serial_type = sqlite3VdbeSerialType(pRec, file_format); + len = sqlite3VdbeSerialTypeLen(serial_type); + if( pRec->flags & MEM_Zero ){ + if( nData ){ + sqlite3VdbeMemExpandBlob(pRec); + }else{ + nZero += pRec->u.nZero; + len -= pRec->u.nZero; + } } - if( u.aq.pRec->flags&MEM_Zero && u.aq.pRec->n>0 ){ - sqlite3VdbeMemExpandBlob(u.aq.pRec); - } - u.aq.serial_type = sqlite3VdbeSerialType(u.aq.pRec, u.aq.file_format); - u.aq.len = sqlite3VdbeSerialTypeLen(u.aq.serial_type); - u.aq.nData += u.aq.len; - u.aq.nHdr += sqlite3VarintLen(u.aq.serial_type); - if( u.aq.pRec->flags & MEM_Zero ){ - /* Only pure zero-filled BLOBs can be input to this Opcode. - ** We do not allow blobs with a prefix and a zero-filled tail. */ - u.aq.nZero += u.aq.pRec->u.nZero; - }else if( u.aq.len ){ - u.aq.nZero = 0; - } - } + nData += len; + testcase( serial_type==127 ); + testcase( serial_type==128 ); + nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type); + }while( (--pRec)>=pData0 ); /* Add the initial header varint and total the size */ - u.aq.nHdr += u.aq.nVarint = sqlite3VarintLen(u.aq.nHdr); - if( u.aq.nVarintdb->aLimit[SQLITE_LIMIT_LENGTH] ){ + nByte = nHdr+nData; + if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } - /* Make sure the output register has a buffer large enough to store + /* Make sure the output register has a buffer large enough to store ** the new record. The output register (pOp->p3) is not allowed to ** be one of the input registers (because the following call to ** sqlite3VdbeMemGrow() could clobber the value before it is used). */ - if( sqlite3VdbeMemGrow(pOut, (int)u.aq.nByte, 0) ){ + if( sqlite3VdbeMemGrow(pOut, (int)nByte, 0) ){ goto no_mem; } - u.aq.zNewRecord = (u8 *)pOut->z; + zNewRecord = (u8 *)pOut->z; /* Write the record */ - u.aq.i = putVarint32(u.aq.zNewRecord, u.aq.nHdr); - for(u.aq.pRec=u.aq.pData0; u.aq.pRec<=u.aq.pLast; u.aq.pRec++){ - u.aq.serial_type = sqlite3VdbeSerialType(u.aq.pRec, u.aq.file_format); - u.aq.i += putVarint32(&u.aq.zNewRecord[u.aq.i], u.aq.serial_type); /* serial type */ - } - for(u.aq.pRec=u.aq.pData0; u.aq.pRec<=u.aq.pLast; u.aq.pRec++){ /* serial data */ - u.aq.i += sqlite3VdbeSerialPut(&u.aq.zNewRecord[u.aq.i], (int)(u.aq.nByte-u.aq.i), u.aq.pRec,u.aq.file_format); - } - assert( u.aq.i==u.aq.nByte ); + i = putVarint32(zNewRecord, nHdr); + j = nHdr; + assert( pData0<=pLast ); + pRec = pData0; + do{ + serial_type = sqlite3VdbeSerialType(pRec, file_format); + i += putVarint32(&zNewRecord[i], serial_type); /* serial type */ + j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */ + }while( (++pRec)<=pLast ); + assert( i==nHdr ); + assert( j==nByte ); assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); - pOut->n = (int)u.aq.nByte; + pOut->n = (int)nByte; pOut->flags = MEM_Blob | MEM_Dyn; pOut->xDel = 0; - if( u.aq.nZero ){ - pOut->u.nZero = u.aq.nZero; + if( nZero ){ + pOut->u.nZero = nZero; pOut->flags |= MEM_Zero; } pOut->enc = SQLITE_UTF8; /* In case the blob is ever converted to text */ @@ -68808,24 +69120,21 @@ case OP_MakeRecord: { } /* Opcode: Count P1 P2 * * * +** Synopsis: r[P2]=count() ** ** Store the number of entries (an integer value) in the table or index ** opened by cursor P1 in register P2 */ #ifndef SQLITE_OMIT_BTREECOUNT case OP_Count: { /* out2-prerelease */ -#if 0 /* local variables moved into u.ar */ i64 nEntry; BtCursor *pCrsr; -#endif /* local variables moved into u.ar */ - u.ar.pCrsr = p->apCsr[pOp->p1]->pCursor; - if( ALWAYS(u.ar.pCrsr) ){ - rc = sqlite3BtreeCount(u.ar.pCrsr, &u.ar.nEntry); - }else{ - u.ar.nEntry = 0; - } - pOut->u.i = u.ar.nEntry; + pCrsr = p->apCsr[pOp->p1]->pCursor; + assert( pCrsr ); + nEntry = 0; /* Not needed. Only used to silence a warning. */ + rc = sqlite3BtreeCount(pCrsr, &nEntry); + pOut->u.i = nEntry; break; } #endif @@ -68837,7 +69146,6 @@ case OP_Count: { /* out2-prerelease */ ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2. */ case OP_Savepoint: { -#if 0 /* local variables moved into u.as */ int p1; /* Value of P1 operand */ char *zName; /* Name of savepoint */ int nName; @@ -68846,30 +69154,29 @@ case OP_Savepoint: { Savepoint *pTmp; int iSavepoint; int ii; -#endif /* local variables moved into u.as */ - u.as.p1 = pOp->p1; - u.as.zName = pOp->p4.z; + p1 = pOp->p1; + zName = pOp->p4.z; - /* Assert that the u.as.p1 parameter is valid. Also that if there is no open - ** transaction, then there cannot be any savepoints. + /* Assert that the p1 parameter is valid. Also that if there is no open + ** transaction, then there cannot be any savepoints. */ assert( db->pSavepoint==0 || db->autoCommit==0 ); - assert( u.as.p1==SAVEPOINT_BEGIN||u.as.p1==SAVEPOINT_RELEASE||u.as.p1==SAVEPOINT_ROLLBACK ); + assert( p1==SAVEPOINT_BEGIN||p1==SAVEPOINT_RELEASE||p1==SAVEPOINT_ROLLBACK ); assert( db->pSavepoint || db->isTransactionSavepoint==0 ); assert( checkSavepointCount(db) ); assert( p->bIsReader ); - if( u.as.p1==SAVEPOINT_BEGIN ){ + if( p1==SAVEPOINT_BEGIN ){ if( db->nVdbeWrite>0 ){ - /* A new savepoint cannot be created if there are active write + /* A new savepoint cannot be created if there are active write ** statements (i.e. open read/write incremental blob handles). */ sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - " "SQL statements in progress"); rc = SQLITE_BUSY; }else{ - u.as.nName = sqlite3Strlen30(u.as.zName); + nName = sqlite3Strlen30(zName); #ifndef SQLITE_OMIT_VIRTUALTABLE /* This call is Ok even if this savepoint is actually a transaction @@ -68883,11 +69190,11 @@ case OP_Savepoint: { #endif /* Create a new savepoint structure. */ - u.as.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.as.nName+1); - if( u.as.pNew ){ - u.as.pNew->zName = (char *)&u.as.pNew[1]; - memcpy(u.as.pNew->zName, u.as.zName, u.as.nName+1); - + pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+nName+1); + if( pNew ){ + pNew->zName = (char *)&pNew[1]; + memcpy(pNew->zName, zName, nName+1); + /* If there is no open transaction, then mark this as a special ** "transaction savepoint". */ if( db->autoCommit ){ @@ -68896,45 +69203,45 @@ case OP_Savepoint: { }else{ db->nSavepoint++; } - + /* Link the new savepoint into the database handle's list. */ - u.as.pNew->pNext = db->pSavepoint; - db->pSavepoint = u.as.pNew; - u.as.pNew->nDeferredCons = db->nDeferredCons; - u.as.pNew->nDeferredImmCons = db->nDeferredImmCons; + pNew->pNext = db->pSavepoint; + db->pSavepoint = pNew; + pNew->nDeferredCons = db->nDeferredCons; + pNew->nDeferredImmCons = db->nDeferredImmCons; } } }else{ - u.as.iSavepoint = 0; + iSavepoint = 0; /* Find the named savepoint. If there is no such savepoint, then an ** an error is returned to the user. */ for( - u.as.pSavepoint = db->pSavepoint; - u.as.pSavepoint && sqlite3StrICmp(u.as.pSavepoint->zName, u.as.zName); - u.as.pSavepoint = u.as.pSavepoint->pNext + pSavepoint = db->pSavepoint; + pSavepoint && sqlite3StrICmp(pSavepoint->zName, zName); + pSavepoint = pSavepoint->pNext ){ - u.as.iSavepoint++; + iSavepoint++; } - if( !u.as.pSavepoint ){ - sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.as.zName); + if( !pSavepoint ){ + sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", zName); rc = SQLITE_ERROR; - }else if( db->nVdbeWrite>0 && u.as.p1==SAVEPOINT_RELEASE ){ - /* It is not possible to release (commit) a savepoint if there are + }else if( db->nVdbeWrite>0 && p1==SAVEPOINT_RELEASE ){ + /* It is not possible to release (commit) a savepoint if there are ** active write statements. */ - sqlite3SetString(&p->zErrMsg, db, + sqlite3SetString(&p->zErrMsg, db, "cannot release savepoint - SQL statements in progress" ); rc = SQLITE_BUSY; }else{ /* Determine whether or not this is a transaction savepoint. If so, - ** and this is a RELEASE command, then the current transaction - ** is committed. + ** and this is a RELEASE command, then the current transaction + ** is committed. */ - int isTransaction = u.as.pSavepoint->pNext==0 && db->isTransactionSavepoint; - if( isTransaction && u.as.p1==SAVEPOINT_RELEASE ){ + int isTransaction = pSavepoint->pNext==0 && db->isTransactionSavepoint; + if( isTransaction && p1==SAVEPOINT_RELEASE ){ if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ goto vdbe_return; } @@ -68948,52 +69255,52 @@ case OP_Savepoint: { db->isTransactionSavepoint = 0; rc = p->rc; }else{ - u.as.iSavepoint = db->nSavepoint - u.as.iSavepoint - 1; - if( u.as.p1==SAVEPOINT_ROLLBACK ){ - for(u.as.ii=0; u.as.iinDb; u.as.ii++){ - sqlite3BtreeTripAllCursors(db->aDb[u.as.ii].pBt, SQLITE_ABORT); + iSavepoint = db->nSavepoint - iSavepoint - 1; + if( p1==SAVEPOINT_ROLLBACK ){ + for(ii=0; iinDb; ii++){ + sqlite3BtreeTripAllCursors(db->aDb[ii].pBt, SQLITE_ABORT); } } - for(u.as.ii=0; u.as.iinDb; u.as.ii++){ - rc = sqlite3BtreeSavepoint(db->aDb[u.as.ii].pBt, u.as.p1, u.as.iSavepoint); + for(ii=0; iinDb; ii++){ + rc = sqlite3BtreeSavepoint(db->aDb[ii].pBt, p1, iSavepoint); if( rc!=SQLITE_OK ){ goto abort_due_to_error; } } - if( u.as.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){ + if( p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){ sqlite3ExpirePreparedStatements(db); sqlite3ResetAllSchemasOfConnection(db); db->flags = (db->flags | SQLITE_InternChanges); } } - - /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all + + /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all ** savepoints nested inside of the savepoint being operated on. */ - while( db->pSavepoint!=u.as.pSavepoint ){ - u.as.pTmp = db->pSavepoint; - db->pSavepoint = u.as.pTmp->pNext; - sqlite3DbFree(db, u.as.pTmp); + while( db->pSavepoint!=pSavepoint ){ + pTmp = db->pSavepoint; + db->pSavepoint = pTmp->pNext; + sqlite3DbFree(db, pTmp); db->nSavepoint--; } - /* If it is a RELEASE, then destroy the savepoint being operated on - ** too. If it is a ROLLBACK TO, then set the number of deferred + /* If it is a RELEASE, then destroy the savepoint being operated on + ** too. If it is a ROLLBACK TO, then set the number of deferred ** constraint violations present in the database to the value stored ** when the savepoint was created. */ - if( u.as.p1==SAVEPOINT_RELEASE ){ - assert( u.as.pSavepoint==db->pSavepoint ); - db->pSavepoint = u.as.pSavepoint->pNext; - sqlite3DbFree(db, u.as.pSavepoint); + if( p1==SAVEPOINT_RELEASE ){ + assert( pSavepoint==db->pSavepoint ); + db->pSavepoint = pSavepoint->pNext; + sqlite3DbFree(db, pSavepoint); if( !isTransaction ){ db->nSavepoint--; } }else{ - db->nDeferredCons = u.as.pSavepoint->nDeferredCons; - db->nDeferredImmCons = u.as.pSavepoint->nDeferredImmCons; + db->nDeferredCons = pSavepoint->nDeferredCons; + db->nDeferredImmCons = pSavepoint->nDeferredImmCons; } if( !isTransaction ){ - rc = sqlite3VtabSavepoint(db, u.as.p1, u.as.iSavepoint); + rc = sqlite3VtabSavepoint(db, p1, iSavepoint); if( rc!=SQLITE_OK ) goto abort_due_to_error; } } @@ -69012,50 +69319,48 @@ case OP_Savepoint: { ** This instruction causes the VM to halt. */ case OP_AutoCommit: { -#if 0 /* local variables moved into u.at */ int desiredAutoCommit; int iRollback; int turnOnAC; -#endif /* local variables moved into u.at */ - u.at.desiredAutoCommit = pOp->p1; - u.at.iRollback = pOp->p2; - u.at.turnOnAC = u.at.desiredAutoCommit && !db->autoCommit; - assert( u.at.desiredAutoCommit==1 || u.at.desiredAutoCommit==0 ); - assert( u.at.desiredAutoCommit==1 || u.at.iRollback==0 ); + desiredAutoCommit = pOp->p1; + iRollback = pOp->p2; + turnOnAC = desiredAutoCommit && !db->autoCommit; + assert( desiredAutoCommit==1 || desiredAutoCommit==0 ); + assert( desiredAutoCommit==1 || iRollback==0 ); assert( db->nVdbeActive>0 ); /* At least this one VM is active */ assert( p->bIsReader ); #if 0 - if( u.at.turnOnAC && u.at.iRollback && db->nVdbeActive>1 ){ + if( turnOnAC && iRollback && db->nVdbeActive>1 ){ /* If this instruction implements a ROLLBACK and other VMs are ** still running, and a transaction is active, return an error indicating - ** that the other VMs must complete first. + ** that the other VMs must complete first. */ sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - " "SQL statements in progress"); rc = SQLITE_BUSY; }else #endif - if( u.at.turnOnAC && !u.at.iRollback && db->nVdbeWrite>0 ){ + if( turnOnAC && !iRollback && db->nVdbeWrite>0 ){ /* If this instruction implements a COMMIT and other VMs are writing - ** return an error indicating that the other VMs must complete first. + ** return an error indicating that the other VMs must complete first. */ sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - " "SQL statements in progress"); rc = SQLITE_BUSY; - }else if( u.at.desiredAutoCommit!=db->autoCommit ){ - if( u.at.iRollback ){ - assert( u.at.desiredAutoCommit==1 ); + }else if( desiredAutoCommit!=db->autoCommit ){ + if( iRollback ){ + assert( desiredAutoCommit==1 ); sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); db->autoCommit = 1; }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ goto vdbe_return; }else{ - db->autoCommit = (u8)u.at.desiredAutoCommit; + db->autoCommit = (u8)desiredAutoCommit; if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ p->pc = pc; - db->autoCommit = (u8)(1-u.at.desiredAutoCommit); + db->autoCommit = (u8)(1-desiredAutoCommit); p->rc = rc = SQLITE_BUSY; goto vdbe_return; } @@ -69070,10 +69375,10 @@ case OP_AutoCommit: { goto vdbe_return; }else{ sqlite3SetString(&p->zErrMsg, db, - (!u.at.desiredAutoCommit)?"cannot start a transaction within a transaction":( - (u.at.iRollback)?"cannot rollback - no transaction is active": + (!desiredAutoCommit)?"cannot start a transaction within a transaction":( + (iRollback)?"cannot rollback - no transaction is active": "cannot commit - no transaction is active")); - + rc = SQLITE_ERROR; } break; @@ -69111,9 +69416,7 @@ case OP_AutoCommit: { ** If P2 is zero, then a read-lock is obtained on the database file. */ case OP_Transaction: { -#if 0 /* local variables moved into u.au */ Btree *pBt; -#endif /* local variables moved into u.au */ assert( p->bIsReader ); assert( p->readOnly==0 || pOp->p2==0 ); @@ -69123,10 +69426,10 @@ case OP_Transaction: { rc = SQLITE_READONLY; goto abort_due_to_error; } - u.au.pBt = db->aDb[pOp->p1].pBt; + pBt = db->aDb[pOp->p1].pBt; - if( u.au.pBt ){ - rc = sqlite3BtreeBeginTrans(u.au.pBt, pOp->p2); + if( pBt ){ + rc = sqlite3BtreeBeginTrans(pBt, pOp->p2); if( rc==SQLITE_BUSY ){ p->pc = pc; p->rc = rc = SQLITE_BUSY; @@ -69136,19 +69439,19 @@ case OP_Transaction: { goto abort_due_to_error; } - if( pOp->p2 && p->usesStmtJournal - && (db->autoCommit==0 || db->nVdbeRead>1) + if( pOp->p2 && p->usesStmtJournal + && (db->autoCommit==0 || db->nVdbeRead>1) ){ - assert( sqlite3BtreeIsInTrans(u.au.pBt) ); + assert( sqlite3BtreeIsInTrans(pBt) ); if( p->iStatement==0 ){ assert( db->nStatement>=0 && db->nSavepoint>=0 ); - db->nStatement++; + db->nStatement++; p->iStatement = db->nSavepoint + db->nStatement; } rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1); if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginStmt(u.au.pBt, p->iStatement); + rc = sqlite3BtreeBeginStmt(pBt, p->iStatement); } /* Store the current value of the database handles deferred constraint @@ -69174,22 +69477,20 @@ case OP_Transaction: { ** executing this instruction. */ case OP_ReadCookie: { /* out2-prerelease */ -#if 0 /* local variables moved into u.av */ int iMeta; int iDb; int iCookie; -#endif /* local variables moved into u.av */ assert( p->bIsReader ); - u.av.iDb = pOp->p1; - u.av.iCookie = pOp->p3; + iDb = pOp->p1; + iCookie = pOp->p3; assert( pOp->p3=0 && u.av.iDbnDb ); - assert( db->aDb[u.av.iDb].pBt!=0 ); - assert( (p->btreeMask & (((yDbMask)1)<=0 && iDbnDb ); + assert( db->aDb[iDb].pBt!=0 ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[u.av.iDb].pBt, u.av.iCookie, (u32 *)&u.av.iMeta); - pOut->u.i = u.av.iMeta; + sqlite3BtreeGetMeta(db->aDb[iDb].pBt, iCookie, (u32 *)&iMeta); + pOut->u.i = iMeta; break; } @@ -69204,27 +69505,25 @@ case OP_ReadCookie: { /* out2-prerelease */ ** A transaction must be started before executing this opcode. */ case OP_SetCookie: { /* in3 */ -#if 0 /* local variables moved into u.aw */ Db *pDb; -#endif /* local variables moved into u.aw */ assert( pOp->p2p1>=0 && pOp->p1nDb ); assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); assert( p->readOnly==0 ); - u.aw.pDb = &db->aDb[pOp->p1]; - assert( u.aw.pDb->pBt!=0 ); + pDb = &db->aDb[pOp->p1]; + assert( pDb->pBt!=0 ); assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); pIn3 = &aMem[pOp->p3]; sqlite3VdbeMemIntegerify(pIn3); /* See note about index shifting on OP_ReadCookie */ - rc = sqlite3BtreeUpdateMeta(u.aw.pDb->pBt, pOp->p2, (int)pIn3->u.i); + rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, (int)pIn3->u.i); if( pOp->p2==BTREE_SCHEMA_VERSION ){ /* When the schema cookie changes, record the new cookie internally */ - u.aw.pDb->pSchema->schema_cookie = (int)pIn3->u.i; + pDb->pSchema->schema_cookie = (int)pIn3->u.i; db->flags |= SQLITE_InternChanges; }else if( pOp->p2==BTREE_FILE_FORMAT ){ /* Record changes in the file format */ - u.aw.pDb->pSchema->file_format = (u8)pIn3->u.i; + pDb->pSchema->file_format = (u8)pIn3->u.i; } if( pOp->p1==1 ){ /* Invalidate all prepared statements whenever the TEMP database @@ -69254,27 +69553,25 @@ case OP_SetCookie: { /* in3 */ ** invoked. */ case OP_VerifyCookie: { -#if 0 /* local variables moved into u.ax */ int iMeta; int iGen; Btree *pBt; -#endif /* local variables moved into u.ax */ assert( pOp->p1>=0 && pOp->p1nDb ); assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); assert( p->bIsReader ); - u.ax.pBt = db->aDb[pOp->p1].pBt; - if( u.ax.pBt ){ - sqlite3BtreeGetMeta(u.ax.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.ax.iMeta); - u.ax.iGen = db->aDb[pOp->p1].pSchema->iGeneration; + pBt = db->aDb[pOp->p1].pBt; + if( pBt ){ + sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta); + iGen = db->aDb[pOp->p1].pSchema->iGeneration; }else{ - u.ax.iGen = u.ax.iMeta = 0; + iGen = iMeta = 0; } - if( u.ax.iMeta!=pOp->p2 || u.ax.iGen!=pOp->p3 ){ + if( iMeta!=pOp->p2 || iGen!=pOp->p3 ){ sqlite3DbFree(db, p->zErrMsg); p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); - /* If the schema-cookie from the database file matches the cookie + /* If the schema-cookie from the database file matches the cookie ** stored with the in-memory representation of the schema, do ** not reload the schema from the database file. ** @@ -69284,10 +69581,10 @@ case OP_VerifyCookie: { ** prepared queries. If such a query is out-of-date, we do not want to ** discard the database schema, as the user code implementing the ** v-table would have to be ready for the sqlite3_vtab structure itself - ** to be invalidated whenever sqlite3_step() is called from within + ** to be invalidated whenever sqlite3_step() is called from within ** a v-table method. */ - if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.ax.iMeta ){ + if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){ sqlite3ResetOneSchema(db, pOp->p1); } @@ -69298,6 +69595,7 @@ case OP_VerifyCookie: { } /* Opcode: OpenRead P1 P2 P3 P4 P5 +** Synopsis: root=P2 iDb=P3 ** ** Open a read-only cursor for the database table whose root page is ** P2 in a database file. The database file is determined by P3. @@ -69328,6 +69626,7 @@ case OP_VerifyCookie: { ** See also OpenWrite. */ /* Opcode: OpenWrite P1 P2 P3 P4 P5 +** Synopsis: root=P2 iDb=P3 ** ** Open a read/write cursor named P1 on the table or index whose root ** page is P2. Or if P5!=0 use the content of register P2 to find the @@ -69348,7 +69647,6 @@ case OP_VerifyCookie: { */ case OP_OpenRead: case OP_OpenWrite: { -#if 0 /* local variables moved into u.ay */ int nField; KeyInfo *pKeyInfo; int p2; @@ -69357,7 +69655,6 @@ case OP_OpenWrite: { Btree *pX; VdbeCursor *pCur; Db *pDb; -#endif /* local variables moved into u.ay */ assert( (pOp->p5&(OPFLAG_P2ISREG|OPFLAG_BULKCSR))==pOp->p5 ); assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 ); @@ -69369,72 +69666,75 @@ case OP_OpenWrite: { break; } - u.ay.nField = 0; - u.ay.pKeyInfo = 0; - u.ay.p2 = pOp->p2; - u.ay.iDb = pOp->p3; - assert( u.ay.iDb>=0 && u.ay.iDbnDb ); - assert( (p->btreeMask & (((yDbMask)1)<aDb[u.ay.iDb]; - u.ay.pX = u.ay.pDb->pBt; - assert( u.ay.pX!=0 ); + nField = 0; + pKeyInfo = 0; + p2 = pOp->p2; + iDb = pOp->p3; + assert( iDb>=0 && iDbnDb ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[iDb]; + pX = pDb->pBt; + assert( pX!=0 ); if( pOp->opcode==OP_OpenWrite ){ - u.ay.wrFlag = 1; - assert( sqlite3SchemaMutexHeld(db, u.ay.iDb, 0) ); - if( u.ay.pDb->pSchema->file_format < p->minWriteFileFormat ){ - p->minWriteFileFormat = u.ay.pDb->pSchema->file_format; + wrFlag = 1; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( pDb->pSchema->file_format < p->minWriteFileFormat ){ + p->minWriteFileFormat = pDb->pSchema->file_format; } }else{ - u.ay.wrFlag = 0; + wrFlag = 0; } if( pOp->p5 & OPFLAG_P2ISREG ){ - assert( u.ay.p2>0 ); - assert( u.ay.p2<=(p->nMem-p->nCursor) ); - pIn2 = &aMem[u.ay.p2]; + assert( p2>0 ); + assert( p2<=(p->nMem-p->nCursor) ); + pIn2 = &aMem[p2]; assert( memIsValid(pIn2) ); assert( (pIn2->flags & MEM_Int)!=0 ); sqlite3VdbeMemIntegerify(pIn2); - u.ay.p2 = (int)pIn2->u.i; - /* The u.ay.p2 value always comes from a prior OP_CreateTable opcode and - ** that opcode will always set the u.ay.p2 value to 2 or more or else fail. + p2 = (int)pIn2->u.i; + /* The p2 value always comes from a prior OP_CreateTable opcode and + ** that opcode will always set the p2 value to 2 or more or else fail. ** If there were a failure, the prepared statement would have halted ** before reaching this instruction. */ - if( NEVER(u.ay.p2<2) ) { + if( NEVER(p2<2) ) { rc = SQLITE_CORRUPT_BKPT; goto abort_due_to_error; } } if( pOp->p4type==P4_KEYINFO ){ - u.ay.pKeyInfo = pOp->p4.pKeyInfo; - u.ay.pKeyInfo->enc = ENC(p->db); - u.ay.nField = u.ay.pKeyInfo->nField+1; + pKeyInfo = pOp->p4.pKeyInfo; + assert( pKeyInfo->enc==ENC(db) ); + assert( pKeyInfo->db==db ); + nField = pKeyInfo->nField+pKeyInfo->nXField; }else if( pOp->p4type==P4_INT32 ){ - u.ay.nField = pOp->p4.i; + nField = pOp->p4.i; } assert( pOp->p1>=0 ); - u.ay.pCur = allocateCursor(p, pOp->p1, u.ay.nField, u.ay.iDb, 1); - if( u.ay.pCur==0 ) goto no_mem; - u.ay.pCur->nullRow = 1; - u.ay.pCur->isOrdered = 1; - rc = sqlite3BtreeCursor(u.ay.pX, u.ay.p2, u.ay.wrFlag, u.ay.pKeyInfo, u.ay.pCur->pCursor); - u.ay.pCur->pKeyInfo = u.ay.pKeyInfo; + assert( nField>=0 ); + testcase( nField==0 ); /* Table with INTEGER PRIMARY KEY and nothing else */ + pCur = allocateCursor(p, pOp->p1, nField, iDb, 1); + if( pCur==0 ) goto no_mem; + pCur->nullRow = 1; + pCur->isOrdered = 1; + rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->pCursor); + pCur->pKeyInfo = pKeyInfo; assert( OPFLAG_BULKCSR==BTREE_BULKLOAD ); - sqlite3BtreeCursorHints(u.ay.pCur->pCursor, (pOp->p5 & OPFLAG_BULKCSR)); + sqlite3BtreeCursorHints(pCur->pCursor, (pOp->p5 & OPFLAG_BULKCSR)); /* Since it performs no memory allocation or IO, the only value that ** sqlite3BtreeCursor() may return is SQLITE_OK. */ assert( rc==SQLITE_OK ); - /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of + /* Set the VdbeCursor.isTable variable. Previous versions of ** SQLite used to check if the root-page flags were sane at this point ** and report database corruption if they were not, but this check has - ** since moved into the btree layer. */ - u.ay.pCur->isTable = pOp->p4type!=P4_KEYINFO; - u.ay.pCur->isIndex = !u.ay.pCur->isTable; + ** since moved into the btree layer. */ + pCur->isTable = pOp->p4type!=P4_KEYINFO; break; } /* Opcode: OpenEphemeral P1 P2 * P4 P5 +** Synopsis: nColumn=P2 ** ** Open a new cursor P1 to a transient table. ** The cursor is always opened read/write even if @@ -69446,18 +69746,13 @@ case OP_OpenWrite: { ** if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure ** that defines the format of keys in the index. ** -** This opcode was once called OpenTemp. But that created -** confusion because the term "temp table", might refer either -** to a TEMP table at the SQL level, or to a table opened by -** this opcode. Then this opcode was call OpenVirtual. But -** that created confusion with the whole virtual-table idea. -** ** The P5 parameter can be a mask of the BTREE_* flags defined ** in btree.h. These flags control aspects of the operation of ** the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are ** added automatically. */ /* Opcode: OpenAutoindex P1 P2 * P4 * +** Synopsis: nColumn=P2 ** ** This opcode works the same as OP_OpenEphemeral. It has a ** different name to distinguish its use. Tables created using @@ -69466,24 +69761,24 @@ case OP_OpenWrite: { */ case OP_OpenAutoindex: case OP_OpenEphemeral: { -#if 0 /* local variables moved into u.az */ VdbeCursor *pCx; -#endif /* local variables moved into u.az */ - static const int vfsFlags = + KeyInfo *pKeyInfo; + + static const int vfsFlags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE | SQLITE_OPEN_TRANSIENT_DB; - assert( pOp->p1>=0 ); - u.az.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); - if( u.az.pCx==0 ) goto no_mem; - u.az.pCx->nullRow = 1; - rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.az.pCx->pBt, + assert( pOp->p2>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); + if( pCx==0 ) goto no_mem; + pCx->nullRow = 1; + rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBt, BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags); if( rc==SQLITE_OK ){ - rc = sqlite3BtreeBeginTrans(u.az.pCx->pBt, 1); + rc = sqlite3BtreeBeginTrans(pCx->pBt, 1); } if( rc==SQLITE_OK ){ /* If a transient index is required, create it by calling @@ -69491,49 +69786,49 @@ case OP_OpenEphemeral: { ** opening it. If a transient table is required, just use the ** automatically created table with root-page 1 (an BLOB_INTKEY table). */ - if( pOp->p4.pKeyInfo ){ + if( (pKeyInfo = pOp->p4.pKeyInfo)!=0 ){ int pgno; assert( pOp->p4type==P4_KEYINFO ); - rc = sqlite3BtreeCreateTable(u.az.pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5); + rc = sqlite3BtreeCreateTable(pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5); if( rc==SQLITE_OK ){ assert( pgno==MASTER_ROOT+1 ); - rc = sqlite3BtreeCursor(u.az.pCx->pBt, pgno, 1, - (KeyInfo*)pOp->p4.z, u.az.pCx->pCursor); - u.az.pCx->pKeyInfo = pOp->p4.pKeyInfo; - u.az.pCx->pKeyInfo->enc = ENC(p->db); + assert( pKeyInfo->db==db ); + assert( pKeyInfo->enc==ENC(db) ); + pCx->pKeyInfo = pKeyInfo; + rc = sqlite3BtreeCursor(pCx->pBt, pgno, 1, pKeyInfo, pCx->pCursor); } - u.az.pCx->isTable = 0; + pCx->isTable = 0; }else{ - rc = sqlite3BtreeCursor(u.az.pCx->pBt, MASTER_ROOT, 1, 0, u.az.pCx->pCursor); - u.az.pCx->isTable = 1; + rc = sqlite3BtreeCursor(pCx->pBt, MASTER_ROOT, 1, 0, pCx->pCursor); + pCx->isTable = 1; } } - u.az.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); - u.az.pCx->isIndex = !u.az.pCx->isTable; + pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); break; } -/* Opcode: SorterOpen P1 P2 * P4 * +/* Opcode: SorterOpen P1 * * P4 * ** ** This opcode works like OP_OpenEphemeral except that it opens ** a transient index that is specifically designed to sort large ** tables using an external merge-sort algorithm. */ case OP_SorterOpen: { -#if 0 /* local variables moved into u.ba */ VdbeCursor *pCx; -#endif /* local variables moved into u.ba */ - u.ba.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); - if( u.ba.pCx==0 ) goto no_mem; - u.ba.pCx->pKeyInfo = pOp->p4.pKeyInfo; - u.ba.pCx->pKeyInfo->enc = ENC(p->db); - u.ba.pCx->isSorter = 1; - rc = sqlite3VdbeSorterInit(db, u.ba.pCx); + assert( pOp->p1>=0 ); + assert( pOp->p2>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1); + if( pCx==0 ) goto no_mem; + pCx->pKeyInfo = pOp->p4.pKeyInfo; + assert( pCx->pKeyInfo->db==db ); + assert( pCx->pKeyInfo->enc==ENC(db) ); + rc = sqlite3VdbeSorterInit(db, pCx); break; } /* Opcode: OpenPseudo P1 P2 P3 * P5 +** Synopsis: content in r[P2@P3] ** ** Open a new cursor that points to a fake table that contains a single ** row of data. The content of that one row in the content of memory @@ -69550,18 +69845,16 @@ case OP_SorterOpen: { ** the pseudo-table. */ case OP_OpenPseudo: { -#if 0 /* local variables moved into u.bb */ VdbeCursor *pCx; -#endif /* local variables moved into u.bb */ assert( pOp->p1>=0 ); - u.bb.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0); - if( u.bb.pCx==0 ) goto no_mem; - u.bb.pCx->nullRow = 1; - u.bb.pCx->pseudoTableReg = pOp->p2; - u.bb.pCx->isTable = 1; - u.bb.pCx->isIndex = 0; - u.bb.pCx->multiPseudo = pOp->p5; + assert( pOp->p3>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0); + if( pCx==0 ) goto no_mem; + pCx->nullRow = 1; + pCx->pseudoTableReg = pOp->p2; + pCx->isTable = 1; + pCx->multiPseudo = pOp->p5; break; } @@ -69578,6 +69871,7 @@ case OP_Close: { } /* Opcode: SeekGe P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), ** use the value in register P3 as the key. If cursor P1 refers @@ -69591,6 +69885,7 @@ case OP_Close: { ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe */ /* Opcode: SeekGt P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), ** use the value in register P3 as a key. If cursor P1 refers @@ -69604,6 +69899,7 @@ case OP_Close: { ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe */ /* Opcode: SeekLt P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), ** use the value in register P3 as a key. If cursor P1 refers @@ -69617,6 +69913,7 @@ case OP_Close: { ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe */ /* Opcode: SeekLe P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), ** use the value in register P3 as a key. If cursor P1 refers @@ -69633,157 +69930,141 @@ case OP_SeekLt: /* jump, in3 */ case OP_SeekLe: /* jump, in3 */ case OP_SeekGe: /* jump, in3 */ case OP_SeekGt: { /* jump, in3 */ -#if 0 /* local variables moved into u.bc */ int res; int oc; VdbeCursor *pC; UnpackedRecord r; int nField; i64 iKey; /* The rowid we are to seek to */ -#endif /* local variables moved into u.bc */ assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p2!=0 ); - u.bc.pC = p->apCsr[pOp->p1]; - assert( u.bc.pC!=0 ); - assert( u.bc.pC->pseudoTableReg==0 ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->pseudoTableReg==0 ); assert( OP_SeekLe == OP_SeekLt+1 ); assert( OP_SeekGe == OP_SeekLt+2 ); assert( OP_SeekGt == OP_SeekLt+3 ); - assert( u.bc.pC->isOrdered ); - if( ALWAYS(u.bc.pC->pCursor!=0) ){ - u.bc.oc = pOp->opcode; - u.bc.pC->nullRow = 0; - if( u.bc.pC->isTable ){ - /* The input value in P3 might be of any type: integer, real, string, - ** blob, or NULL. But it needs to be an integer before we can do - ** the seek, so covert it. */ - pIn3 = &aMem[pOp->p3]; - applyNumericAffinity(pIn3); - u.bc.iKey = sqlite3VdbeIntValue(pIn3); - u.bc.pC->rowidIsValid = 0; + assert( pC->isOrdered ); + assert( pC->pCursor!=0 ); + oc = pOp->opcode; + pC->nullRow = 0; + if( pC->isTable ){ + /* The input value in P3 might be of any type: integer, real, string, + ** blob, or NULL. But it needs to be an integer before we can do + ** the seek, so covert it. */ + pIn3 = &aMem[pOp->p3]; + applyNumericAffinity(pIn3); + iKey = sqlite3VdbeIntValue(pIn3); + pC->rowidIsValid = 0; - /* If the P3 value could not be converted into an integer without - ** loss of information, then special processing is required... */ - if( (pIn3->flags & MEM_Int)==0 ){ - if( (pIn3->flags & MEM_Real)==0 ){ - /* If the P3 value cannot be converted into any kind of a number, - ** then the seek is not possible, so jump to P2 */ - pc = pOp->p2 - 1; - break; - } - /* If we reach this point, then the P3 value must be a floating - ** point number. */ - assert( (pIn3->flags & MEM_Real)!=0 ); + /* If the P3 value could not be converted into an integer without + ** loss of information, then special processing is required... */ + if( (pIn3->flags & MEM_Int)==0 ){ + if( (pIn3->flags & MEM_Real)==0 ){ + /* If the P3 value cannot be converted into any kind of a number, + ** then the seek is not possible, so jump to P2 */ + pc = pOp->p2 - 1; + break; + } - if( u.bc.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.bc.iKey || pIn3->r>0) ){ - /* The P3 value is too large in magnitude to be expressed as an - ** integer. */ - u.bc.res = 1; - if( pIn3->r<0 ){ - if( u.bc.oc>=OP_SeekGe ){ assert( u.bc.oc==OP_SeekGe || u.bc.oc==OP_SeekGt ); - rc = sqlite3BtreeFirst(u.bc.pC->pCursor, &u.bc.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - } - }else{ - if( u.bc.oc<=OP_SeekLe ){ assert( u.bc.oc==OP_SeekLt || u.bc.oc==OP_SeekLe ); - rc = sqlite3BtreeLast(u.bc.pC->pCursor, &u.bc.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - } - } - if( u.bc.res ){ - pc = pOp->p2 - 1; - } - break; - }else if( u.bc.oc==OP_SeekLt || u.bc.oc==OP_SeekGe ){ - /* Use the ceiling() function to convert real->int */ - if( pIn3->r > (double)u.bc.iKey ) u.bc.iKey++; - }else{ - /* Use the floor() function to convert real->int */ - assert( u.bc.oc==OP_SeekLe || u.bc.oc==OP_SeekGt ); - if( pIn3->r < (double)u.bc.iKey ) u.bc.iKey--; - } - } - rc = sqlite3BtreeMovetoUnpacked(u.bc.pC->pCursor, 0, (u64)u.bc.iKey, 0, &u.bc.res); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; - } - if( u.bc.res==0 ){ - u.bc.pC->rowidIsValid = 1; - u.bc.pC->lastRowid = u.bc.iKey; - } - }else{ - u.bc.nField = pOp->p4.i; - assert( pOp->p4type==P4_INT32 ); - assert( u.bc.nField>0 ); - u.bc.r.pKeyInfo = u.bc.pC->pKeyInfo; - u.bc.r.nField = (u16)u.bc.nField; - - /* The next line of code computes as follows, only faster: - ** if( u.bc.oc==OP_SeekGt || u.bc.oc==OP_SeekLe ){ - ** u.bc.r.flags = UNPACKED_INCRKEY; - ** }else{ - ** u.bc.r.flags = 0; - ** } + /* If the approximation iKey is larger than the actual real search + ** term, substitute >= for > and < for <=. e.g. if the search term + ** is 4.9 and the integer approximation 5: + ** + ** (x > 4.9) -> (x >= 5) + ** (x <= 4.9) -> (x < 5) */ - u.bc.r.flags = (u8)(UNPACKED_INCRKEY * (1 & (u.bc.oc - OP_SeekLt))); - assert( u.bc.oc!=OP_SeekGt || u.bc.r.flags==UNPACKED_INCRKEY ); - assert( u.bc.oc!=OP_SeekLe || u.bc.r.flags==UNPACKED_INCRKEY ); - assert( u.bc.oc!=OP_SeekGe || u.bc.r.flags==0 ); - assert( u.bc.oc!=OP_SeekLt || u.bc.r.flags==0 ); + if( pIn3->r<(double)iKey ){ + assert( OP_SeekGe==(OP_SeekGt-1) ); + assert( OP_SeekLt==(OP_SeekLe-1) ); + assert( (OP_SeekLe & 0x0001)==(OP_SeekGt & 0x0001) ); + if( (oc & 0x0001)==(OP_SeekGt & 0x0001) ) oc--; + } - u.bc.r.aMem = &aMem[pOp->p3]; -#ifdef SQLITE_DEBUG - { int i; for(i=0; ipCursor, &u.bc.r, 0, 0, &u.bc.res); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; + /* If the approximation iKey is smaller than the actual real search + ** term, substitute <= for < and > for >=. */ + else if( pIn3->r>(double)iKey ){ + assert( OP_SeekLe==(OP_SeekLt+1) ); + assert( OP_SeekGt==(OP_SeekGe+1) ); + assert( (OP_SeekLt & 0x0001)==(OP_SeekGe & 0x0001) ); + if( (oc & 0x0001)==(OP_SeekLt & 0x0001) ) oc++; } - u.bc.pC->rowidIsValid = 0; + } + rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)iKey, 0, &res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; } - u.bc.pC->deferredMoveto = 0; - u.bc.pC->cacheStatus = CACHE_STALE; -#ifdef SQLITE_TEST - sqlite3_search_count++; -#endif - if( u.bc.oc>=OP_SeekGe ){ assert( u.bc.oc==OP_SeekGe || u.bc.oc==OP_SeekGt ); - if( u.bc.res<0 || (u.bc.res==0 && u.bc.oc==OP_SeekGt) ){ - rc = sqlite3BtreeNext(u.bc.pC->pCursor, &u.bc.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - u.bc.pC->rowidIsValid = 0; - }else{ - u.bc.res = 0; - } - }else{ - assert( u.bc.oc==OP_SeekLt || u.bc.oc==OP_SeekLe ); - if( u.bc.res>0 || (u.bc.res==0 && u.bc.oc==OP_SeekLt) ){ - rc = sqlite3BtreePrevious(u.bc.pC->pCursor, &u.bc.res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - u.bc.pC->rowidIsValid = 0; - }else{ - /* u.bc.res might be negative because the table is empty. Check to - ** see if this is the case. - */ - u.bc.res = sqlite3BtreeEof(u.bc.pC->pCursor); - } - } - assert( pOp->p2>0 ); - if( u.bc.res ){ - pc = pOp->p2 - 1; + if( res==0 ){ + pC->rowidIsValid = 1; + pC->lastRowid = iKey; } }else{ - /* This happens when attempting to open the sqlite3_master table - ** for read access returns SQLITE_EMPTY. In this case always - ** take the jump (since there are no records in the table). + nField = pOp->p4.i; + assert( pOp->p4type==P4_INT32 ); + assert( nField>0 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)nField; + + /* The next line of code computes as follows, only faster: + ** if( oc==OP_SeekGt || oc==OP_SeekLe ){ + ** r.flags = UNPACKED_INCRKEY; + ** }else{ + ** r.flags = 0; + ** } */ + r.flags = (u8)(UNPACKED_INCRKEY * (1 & (oc - OP_SeekLt))); + assert( oc!=OP_SeekGt || r.flags==UNPACKED_INCRKEY ); + assert( oc!=OP_SeekLe || r.flags==UNPACKED_INCRKEY ); + assert( oc!=OP_SeekGe || r.flags==0 ); + assert( oc!=OP_SeekLt || r.flags==0 ); + + r.aMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + { int i; for(i=0; ipCursor, &r, 0, 0, &res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + pC->rowidIsValid = 0; + } + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + if( oc>=OP_SeekGe ){ assert( oc==OP_SeekGe || oc==OP_SeekGt ); + if( res<0 || (res==0 && oc==OP_SeekGt) ){ + rc = sqlite3BtreeNext(pC->pCursor, &res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + pC->rowidIsValid = 0; + }else{ + res = 0; + } + }else{ + assert( oc==OP_SeekLt || oc==OP_SeekLe ); + if( res>0 || (res==0 && oc==OP_SeekLt) ){ + rc = sqlite3BtreePrevious(pC->pCursor, &res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + pC->rowidIsValid = 0; + }else{ + /* res might be negative because the table is empty. Check to + ** see if this is the case. + */ + res = sqlite3BtreeEof(pC->pCursor); + } + } + assert( pOp->p2>0 ); + if( res ){ pc = pOp->p2 - 1; } break; } /* Opcode: Seek P1 P2 * * * +** Synopsis: intkey=r[P2] ** ** P1 is an open table cursor and P2 is a rowid integer. Arrange ** for P1 to move so that it points to the rowid given by P2. @@ -69793,26 +70074,24 @@ case OP_SeekGt: { /* jump, in3 */ ** occur, no unnecessary I/O happens. */ case OP_Seek: { /* in2 */ -#if 0 /* local variables moved into u.bd */ VdbeCursor *pC; -#endif /* local variables moved into u.bd */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bd.pC = p->apCsr[pOp->p1]; - assert( u.bd.pC!=0 ); - if( ALWAYS(u.bd.pC->pCursor!=0) ){ - assert( u.bd.pC->isTable ); - u.bd.pC->nullRow = 0; - pIn2 = &aMem[pOp->p2]; - u.bd.pC->movetoTarget = sqlite3VdbeIntValue(pIn2); - u.bd.pC->rowidIsValid = 0; - u.bd.pC->deferredMoveto = 1; - } + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->pCursor!=0 ); + assert( pC->isTable ); + pC->nullRow = 0; + pIn2 = &aMem[pOp->p2]; + pC->movetoTarget = sqlite3VdbeIntValue(pIn2); + pC->rowidIsValid = 0; + pC->deferredMoveto = 1; break; } /* Opcode: Found P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If P4==0 then register P3 holds a blob constructed by MakeRecord. If ** P4>0 then register P3 is the first of P4 registers that form an unpacked @@ -69821,8 +70100,11 @@ case OP_Seek: { /* in2 */ ** Cursor P1 is on an index btree. If the record identified by P3 and P4 ** is a prefix of any entry in P1 then a jump is made to P2 and ** P1 is left pointing at the matching entry. +** +** See also: NotFound, NoConflict, NotExists. SeekGe */ /* Opcode: NotFound P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] ** ** If P4==0 then register P3 holds a blob constructed by MakeRecord. If ** P4>0 then register P3 is the first of P4 registers that form an unpacked @@ -69834,216 +70116,154 @@ case OP_Seek: { /* in2 */ ** falls through to the next instruction and P1 is left pointing at the ** matching entry. ** -** See also: Found, NotExists, IsUnique +** See also: Found, NotExists, NoConflict */ +/* Opcode: NoConflict P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** contains any NULL value, jump immediately to P2. If all terms of the +** record are not-NULL then a check is done to determine if any row in the +** P1 index btree has a matching key prefix. If there are no matches, jump +** immediately to P2. If there is a match, fall through and leave the P1 +** cursor pointing to the matching row. +** +** This opcode is similar to OP_NotFound with the exceptions that the +** branch is always taken if any part of the search key input is NULL. +** +** See also: NotFound, Found, NotExists +*/ +case OP_NoConflict: /* jump, in3 */ case OP_NotFound: /* jump, in3 */ case OP_Found: { /* jump, in3 */ -#if 0 /* local variables moved into u.be */ int alreadyExists; + int ii; VdbeCursor *pC; int res; char *pFree; UnpackedRecord *pIdxKey; UnpackedRecord r; - char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7]; -#endif /* local variables moved into u.be */ + char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*4 + 7]; #ifdef SQLITE_TEST - sqlite3_found_count++; + if( pOp->opcode!=OP_NoConflict ) sqlite3_found_count++; #endif - u.be.alreadyExists = 0; assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p4type==P4_INT32 ); - u.be.pC = p->apCsr[pOp->p1]; - assert( u.be.pC!=0 ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); pIn3 = &aMem[pOp->p3]; - if( ALWAYS(u.be.pC->pCursor!=0) ){ - - assert( u.be.pC->isTable==0 ); - if( pOp->p4.i>0 ){ - u.be.r.pKeyInfo = u.be.pC->pKeyInfo; - u.be.r.nField = (u16)pOp->p4.i; - u.be.r.aMem = pIn3; + assert( pC->pCursor!=0 ); + assert( pC->isTable==0 ); + pFree = 0; /* Not needed. Only used to suppress a compiler warning. */ + if( pOp->p4.i>0 ){ + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp->p4.i; + r.aMem = pIn3; #ifdef SQLITE_DEBUG - { int i; for(i=0; ip3+i, &r.aMem[i]); + } + } #endif - u.be.r.flags = UNPACKED_PREFIX_MATCH; - u.be.pIdxKey = &u.be.r; - }else{ - u.be.pIdxKey = sqlite3VdbeAllocUnpackedRecord( - u.be.pC->pKeyInfo, u.be.aTempRec, sizeof(u.be.aTempRec), &u.be.pFree - ); - if( u.be.pIdxKey==0 ) goto no_mem; - assert( pIn3->flags & MEM_Blob ); - assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */ - sqlite3VdbeRecordUnpack(u.be.pC->pKeyInfo, pIn3->n, pIn3->z, u.be.pIdxKey); - u.be.pIdxKey->flags |= UNPACKED_PREFIX_MATCH; - } - rc = sqlite3BtreeMovetoUnpacked(u.be.pC->pCursor, u.be.pIdxKey, 0, 0, &u.be.res); - if( pOp->p4.i==0 ){ - sqlite3DbFree(db, u.be.pFree); - } - if( rc!=SQLITE_OK ){ - break; - } - u.be.alreadyExists = (u.be.res==0); - u.be.pC->deferredMoveto = 0; - u.be.pC->cacheStatus = CACHE_STALE; - } - if( pOp->opcode==OP_Found ){ - if( u.be.alreadyExists ) pc = pOp->p2 - 1; + r.flags = UNPACKED_PREFIX_MATCH; + pIdxKey = &r; }else{ - if( !u.be.alreadyExists ) pc = pOp->p2 - 1; + pIdxKey = sqlite3VdbeAllocUnpackedRecord( + pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree + ); + if( pIdxKey==0 ) goto no_mem; + assert( pIn3->flags & MEM_Blob ); + assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */ + sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey); + pIdxKey->flags |= UNPACKED_PREFIX_MATCH; } - break; -} - -/* Opcode: IsUnique P1 P2 P3 P4 * -** -** Cursor P1 is open on an index b-tree - that is to say, a btree which -** no data and where the key are records generated by OP_MakeRecord with -** the list field being the integer ROWID of the entry that the index -** entry refers to. -** -** The P3 register contains an integer record number. Call this record -** number R. Register P4 is the first in a set of N contiguous registers -** that make up an unpacked index key that can be used with cursor P1. -** The value of N can be inferred from the cursor. N includes the rowid -** value appended to the end of the index record. This rowid value may -** or may not be the same as R. -** -** If any of the N registers beginning with register P4 contains a NULL -** value, jump immediately to P2. -** -** Otherwise, this instruction checks if cursor P1 contains an entry -** where the first (N-1) fields match but the rowid value at the end -** of the index entry is not R. If there is no such entry, control jumps -** to instruction P2. Otherwise, the rowid of the conflicting index -** entry is copied to register P3 and control falls through to the next -** instruction. -** -** See also: NotFound, NotExists, Found -*/ -case OP_IsUnique: { /* jump, in3 */ -#if 0 /* local variables moved into u.bf */ - u16 ii; - VdbeCursor *pCx; - BtCursor *pCrsr; - u16 nField; - Mem *aMx; - UnpackedRecord r; /* B-Tree index search key */ - i64 R; /* Rowid stored in register P3 */ -#endif /* local variables moved into u.bf */ - - pIn3 = &aMem[pOp->p3]; - u.bf.aMx = &aMem[pOp->p4.i]; - /* Assert that the values of parameters P1 and P4 are in range. */ - assert( pOp->p4type==P4_INT32 ); - assert( pOp->p4.i>0 && pOp->p4.i<=(p->nMem-p->nCursor) ); - assert( pOp->p1>=0 && pOp->p1nCursor ); - - /* Find the index cursor. */ - u.bf.pCx = p->apCsr[pOp->p1]; - assert( u.bf.pCx->deferredMoveto==0 ); - u.bf.pCx->seekResult = 0; - u.bf.pCx->cacheStatus = CACHE_STALE; - u.bf.pCrsr = u.bf.pCx->pCursor; - - /* If any of the values are NULL, take the jump. */ - u.bf.nField = u.bf.pCx->pKeyInfo->nField; - for(u.bf.ii=0; u.bf.iip2 - 1; - u.bf.pCrsr = 0; - break; + if( pOp->opcode==OP_NoConflict ){ + /* For the OP_NoConflict opcode, take the jump if any of the + ** input fields are NULL, since any key with a NULL will not + ** conflict */ + for(ii=0; iip2 - 1; + break; + } } } - assert( (u.bf.aMx[u.bf.nField].flags & MEM_Null)==0 ); - - if( u.bf.pCrsr!=0 ){ - /* Populate the index search key. */ - u.bf.r.pKeyInfo = u.bf.pCx->pKeyInfo; - u.bf.r.nField = u.bf.nField + 1; - u.bf.r.flags = UNPACKED_PREFIX_SEARCH; - u.bf.r.aMem = u.bf.aMx; -#ifdef SQLITE_DEBUG - { int i; for(i=0; iu.i; - - /* Search the B-Tree index. If no conflicting record is found, jump - ** to P2. Otherwise, copy the rowid of the conflicting record to - ** register P3 and fall through to the next instruction. */ - rc = sqlite3BtreeMovetoUnpacked(u.bf.pCrsr, &u.bf.r, 0, 0, &u.bf.pCx->seekResult); - if( (u.bf.r.flags & UNPACKED_PREFIX_SEARCH) || u.bf.r.rowid==u.bf.R ){ - pc = pOp->p2 - 1; - }else{ - pIn3->u.i = u.bf.r.rowid; - } + rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, pIdxKey, 0, 0, &res); + if( pOp->p4.i==0 ){ + sqlite3DbFree(db, pFree); + } + if( rc!=SQLITE_OK ){ + break; + } + pC->seekResult = res; + alreadyExists = (res==0); + pC->nullRow = 1-alreadyExists; + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + if( pOp->opcode==OP_Found ){ + if( alreadyExists ) pc = pOp->p2 - 1; + }else{ + if( !alreadyExists ) pc = pOp->p2 - 1; } break; } /* Opcode: NotExists P1 P2 P3 * * +** Synopsis: intkey=r[P3] ** -** Use the content of register P3 as an integer key. If a record -** with that key does not exist in table of P1, then jump to P2. -** If the record does exist, then fall through. The cursor is left -** pointing to the record if it exists. +** P1 is the index of a cursor open on an SQL table btree (with integer +** keys). P3 is an integer rowid. If P1 does not contain a record with +** rowid P3 then jump immediately to P2. If P1 does contain a record +** with rowid P3 then leave the cursor pointing at that record and fall +** through to the next instruction. ** -** The difference between this operation and NotFound is that this -** operation assumes the key is an integer and that P1 is a table whereas -** NotFound assumes key is a blob constructed from MakeRecord and -** P1 is an index. +** The OP_NotFound opcode performs the same operation on index btrees +** (with arbitrary multi-value keys). ** -** See also: Found, NotFound, IsUnique +** See also: Found, NotFound, NoConflict */ case OP_NotExists: { /* jump, in3 */ -#if 0 /* local variables moved into u.bg */ VdbeCursor *pC; BtCursor *pCrsr; int res; u64 iKey; -#endif /* local variables moved into u.bg */ pIn3 = &aMem[pOp->p3]; assert( pIn3->flags & MEM_Int ); assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bg.pC = p->apCsr[pOp->p1]; - assert( u.bg.pC!=0 ); - assert( u.bg.pC->isTable ); - assert( u.bg.pC->pseudoTableReg==0 ); - u.bg.pCrsr = u.bg.pC->pCursor; - if( ALWAYS(u.bg.pCrsr!=0) ){ - u.bg.res = 0; - u.bg.iKey = pIn3->u.i; - rc = sqlite3BtreeMovetoUnpacked(u.bg.pCrsr, 0, u.bg.iKey, 0, &u.bg.res); - u.bg.pC->lastRowid = pIn3->u.i; - u.bg.pC->rowidIsValid = u.bg.res==0 ?1:0; - u.bg.pC->nullRow = 0; - u.bg.pC->cacheStatus = CACHE_STALE; - u.bg.pC->deferredMoveto = 0; - if( u.bg.res!=0 ){ - pc = pOp->p2 - 1; - assert( u.bg.pC->rowidIsValid==0 ); - } - u.bg.pC->seekResult = u.bg.res; - }else{ - /* This happens when an attempt to open a read cursor on the - ** sqlite_master table returns SQLITE_EMPTY. - */ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->isTable ); + assert( pC->pseudoTableReg==0 ); + pCrsr = pC->pCursor; + assert( pCrsr!=0 ); + res = 0; + iKey = pIn3->u.i; + rc = sqlite3BtreeMovetoUnpacked(pCrsr, 0, iKey, 0, &res); + pC->lastRowid = pIn3->u.i; + pC->rowidIsValid = res==0 ?1:0; + pC->nullRow = 0; + pC->cacheStatus = CACHE_STALE; + pC->deferredMoveto = 0; + if( res!=0 ){ pc = pOp->p2 - 1; - assert( u.bg.pC->rowidIsValid==0 ); - u.bg.pC->seekResult = 0; + assert( pC->rowidIsValid==0 ); } + pC->seekResult = res; break; } /* Opcode: Sequence P1 P2 * * * +** Synopsis: r[P2]=rowid ** ** Find the next available sequence number for cursor P1. ** Write the sequence number into register P2. @@ -70059,6 +70279,7 @@ case OP_Sequence: { /* out2-prerelease */ /* Opcode: NewRowid P1 P2 P3 * * +** Synopsis: r[P2]=rowid ** ** Get a new integer record number (a.k.a "rowid") used as the key to a table. ** The record number is not previously used as a key in the database @@ -70073,21 +70294,19 @@ case OP_Sequence: { /* out2-prerelease */ ** AUTOINCREMENT feature. */ case OP_NewRowid: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bh */ i64 v; /* The new rowid */ VdbeCursor *pC; /* Cursor of table to get the new rowid */ int res; /* Result of an sqlite3BtreeLast() */ int cnt; /* Counter to limit the number of searches */ Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ VdbeFrame *pFrame; /* Root frame of VDBE */ -#endif /* local variables moved into u.bh */ - u.bh.v = 0; - u.bh.res = 0; + v = 0; + res = 0; assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bh.pC = p->apCsr[pOp->p1]; - assert( u.bh.pC!=0 ); - if( NEVER(u.bh.pC->pCursor==0) ){ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + if( NEVER(pC->pCursor==0) ){ /* The zero initialization above is all that is needed */ }else{ /* The next rowid or record number (different terms for the same @@ -70103,7 +70322,7 @@ case OP_NewRowid: { /* out2-prerelease */ ** succeeded. If the random rowid does exist, we select a new one ** and try again, up to 100 times. */ - assert( u.bh.pC->isTable ); + assert( pC->isTable ); #ifdef SQLITE_32BIT_ROWID # define MAX_ROWID 0x7fffffff @@ -70115,23 +70334,23 @@ case OP_NewRowid: { /* out2-prerelease */ # define MAX_ROWID (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff ) #endif - if( !u.bh.pC->useRandomRowid ){ - u.bh.v = sqlite3BtreeGetCachedRowid(u.bh.pC->pCursor); - if( u.bh.v==0 ){ - rc = sqlite3BtreeLast(u.bh.pC->pCursor, &u.bh.res); + if( !pC->useRandomRowid ){ + v = sqlite3BtreeGetCachedRowid(pC->pCursor); + if( v==0 ){ + rc = sqlite3BtreeLast(pC->pCursor, &res); if( rc!=SQLITE_OK ){ goto abort_due_to_error; } - if( u.bh.res ){ - u.bh.v = 1; /* IMP: R-61914-48074 */ + if( res ){ + v = 1; /* IMP: R-61914-48074 */ }else{ - assert( sqlite3BtreeCursorIsValid(u.bh.pC->pCursor) ); - rc = sqlite3BtreeKeySize(u.bh.pC->pCursor, &u.bh.v); + assert( sqlite3BtreeCursorIsValid(pC->pCursor) ); + rc = sqlite3BtreeKeySize(pC->pCursor, &v); assert( rc==SQLITE_OK ); /* Cannot fail following BtreeLast() */ - if( u.bh.v>=MAX_ROWID ){ - u.bh.pC->useRandomRowid = 1; + if( v>=MAX_ROWID ){ + pC->useRandomRowid = 1; }else{ - u.bh.v++; /* IMP: R-29538-34987 */ + v++; /* IMP: R-29538-34987 */ } } } @@ -70141,35 +70360,35 @@ case OP_NewRowid: { /* out2-prerelease */ /* Assert that P3 is a valid memory cell. */ assert( pOp->p3>0 ); if( p->pFrame ){ - for(u.bh.pFrame=p->pFrame; u.bh.pFrame->pParent; u.bh.pFrame=u.bh.pFrame->pParent); + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); /* Assert that P3 is a valid memory cell. */ - assert( pOp->p3<=u.bh.pFrame->nMem ); - u.bh.pMem = &u.bh.pFrame->aMem[pOp->p3]; + assert( pOp->p3<=pFrame->nMem ); + pMem = &pFrame->aMem[pOp->p3]; }else{ /* Assert that P3 is a valid memory cell. */ assert( pOp->p3<=(p->nMem-p->nCursor) ); - u.bh.pMem = &aMem[pOp->p3]; - memAboutToChange(p, u.bh.pMem); + pMem = &aMem[pOp->p3]; + memAboutToChange(p, pMem); } - assert( memIsValid(u.bh.pMem) ); + assert( memIsValid(pMem) ); - REGISTER_TRACE(pOp->p3, u.bh.pMem); - sqlite3VdbeMemIntegerify(u.bh.pMem); - assert( (u.bh.pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */ - if( u.bh.pMem->u.i==MAX_ROWID || u.bh.pC->useRandomRowid ){ + REGISTER_TRACE(pOp->p3, pMem); + sqlite3VdbeMemIntegerify(pMem); + assert( (pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */ + if( pMem->u.i==MAX_ROWID || pC->useRandomRowid ){ rc = SQLITE_FULL; /* IMP: R-12275-61338 */ goto abort_due_to_error; } - if( u.bh.vu.i+1 ){ - u.bh.v = u.bh.pMem->u.i + 1; + if( vu.i+1 ){ + v = pMem->u.i + 1; } - u.bh.pMem->u.i = u.bh.v; + pMem->u.i = v; } #endif - sqlite3BtreeSetCachedRowid(u.bh.pC->pCursor, u.bh.vpCursor, vuseRandomRowid ){ + if( pC->useRandomRowid ){ /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the ** largest possible integer (9223372036854775807) then the database ** engine starts picking positive candidate ROWIDs at random until @@ -70177,39 +70396,40 @@ case OP_NewRowid: { /* out2-prerelease */ assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is ** an AUTOINCREMENT table. */ /* on the first attempt, simply do one more than previous */ - u.bh.v = lastRowid; - u.bh.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ - u.bh.v++; /* ensure non-zero */ - u.bh.cnt = 0; - while( ((rc = sqlite3BtreeMovetoUnpacked(u.bh.pC->pCursor, 0, (u64)u.bh.v, - 0, &u.bh.res))==SQLITE_OK) - && (u.bh.res==0) - && (++u.bh.cnt<100)){ + v = lastRowid; + v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ + v++; /* ensure non-zero */ + cnt = 0; + while( ((rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)v, + 0, &res))==SQLITE_OK) + && (res==0) + && (++cnt<100)){ /* collision - try another random rowid */ - sqlite3_randomness(sizeof(u.bh.v), &u.bh.v); - if( u.bh.cnt<5 ){ + sqlite3_randomness(sizeof(v), &v); + if( cnt<5 ){ /* try "small" random rowids for the initial attempts */ - u.bh.v &= 0xffffff; + v &= 0xffffff; }else{ - u.bh.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ + v &= (MAX_ROWID>>1); /* ensure doesn't go negative */ } - u.bh.v++; /* ensure non-zero */ + v++; /* ensure non-zero */ } - if( rc==SQLITE_OK && u.bh.res==0 ){ + if( rc==SQLITE_OK && res==0 ){ rc = SQLITE_FULL; /* IMP: R-38219-53002 */ goto abort_due_to_error; } - assert( u.bh.v>0 ); /* EV: R-40812-03570 */ + assert( v>0 ); /* EV: R-40812-03570 */ } - u.bh.pC->rowidIsValid = 0; - u.bh.pC->deferredMoveto = 0; - u.bh.pC->cacheStatus = CACHE_STALE; + pC->rowidIsValid = 0; + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; } - pOut->u.i = u.bh.v; + pOut->u.i = v; break; } /* Opcode: Insert P1 P2 P3 P4 P5 +** Synopsis: intkey=r[P3] data=r[P2] ** ** Write an entry into the table of cursor P1. A new entry is ** created if it doesn't already exist or the data for an existing @@ -70249,13 +70469,13 @@ case OP_NewRowid: { /* out2-prerelease */ ** for indices is OP_IdxInsert. */ /* Opcode: InsertInt P1 P2 P3 P4 P5 +** Synopsis: intkey=P3 data=r[P2] ** ** This works exactly like OP_Insert except that the key is the ** integer value P3, not the value of the integer stored in register P3. */ case OP_Insert: case OP_InsertInt: { -#if 0 /* local variables moved into u.bi */ Mem *pData; /* MEM cell holding data for the record to be inserted */ Mem *pKey; /* MEM cell holding key for the record */ i64 iKey; /* The integer ROWID or key for the record to be inserted */ @@ -70265,60 +70485,59 @@ case OP_InsertInt: { const char *zDb; /* database name - used by the update hook */ const char *zTbl; /* Table name - used by the opdate hook */ int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */ -#endif /* local variables moved into u.bi */ - u.bi.pData = &aMem[pOp->p2]; + pData = &aMem[pOp->p2]; assert( pOp->p1>=0 && pOp->p1nCursor ); - assert( memIsValid(u.bi.pData) ); - u.bi.pC = p->apCsr[pOp->p1]; - assert( u.bi.pC!=0 ); - assert( u.bi.pC->pCursor!=0 ); - assert( u.bi.pC->pseudoTableReg==0 ); - assert( u.bi.pC->isTable ); - REGISTER_TRACE(pOp->p2, u.bi.pData); + assert( memIsValid(pData) ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->pCursor!=0 ); + assert( pC->pseudoTableReg==0 ); + assert( pC->isTable ); + REGISTER_TRACE(pOp->p2, pData); if( pOp->opcode==OP_Insert ){ - u.bi.pKey = &aMem[pOp->p3]; - assert( u.bi.pKey->flags & MEM_Int ); - assert( memIsValid(u.bi.pKey) ); - REGISTER_TRACE(pOp->p3, u.bi.pKey); - u.bi.iKey = u.bi.pKey->u.i; + pKey = &aMem[pOp->p3]; + assert( pKey->flags & MEM_Int ); + assert( memIsValid(pKey) ); + REGISTER_TRACE(pOp->p3, pKey); + iKey = pKey->u.i; }else{ assert( pOp->opcode==OP_InsertInt ); - u.bi.iKey = pOp->p3; + iKey = pOp->p3; } if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; - if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = u.bi.iKey; - if( u.bi.pData->flags & MEM_Null ){ - u.bi.pData->z = 0; - u.bi.pData->n = 0; + if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = iKey; + if( pData->flags & MEM_Null ){ + pData->z = 0; + pData->n = 0; }else{ - assert( u.bi.pData->flags & (MEM_Blob|MEM_Str) ); + assert( pData->flags & (MEM_Blob|MEM_Str) ); } - u.bi.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bi.pC->seekResult : 0); - if( u.bi.pData->flags & MEM_Zero ){ - u.bi.nZero = u.bi.pData->u.nZero; + seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0); + if( pData->flags & MEM_Zero ){ + nZero = pData->u.nZero; }else{ - u.bi.nZero = 0; + nZero = 0; } - sqlite3BtreeSetCachedRowid(u.bi.pC->pCursor, 0); - rc = sqlite3BtreeInsert(u.bi.pC->pCursor, 0, u.bi.iKey, - u.bi.pData->z, u.bi.pData->n, u.bi.nZero, - pOp->p5 & OPFLAG_APPEND, u.bi.seekResult + sqlite3BtreeSetCachedRowid(pC->pCursor, 0); + rc = sqlite3BtreeInsert(pC->pCursor, 0, iKey, + pData->z, pData->n, nZero, + (pOp->p5 & OPFLAG_APPEND)!=0, seekResult ); - u.bi.pC->rowidIsValid = 0; - u.bi.pC->deferredMoveto = 0; - u.bi.pC->cacheStatus = CACHE_STALE; + pC->rowidIsValid = 0; + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; /* Invoke the update-hook if required. */ if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ - u.bi.zDb = db->aDb[u.bi.pC->iDb].zName; - u.bi.zTbl = pOp->p4.z; - u.bi.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); - assert( u.bi.pC->isTable ); - db->xUpdateCallback(db->pUpdateArg, u.bi.op, u.bi.zDb, u.bi.zTbl, u.bi.iKey); - assert( u.bi.pC->iDb>=0 ); + zDb = db->aDb[pC->iDb].zName; + zTbl = pOp->p4.z; + op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); + assert( pC->isTable ); + db->xUpdateCallback(db->pUpdateArg, op, zDb, zTbl, iKey); + assert( pC->iDb>=0 ); } break; } @@ -70344,47 +70563,35 @@ case OP_InsertInt: { ** using OP_NotFound prior to invoking this opcode. */ case OP_Delete: { -#if 0 /* local variables moved into u.bj */ i64 iKey; VdbeCursor *pC; -#endif /* local variables moved into u.bj */ - u.bj.iKey = 0; assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bj.pC = p->apCsr[pOp->p1]; - assert( u.bj.pC!=0 ); - assert( u.bj.pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */ - - /* If the update-hook will be invoked, set u.bj.iKey to the rowid of the - ** row being deleted. - */ - if( db->xUpdateCallback && pOp->p4.z ){ - assert( u.bj.pC->isTable ); - assert( u.bj.pC->rowidIsValid ); /* lastRowid set by previous OP_NotFound */ - u.bj.iKey = u.bj.pC->lastRowid; - } + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */ + iKey = pC->lastRowid; /* Only used for the update hook */ /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or ** OP_Column on the same table without any intervening operations that - ** might move or invalidate the cursor. Hence cursor u.bj.pC is always pointing + ** might move or invalidate the cursor. Hence cursor pC is always pointing ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation ** below is always a no-op and cannot fail. We will run it anyhow, though, ** to guard against future changes to the code generator. **/ - assert( u.bj.pC->deferredMoveto==0 ); - rc = sqlite3VdbeCursorMoveto(u.bj.pC); + assert( pC->deferredMoveto==0 ); + rc = sqlite3VdbeCursorMoveto(pC); if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; - sqlite3BtreeSetCachedRowid(u.bj.pC->pCursor, 0); - rc = sqlite3BtreeDelete(u.bj.pC->pCursor); - u.bj.pC->cacheStatus = CACHE_STALE; + sqlite3BtreeSetCachedRowid(pC->pCursor, 0); + rc = sqlite3BtreeDelete(pC->pCursor); + pC->cacheStatus = CACHE_STALE; /* Invoke the update-hook if required. */ - if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){ - const char *zDb = db->aDb[u.bj.pC->iDb].zName; - const char *zTbl = pOp->p4.z; - db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bj.iKey); - assert( u.bj.pC->iDb>=0 ); + if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z && pC->isTable ){ + db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, + db->aDb[pC->iDb].zName, pOp->p4.z, iKey); + assert( pC->iDb>=0 ); } if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++; break; @@ -70402,46 +70609,55 @@ case OP_ResetCount: { break; } -/* Opcode: SorterCompare P1 P2 P3 +/* Opcode: SorterCompare P1 P2 P3 P4 +** Synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2 ** -** P1 is a sorter cursor. This instruction compares the record blob in -** register P3 with the entry that the sorter cursor currently points to. -** If, excluding the rowid fields at the end, the two records are a match, -** fall through to the next instruction. Otherwise, jump to instruction P2. +** P1 is a sorter cursor. This instruction compares a prefix of the +** the record blob in register P3 against a prefix of the entry that +** the sorter cursor currently points to. The final P4 fields of both +** the P3 and sorter record are ignored. +** +** If either P3 or the sorter contains a NULL in one of their significant +** fields (not counting the P4 fields at the end which are ignored) then +** the comparison is assumed to be equal. +** +** Fall through to next instruction if the two records compare equal to +** each other. Jump to P2 if they are different. */ case OP_SorterCompare: { -#if 0 /* local variables moved into u.bk */ VdbeCursor *pC; int res; -#endif /* local variables moved into u.bk */ + int nIgnore; - u.bk.pC = p->apCsr[pOp->p1]; - assert( isSorter(u.bk.pC) ); + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + assert( pOp->p4type==P4_INT32 ); pIn3 = &aMem[pOp->p3]; - rc = sqlite3VdbeSorterCompare(u.bk.pC, pIn3, &u.bk.res); - if( u.bk.res ){ + nIgnore = pOp->p4.i; + rc = sqlite3VdbeSorterCompare(pC, pIn3, nIgnore, &res); + if( res ){ pc = pOp->p2-1; } break; }; /* Opcode: SorterData P1 P2 * * * +** Synopsis: r[P2]=data ** ** Write into register P2 the current sorter data for sorter cursor P1. */ case OP_SorterData: { -#if 0 /* local variables moved into u.bl */ VdbeCursor *pC; -#endif /* local variables moved into u.bl */ pOut = &aMem[pOp->p2]; - u.bl.pC = p->apCsr[pOp->p1]; - assert( u.bl.pC->isSorter ); - rc = sqlite3VdbeSorterRowkey(u.bl.pC, pOut); + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + rc = sqlite3VdbeSorterRowkey(pC, pOut); break; } /* Opcode: RowData P1 P2 * * * +** Synopsis: r[P2]=data ** ** Write into register P2 the complete row data for cursor P1. ** There is no interpretation of the data. @@ -70452,6 +70668,7 @@ case OP_SorterData: { ** of a real table, not a pseudo-table. */ /* Opcode: RowKey P1 P2 * * * +** Synopsis: r[P2]=key ** ** Write into register P2 the complete row key for cursor P1. ** There is no interpretation of the data. @@ -70463,69 +70680,69 @@ case OP_SorterData: { */ case OP_RowKey: case OP_RowData: { -#if 0 /* local variables moved into u.bm */ VdbeCursor *pC; BtCursor *pCrsr; u32 n; i64 n64; -#endif /* local variables moved into u.bm */ pOut = &aMem[pOp->p2]; memAboutToChange(p, pOut); /* Note that RowKey and RowData are really exactly the same instruction */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bm.pC = p->apCsr[pOp->p1]; - assert( u.bm.pC->isSorter==0 ); - assert( u.bm.pC->isTable || pOp->opcode!=OP_RowData ); - assert( u.bm.pC->isIndex || pOp->opcode==OP_RowData ); - assert( u.bm.pC!=0 ); - assert( u.bm.pC->nullRow==0 ); - assert( u.bm.pC->pseudoTableReg==0 ); - assert( u.bm.pC->pCursor!=0 ); - u.bm.pCrsr = u.bm.pC->pCursor; - assert( sqlite3BtreeCursorIsValid(u.bm.pCrsr) ); + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC)==0 ); + assert( pC->isTable || pOp->opcode!=OP_RowData ); + assert( pC->isTable==0 || pOp->opcode==OP_RowData ); + assert( pC!=0 ); + assert( pC->nullRow==0 ); + assert( pC->pseudoTableReg==0 ); + assert( pC->pCursor!=0 ); + pCrsr = pC->pCursor; + assert( sqlite3BtreeCursorIsValid(pCrsr) ); /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or ** OP_Rewind/Op_Next with no intervening instructions that might invalidate ** the cursor. Hence the following sqlite3VdbeCursorMoveto() call is always ** a no-op and can never fail. But we leave it in place as a safety. */ - assert( u.bm.pC->deferredMoveto==0 ); - rc = sqlite3VdbeCursorMoveto(u.bm.pC); + assert( pC->deferredMoveto==0 ); + rc = sqlite3VdbeCursorMoveto(pC); if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; - if( u.bm.pC->isIndex ){ - assert( !u.bm.pC->isTable ); - VVA_ONLY(rc =) sqlite3BtreeKeySize(u.bm.pCrsr, &u.bm.n64); + if( pC->isTable==0 ){ + assert( !pC->isTable ); + VVA_ONLY(rc =) sqlite3BtreeKeySize(pCrsr, &n64); assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */ - if( u.bm.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + if( n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } - u.bm.n = (u32)u.bm.n64; + n = (u32)n64; }else{ - VVA_ONLY(rc =) sqlite3BtreeDataSize(u.bm.pCrsr, &u.bm.n); + VVA_ONLY(rc =) sqlite3BtreeDataSize(pCrsr, &n); assert( rc==SQLITE_OK ); /* DataSize() cannot fail */ - if( u.bm.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ + if( n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } } - if( sqlite3VdbeMemGrow(pOut, u.bm.n, 0) ){ + if( sqlite3VdbeMemGrow(pOut, n, 0) ){ goto no_mem; } - pOut->n = u.bm.n; + pOut->n = n; MemSetTypeFlag(pOut, MEM_Blob); - if( u.bm.pC->isIndex ){ - rc = sqlite3BtreeKey(u.bm.pCrsr, 0, u.bm.n, pOut->z); + if( pC->isTable==0 ){ + rc = sqlite3BtreeKey(pCrsr, 0, n, pOut->z); }else{ - rc = sqlite3BtreeData(u.bm.pCrsr, 0, u.bm.n, pOut->z); + rc = sqlite3BtreeData(pCrsr, 0, n, pOut->z); } pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */ UPDATE_MAX_BLOBSIZE(pOut); + REGISTER_TRACE(pOp->p2, pOut); break; } /* Opcode: Rowid P1 P2 * * * +** Synopsis: r[P2]=rowid ** ** Store in register P2 an integer which is the key of the table entry that ** P1 is currently point to. @@ -70535,42 +70752,40 @@ case OP_RowData: { ** one opcode now works for both table types. */ case OP_Rowid: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bn */ VdbeCursor *pC; i64 v; sqlite3_vtab *pVtab; const sqlite3_module *pModule; -#endif /* local variables moved into u.bn */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bn.pC = p->apCsr[pOp->p1]; - assert( u.bn.pC!=0 ); - assert( u.bn.pC->pseudoTableReg==0 || u.bn.pC->nullRow ); - if( u.bn.pC->nullRow ){ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->pseudoTableReg==0 || pC->nullRow ); + if( pC->nullRow ){ pOut->flags = MEM_Null; break; - }else if( u.bn.pC->deferredMoveto ){ - u.bn.v = u.bn.pC->movetoTarget; + }else if( pC->deferredMoveto ){ + v = pC->movetoTarget; #ifndef SQLITE_OMIT_VIRTUALTABLE - }else if( u.bn.pC->pVtabCursor ){ - u.bn.pVtab = u.bn.pC->pVtabCursor->pVtab; - u.bn.pModule = u.bn.pVtab->pModule; - assert( u.bn.pModule->xRowid ); - rc = u.bn.pModule->xRowid(u.bn.pC->pVtabCursor, &u.bn.v); - sqlite3VtabImportErrmsg(p, u.bn.pVtab); + }else if( pC->pVtabCursor ){ + pVtab = pC->pVtabCursor->pVtab; + pModule = pVtab->pModule; + assert( pModule->xRowid ); + rc = pModule->xRowid(pC->pVtabCursor, &v); + sqlite3VtabImportErrmsg(p, pVtab); #endif /* SQLITE_OMIT_VIRTUALTABLE */ }else{ - assert( u.bn.pC->pCursor!=0 ); - rc = sqlite3VdbeCursorMoveto(u.bn.pC); + assert( pC->pCursor!=0 ); + rc = sqlite3VdbeCursorMoveto(pC); if( rc ) goto abort_due_to_error; - if( u.bn.pC->rowidIsValid ){ - u.bn.v = u.bn.pC->lastRowid; + if( pC->rowidIsValid ){ + v = pC->lastRowid; }else{ - rc = sqlite3BtreeKeySize(u.bn.pC->pCursor, &u.bn.v); + rc = sqlite3BtreeKeySize(pC->pCursor, &v); assert( rc==SQLITE_OK ); /* Always so because of CursorMoveto() above */ } } - pOut->u.i = u.bn.v; + pOut->u.i = v; break; } @@ -70581,18 +70796,16 @@ case OP_Rowid: { /* out2-prerelease */ ** write a NULL. */ case OP_NullRow: { -#if 0 /* local variables moved into u.bo */ VdbeCursor *pC; -#endif /* local variables moved into u.bo */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bo.pC = p->apCsr[pOp->p1]; - assert( u.bo.pC!=0 ); - u.bo.pC->nullRow = 1; - u.bo.pC->rowidIsValid = 0; - assert( u.bo.pC->pCursor || u.bo.pC->pVtabCursor ); - if( u.bo.pC->pCursor ){ - sqlite3BtreeClearCursor(u.bo.pC->pCursor); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pC->nullRow = 1; + pC->rowidIsValid = 0; + pC->cacheStatus = CACHE_STALE; + if( pC->pCursor ){ + sqlite3BtreeClearCursor(pC->pCursor); } break; } @@ -70606,25 +70819,22 @@ case OP_NullRow: { ** to the following instruction. */ case OP_Last: { /* jump */ -#if 0 /* local variables moved into u.bp */ VdbeCursor *pC; BtCursor *pCrsr; int res; -#endif /* local variables moved into u.bp */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bp.pC = p->apCsr[pOp->p1]; - assert( u.bp.pC!=0 ); - u.bp.pCrsr = u.bp.pC->pCursor; - u.bp.res = 0; - if( ALWAYS(u.bp.pCrsr!=0) ){ - rc = sqlite3BtreeLast(u.bp.pCrsr, &u.bp.res); - } - u.bp.pC->nullRow = (u8)u.bp.res; - u.bp.pC->deferredMoveto = 0; - u.bp.pC->rowidIsValid = 0; - u.bp.pC->cacheStatus = CACHE_STALE; - if( pOp->p2>0 && u.bp.res ){ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->pCursor; + res = 0; + assert( pCrsr!=0 ); + rc = sqlite3BtreeLast(pCrsr, &res); + pC->nullRow = (u8)res; + pC->deferredMoveto = 0; + pC->rowidIsValid = 0; + pC->cacheStatus = CACHE_STALE; + if( pOp->p2>0 && res ){ pc = pOp->p2 - 1; } break; @@ -70661,44 +70871,42 @@ case OP_Sort: { /* jump */ ** to the following instruction. */ case OP_Rewind: { /* jump */ -#if 0 /* local variables moved into u.bq */ VdbeCursor *pC; BtCursor *pCrsr; int res; -#endif /* local variables moved into u.bq */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bq.pC = p->apCsr[pOp->p1]; - assert( u.bq.pC!=0 ); - assert( u.bq.pC->isSorter==(pOp->opcode==OP_SorterSort) ); - u.bq.res = 1; - if( isSorter(u.bq.pC) ){ - rc = sqlite3VdbeSorterRewind(db, u.bq.pC, &u.bq.res); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) ); + res = 1; + if( isSorter(pC) ){ + rc = sqlite3VdbeSorterRewind(db, pC, &res); }else{ - u.bq.pCrsr = u.bq.pC->pCursor; - assert( u.bq.pCrsr ); - rc = sqlite3BtreeFirst(u.bq.pCrsr, &u.bq.res); - u.bq.pC->atFirst = u.bq.res==0 ?1:0; - u.bq.pC->deferredMoveto = 0; - u.bq.pC->cacheStatus = CACHE_STALE; - u.bq.pC->rowidIsValid = 0; + pCrsr = pC->pCursor; + assert( pCrsr ); + rc = sqlite3BtreeFirst(pCrsr, &res); + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + pC->rowidIsValid = 0; } - u.bq.pC->nullRow = (u8)u.bq.res; + pC->nullRow = (u8)res; assert( pOp->p2>0 && pOp->p2nOp ); - if( u.bq.res ){ + if( res ){ pc = pOp->p2 - 1; } break; } -/* Opcode: Next P1 P2 * P4 P5 +/* Opcode: Next P1 P2 * * P5 ** ** Advance cursor P1 so that it points to the next key/data pair in its ** table or index. If there are no more key/value pairs then fall through ** to the following instruction. But if the cursor advance was successful, ** jump immediately to P2. ** -** The P1 cursor must be for a real table, not a pseudo-table. +** The P1 cursor must be for a real table, not a pseudo-table. P1 must have +** been opened prior to this opcode or the program will segfault. ** ** P4 is always of type P4_ADVANCE. The function pointer points to ** sqlite3BtreeNext(). @@ -70706,7 +70914,12 @@ case OP_Rewind: { /* jump */ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. ** -** See also: Prev +** See also: Prev, NextIfOpen +*/ +/* Opcode: NextIfOpen P1 P2 * * P5 +** +** This opcode works just like OP_Next except that if cursor P1 is not +** open it behaves a no-op. */ /* Opcode: Prev P1 P2 * * P5 ** @@ -70715,7 +70928,8 @@ case OP_Rewind: { /* jump */ ** to the following instruction. But if the cursor backup was successful, ** jump immediately to P2. ** -** The P1 cursor must be for a real table, not a pseudo-table. +** The P1 cursor must be for a real table, not a pseudo-table. If P1 is +** not open then the behavior is undefined. ** ** P4 is always of type P4_ADVANCE. The function pointer points to ** sqlite3BtreePrevious(). @@ -70723,46 +70937,54 @@ case OP_Rewind: { /* jump */ ** If P5 is positive and the jump is taken, then event counter ** number P5-1 in the prepared statement is incremented. */ -case OP_SorterNext: /* jump */ -case OP_Prev: /* jump */ -case OP_Next: { /* jump */ -#if 0 /* local variables moved into u.br */ +/* Opcode: PrevIfOpen P1 P2 * * P5 +** +** This opcode works just like OP_Prev except that if cursor P1 is not +** open it behaves a no-op. +*/ +case OP_SorterNext: { /* jump */ VdbeCursor *pC; int res; -#endif /* local variables moved into u.br */ + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + rc = sqlite3VdbeSorterNext(db, pC, &res); + goto next_tail; +case OP_PrevIfOpen: /* jump */ +case OP_NextIfOpen: /* jump */ + if( p->apCsr[pOp->p1]==0 ) break; + /* Fall through */ +case OP_Prev: /* jump */ +case OP_Next: /* jump */ assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p5aCounter) ); - u.br.pC = p->apCsr[pOp->p1]; - if( u.br.pC==0 ){ - break; /* See ticket #2273 */ - } - assert( u.br.pC->isSorter==(pOp->opcode==OP_SorterNext) ); - if( isSorter(u.br.pC) ){ - assert( pOp->opcode==OP_SorterNext ); - rc = sqlite3VdbeSorterNext(db, u.br.pC, &u.br.res); - }else{ - /* u.br.res = 1; // Always initialized by the xAdvance() call */ - assert( u.br.pC->deferredMoveto==0 ); - assert( u.br.pC->pCursor ); - assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); - assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); - rc = pOp->p4.xAdvance(u.br.pC->pCursor, &u.br.res); - } - u.br.pC->nullRow = (u8)u.br.res; - u.br.pC->cacheStatus = CACHE_STALE; - if( u.br.res==0 ){ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->deferredMoveto==0 ); + assert( pC->pCursor ); + assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); + assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); + assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext ); + assert( pOp->opcode!=OP_PrevIfOpen || pOp->p4.xAdvance==sqlite3BtreePrevious); + rc = pOp->p4.xAdvance(pC->pCursor, &res); +next_tail: + pC->cacheStatus = CACHE_STALE; + if( res==0 ){ + pC->nullRow = 0; pc = pOp->p2 - 1; p->aCounter[pOp->p5]++; #ifdef SQLITE_TEST sqlite3_search_count++; #endif + }else{ + pC->nullRow = 1; } - u.br.pC->rowidIsValid = 0; + pC->rowidIsValid = 0; goto check_for_interrupt; } /* Opcode: IdxInsert P1 P2 P3 * P5 +** Synopsis: key=r[P2] ** ** Register P2 holds an SQL index key made using the ** MakeRecord instructions. This opcode writes that key @@ -70776,79 +70998,77 @@ case OP_Next: { /* jump */ */ case OP_SorterInsert: /* in2 */ case OP_IdxInsert: { /* in2 */ -#if 0 /* local variables moved into u.bs */ VdbeCursor *pC; BtCursor *pCrsr; int nKey; const char *zKey; -#endif /* local variables moved into u.bs */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bs.pC = p->apCsr[pOp->p1]; - assert( u.bs.pC!=0 ); - assert( u.bs.pC->isSorter==(pOp->opcode==OP_SorterInsert) ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( isSorter(pC)==(pOp->opcode==OP_SorterInsert) ); pIn2 = &aMem[pOp->p2]; assert( pIn2->flags & MEM_Blob ); - u.bs.pCrsr = u.bs.pC->pCursor; - if( ALWAYS(u.bs.pCrsr!=0) ){ - assert( u.bs.pC->isTable==0 ); - rc = ExpandBlob(pIn2); - if( rc==SQLITE_OK ){ - if( isSorter(u.bs.pC) ){ - rc = sqlite3VdbeSorterWrite(db, u.bs.pC, pIn2); - }else{ - u.bs.nKey = pIn2->n; - u.bs.zKey = pIn2->z; - rc = sqlite3BtreeInsert(u.bs.pCrsr, u.bs.zKey, u.bs.nKey, "", 0, 0, pOp->p3, - ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bs.pC->seekResult : 0) - ); - assert( u.bs.pC->deferredMoveto==0 ); - u.bs.pC->cacheStatus = CACHE_STALE; - } + pCrsr = pC->pCursor; + if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; + assert( pCrsr!=0 ); + assert( pC->isTable==0 ); + rc = ExpandBlob(pIn2); + if( rc==SQLITE_OK ){ + if( isSorter(pC) ){ + rc = sqlite3VdbeSorterWrite(db, pC, pIn2); + }else{ + nKey = pIn2->n; + zKey = pIn2->z; + rc = sqlite3BtreeInsert(pCrsr, zKey, nKey, "", 0, 0, pOp->p3, + ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0) + ); + assert( pC->deferredMoveto==0 ); + pC->cacheStatus = CACHE_STALE; } } break; } /* Opcode: IdxDelete P1 P2 P3 * * +** Synopsis: key=r[P2@P3] ** ** The content of P3 registers starting at register P2 form ** an unpacked index key. This opcode removes that entry from the ** index opened by cursor P1. */ case OP_IdxDelete: { -#if 0 /* local variables moved into u.bt */ VdbeCursor *pC; BtCursor *pCrsr; int res; UnpackedRecord r; -#endif /* local variables moved into u.bt */ assert( pOp->p3>0 ); assert( pOp->p2>0 && pOp->p2+pOp->p3<=(p->nMem-p->nCursor)+1 ); assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bt.pC = p->apCsr[pOp->p1]; - assert( u.bt.pC!=0 ); - u.bt.pCrsr = u.bt.pC->pCursor; - if( ALWAYS(u.bt.pCrsr!=0) ){ - u.bt.r.pKeyInfo = u.bt.pC->pKeyInfo; - u.bt.r.nField = (u16)pOp->p3; - u.bt.r.flags = 0; - u.bt.r.aMem = &aMem[pOp->p2]; + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->pCursor; + assert( pCrsr!=0 ); + assert( pOp->p5==0 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp->p3; + r.flags = UNPACKED_PREFIX_MATCH; + r.aMem = &aMem[pOp->p2]; #ifdef SQLITE_DEBUG - { int i; for(i=0; ideferredMoveto==0 ); - u.bt.pC->cacheStatus = CACHE_STALE; + rc = sqlite3BtreeMovetoUnpacked(pCrsr, &r, 0, 0, &res); + if( rc==SQLITE_OK && res==0 ){ + rc = sqlite3BtreeDelete(pCrsr); } + assert( pC->deferredMoveto==0 ); + pC->cacheStatus = CACHE_STALE; break; } /* Opcode: IdxRowid P1 P2 * * * +** Synopsis: r[P2]=rowid ** ** Write into register P2 an integer which is the last entry in the record at ** the end of the index key pointed to by cursor P1. This integer should be @@ -70857,35 +71077,34 @@ case OP_IdxDelete: { ** See also: Rowid, MakeRecord. */ case OP_IdxRowid: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bu */ BtCursor *pCrsr; VdbeCursor *pC; i64 rowid; -#endif /* local variables moved into u.bu */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bu.pC = p->apCsr[pOp->p1]; - assert( u.bu.pC!=0 ); - u.bu.pCrsr = u.bu.pC->pCursor; + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->pCursor; + assert( pCrsr!=0 ); pOut->flags = MEM_Null; - if( ALWAYS(u.bu.pCrsr!=0) ){ - rc = sqlite3VdbeCursorMoveto(u.bu.pC); - if( NEVER(rc) ) goto abort_due_to_error; - assert( u.bu.pC->deferredMoveto==0 ); - assert( u.bu.pC->isTable==0 ); - if( !u.bu.pC->nullRow ){ - rc = sqlite3VdbeIdxRowid(db, u.bu.pCrsr, &u.bu.rowid); - if( rc!=SQLITE_OK ){ - goto abort_due_to_error; - } - pOut->u.i = u.bu.rowid; - pOut->flags = MEM_Int; + rc = sqlite3VdbeCursorMoveto(pC); + if( NEVER(rc) ) goto abort_due_to_error; + assert( pC->deferredMoveto==0 ); + assert( pC->isTable==0 ); + if( !pC->nullRow ){ + rowid = 0; /* Not needed. Only used to silence a warning. */ + rc = sqlite3VdbeIdxRowid(db, pCrsr, &rowid); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; } + pOut->u.i = rowid; + pOut->flags = MEM_Int; } break; } /* Opcode: IdxGE P1 P2 P3 P4 P5 +** Synopsis: key=r[P3@P4] ** ** The P4 register values beginning with P3 form an unpacked index ** key that omits the ROWID. Compare this key value against the index @@ -70900,6 +71119,7 @@ case OP_IdxRowid: { /* out2-prerelease */ ** the result is false whereas it would be true with IdxGT. */ /* Opcode: IdxLT P1 P2 P3 P4 P5 +** Synopsis: key=r[P3@P4] ** ** The P4 register values beginning with P3 form an unpacked index ** key that omits the ROWID. Compare this key value against the index @@ -70913,41 +71133,39 @@ case OP_IdxRowid: { /* out2-prerelease */ */ case OP_IdxLT: /* jump */ case OP_IdxGE: { /* jump */ -#if 0 /* local variables moved into u.bv */ VdbeCursor *pC; int res; UnpackedRecord r; -#endif /* local variables moved into u.bv */ assert( pOp->p1>=0 && pOp->p1nCursor ); - u.bv.pC = p->apCsr[pOp->p1]; - assert( u.bv.pC!=0 ); - assert( u.bv.pC->isOrdered ); - if( ALWAYS(u.bv.pC->pCursor!=0) ){ - assert( u.bv.pC->deferredMoveto==0 ); - assert( pOp->p5==0 || pOp->p5==1 ); - assert( pOp->p4type==P4_INT32 ); - u.bv.r.pKeyInfo = u.bv.pC->pKeyInfo; - u.bv.r.nField = (u16)pOp->p4.i; - if( pOp->p5 ){ - u.bv.r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH; - }else{ - u.bv.r.flags = UNPACKED_PREFIX_MATCH; - } - u.bv.r.aMem = &aMem[pOp->p3]; + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->isOrdered ); + assert( pC->pCursor!=0); + assert( pC->deferredMoveto==0 ); + assert( pOp->p5==0 || pOp->p5==1 ); + assert( pOp->p4type==P4_INT32 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp->p4.i; + if( pOp->p5 ){ + r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH; + }else{ + r.flags = UNPACKED_PREFIX_MATCH; + } + r.aMem = &aMem[pOp->p3]; #ifdef SQLITE_DEBUG - { int i; for(i=0; iopcode==OP_IdxLT ){ - u.bv.res = -u.bv.res; - }else{ - assert( pOp->opcode==OP_IdxGE ); - u.bv.res++; - } - if( u.bv.res>0 ){ - pc = pOp->p2 - 1 ; - } + res = 0; /* Not needed. Only used to silence a warning. */ + rc = sqlite3VdbeIdxKeyCompare(pC, &r, &res); + if( pOp->opcode==OP_IdxLT ){ + res = -res; + }else{ + assert( pOp->opcode==OP_IdxGE ); + res++; + } + if( res>0 ){ + pc = pOp->p2 - 1 ; } break; } @@ -70973,43 +71191,42 @@ case OP_IdxGE: { /* jump */ ** See also: Clear */ case OP_Destroy: { /* out2-prerelease */ -#if 0 /* local variables moved into u.bw */ int iMoved; int iCnt; Vdbe *pVdbe; int iDb; -#endif /* local variables moved into u.bw */ assert( p->readOnly==0 ); #ifndef SQLITE_OMIT_VIRTUALTABLE - u.bw.iCnt = 0; - for(u.bw.pVdbe=db->pVdbe; u.bw.pVdbe; u.bw.pVdbe = u.bw.pVdbe->pNext){ - if( u.bw.pVdbe->magic==VDBE_MAGIC_RUN && u.bw.pVdbe->bIsReader - && u.bw.pVdbe->inVtabMethod<2 && u.bw.pVdbe->pc>=0 + iCnt = 0; + for(pVdbe=db->pVdbe; pVdbe; pVdbe = pVdbe->pNext){ + if( pVdbe->magic==VDBE_MAGIC_RUN && pVdbe->bIsReader + && pVdbe->inVtabMethod<2 && pVdbe->pc>=0 ){ - u.bw.iCnt++; + iCnt++; } } #else - u.bw.iCnt = db->nVdbeRead; + iCnt = db->nVdbeRead; #endif pOut->flags = MEM_Null; - if( u.bw.iCnt>1 ){ + if( iCnt>1 ){ rc = SQLITE_LOCKED; p->errorAction = OE_Abort; }else{ - u.bw.iDb = pOp->p3; - assert( u.bw.iCnt==1 ); - assert( (p->btreeMask & (((yDbMask)1)<aDb[u.bw.iDb].pBt, pOp->p1, &u.bw.iMoved); + iDb = pOp->p3; + assert( iCnt==1 ); + assert( (p->btreeMask & (((yDbMask)1)<aDb[iDb].pBt, pOp->p1, &iMoved); pOut->flags = MEM_Int; - pOut->u.i = u.bw.iMoved; + pOut->u.i = iMoved; #ifndef SQLITE_OMIT_AUTOVACUUM - if( rc==SQLITE_OK && u.bw.iMoved!=0 ){ - sqlite3RootPageMoved(db, u.bw.iDb, u.bw.iMoved, pOp->p1); + if( rc==SQLITE_OK && iMoved!=0 ){ + sqlite3RootPageMoved(db, iDb, iMoved, pOp->p1); /* All OP_Destroy operations occur on the same btree */ - assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.bw.iDb+1 ); - resetSchemaOnFault = u.bw.iDb+1; + assert( resetSchemaOnFault==0 || resetSchemaOnFault==iDb+1 ); + resetSchemaOnFault = iDb+1; } #endif } @@ -71035,29 +71252,28 @@ case OP_Destroy: { /* out2-prerelease */ ** See also: Destroy */ case OP_Clear: { -#if 0 /* local variables moved into u.bx */ int nChange; -#endif /* local variables moved into u.bx */ - - u.bx.nChange = 0; + + nChange = 0; assert( p->readOnly==0 ); assert( pOp->p1!=1 ); assert( (p->btreeMask & (((yDbMask)1)<p2))!=0 ); rc = sqlite3BtreeClearTable( - db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bx.nChange : 0) + db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &nChange : 0) ); if( pOp->p3 ){ - p->nChange += u.bx.nChange; + p->nChange += nChange; if( pOp->p3>0 ){ assert( memIsValid(&aMem[pOp->p3]) ); memAboutToChange(p, &aMem[pOp->p3]); - aMem[pOp->p3].u.i += u.bx.nChange; + aMem[pOp->p3].u.i += nChange; } } break; } /* Opcode: CreateTable P1 P2 * * * +** Synopsis: r[P2]=root iDb=P1 ** ** Allocate a new table in the main database file if P1==0 or in the ** auxiliary database file if P1==1 or in an attached database if @@ -71071,6 +71287,7 @@ case OP_Clear: { ** See also: CreateIndex */ /* Opcode: CreateIndex P1 P2 * * * +** Synopsis: r[P2]=root iDb=P1 ** ** Allocate a new index in the main database file if P1==0 or in the ** auxiliary database file if P1==1 or in an attached database if @@ -71081,26 +71298,24 @@ case OP_Clear: { */ case OP_CreateIndex: /* out2-prerelease */ case OP_CreateTable: { /* out2-prerelease */ -#if 0 /* local variables moved into u.by */ int pgno; int flags; Db *pDb; -#endif /* local variables moved into u.by */ - u.by.pgno = 0; + pgno = 0; assert( pOp->p1>=0 && pOp->p1nDb ); assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); assert( p->readOnly==0 ); - u.by.pDb = &db->aDb[pOp->p1]; - assert( u.by.pDb->pBt!=0 ); + pDb = &db->aDb[pOp->p1]; + assert( pDb->pBt!=0 ); if( pOp->opcode==OP_CreateTable ){ - /* u.by.flags = BTREE_INTKEY; */ - u.by.flags = BTREE_INTKEY; + /* flags = BTREE_INTKEY; */ + flags = BTREE_INTKEY; }else{ - u.by.flags = BTREE_BLOBKEY; + flags = BTREE_BLOBKEY; } - rc = sqlite3BtreeCreateTable(u.by.pDb->pBt, &u.by.pgno, u.by.flags); - pOut->u.i = u.by.pgno; + rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, flags); + pOut->u.i = pgno; break; } @@ -71113,44 +71328,42 @@ case OP_CreateTable: { /* out2-prerelease */ ** then runs the new virtual machine. It is thus a re-entrant opcode. */ case OP_ParseSchema: { -#if 0 /* local variables moved into u.bz */ int iDb; const char *zMaster; char *zSql; InitData initData; -#endif /* local variables moved into u.bz */ /* Any prepared statement that invokes this opcode will hold mutexes - ** on every btree. This is a prerequisite for invoking + ** on every btree. This is a prerequisite for invoking ** sqlite3InitCallback(). */ #ifdef SQLITE_DEBUG - for(u.bz.iDb=0; u.bz.iDbnDb; u.bz.iDb++){ - assert( u.bz.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.bz.iDb].pBt) ); + for(iDb=0; iDbnDb; iDb++){ + assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); } #endif - u.bz.iDb = pOp->p1; - assert( u.bz.iDb>=0 && u.bz.iDbnDb ); - assert( DbHasProperty(db, u.bz.iDb, DB_SchemaLoaded) ); + iDb = pOp->p1; + assert( iDb>=0 && iDbnDb ); + assert( DbHasProperty(db, iDb, DB_SchemaLoaded) ); /* Used to be a conditional */ { - u.bz.zMaster = SCHEMA_TABLE(u.bz.iDb); - u.bz.initData.db = db; - u.bz.initData.iDb = pOp->p1; - u.bz.initData.pzErrMsg = &p->zErrMsg; - u.bz.zSql = sqlite3MPrintf(db, + zMaster = SCHEMA_TABLE(iDb); + initData.db = db; + initData.iDb = pOp->p1; + initData.pzErrMsg = &p->zErrMsg; + zSql = sqlite3MPrintf(db, "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid", - db->aDb[u.bz.iDb].zName, u.bz.zMaster, pOp->p4.z); - if( u.bz.zSql==0 ){ + db->aDb[iDb].zName, zMaster, pOp->p4.z); + if( zSql==0 ){ rc = SQLITE_NOMEM; }else{ assert( db->init.busy==0 ); db->init.busy = 1; - u.bz.initData.rc = SQLITE_OK; + initData.rc = SQLITE_OK; assert( !db->mallocFailed ); - rc = sqlite3_exec(db, u.bz.zSql, sqlite3InitCallback, &u.bz.initData, 0); - if( rc==SQLITE_OK ) rc = u.bz.initData.rc; - sqlite3DbFree(db, u.bz.zSql); + rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); + if( rc==SQLITE_OK ) rc = initData.rc; + sqlite3DbFree(db, zSql); db->init.busy = 0; } } @@ -71158,7 +71371,7 @@ case OP_ParseSchema: { if( rc==SQLITE_NOMEM ){ goto no_mem; } - break; + break; } #if !defined(SQLITE_OMIT_ANALYZE) @@ -71234,42 +71447,40 @@ case OP_DropTrigger: { ** This opcode is used to implement the integrity_check pragma. */ case OP_IntegrityCk: { -#if 0 /* local variables moved into u.ca */ int nRoot; /* Number of tables to check. (Number of root pages.) */ int *aRoot; /* Array of rootpage numbers for tables to be checked */ int j; /* Loop counter */ int nErr; /* Number of errors reported */ char *z; /* Text of the error report */ Mem *pnErr; /* Register keeping track of errors remaining */ -#endif /* local variables moved into u.ca */ assert( p->bIsReader ); - u.ca.nRoot = pOp->p2; - assert( u.ca.nRoot>0 ); - u.ca.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.ca.nRoot+1) ); - if( u.ca.aRoot==0 ) goto no_mem; + nRoot = pOp->p2; + assert( nRoot>0 ); + aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(nRoot+1) ); + if( aRoot==0 ) goto no_mem; assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); - u.ca.pnErr = &aMem[pOp->p3]; - assert( (u.ca.pnErr->flags & MEM_Int)!=0 ); - assert( (u.ca.pnErr->flags & (MEM_Str|MEM_Blob))==0 ); + pnErr = &aMem[pOp->p3]; + assert( (pnErr->flags & MEM_Int)!=0 ); + assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 ); pIn1 = &aMem[pOp->p1]; - for(u.ca.j=0; u.ca.jp5nDb ); assert( (p->btreeMask & (((yDbMask)1)<p5))!=0 ); - u.ca.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.ca.aRoot, u.ca.nRoot, - (int)u.ca.pnErr->u.i, &u.ca.nErr); - sqlite3DbFree(db, u.ca.aRoot); - u.ca.pnErr->u.i -= u.ca.nErr; + z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot, + (int)pnErr->u.i, &nErr); + sqlite3DbFree(db, aRoot); + pnErr->u.i -= nErr; sqlite3VdbeMemSetNull(pIn1); - if( u.ca.nErr==0 ){ - assert( u.ca.z==0 ); - }else if( u.ca.z==0 ){ + if( nErr==0 ){ + assert( z==0 ); + }else if( z==0 ){ goto no_mem; }else{ - sqlite3VdbeMemSetStr(pIn1, u.ca.z, -1, SQLITE_UTF8, sqlite3_free); + sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free); } UPDATE_MAX_BLOBSIZE(pIn1); sqlite3VdbeChangeEncoding(pIn1, encoding); @@ -71278,6 +71489,7 @@ case OP_IntegrityCk: { #endif /* SQLITE_OMIT_INTEGRITY_CHECK */ /* Opcode: RowSetAdd P1 P2 * * * +** Synopsis: rowset(P1)=r[P2] ** ** Insert the integer value held by register P2 into a boolean index ** held in register P1. @@ -71297,31 +71509,31 @@ case OP_RowSetAdd: { /* in1, in2 */ } /* Opcode: RowSetRead P1 P2 P3 * * +** Synopsis: r[P3]=rowset(P1) ** ** Extract the smallest value from boolean index P1 and put that value into ** register P3. Or, if boolean index P1 is initially empty, leave P3 ** unchanged and jump to instruction P2. */ case OP_RowSetRead: { /* jump, in1, out3 */ -#if 0 /* local variables moved into u.cb */ i64 val; -#endif /* local variables moved into u.cb */ pIn1 = &aMem[pOp->p1]; - if( (pIn1->flags & MEM_RowSet)==0 - || sqlite3RowSetNext(pIn1->u.pRowSet, &u.cb.val)==0 + if( (pIn1->flags & MEM_RowSet)==0 + || sqlite3RowSetNext(pIn1->u.pRowSet, &val)==0 ){ /* The boolean index is empty */ sqlite3VdbeMemSetNull(pIn1); pc = pOp->p2 - 1; }else{ /* A value was pulled from the index */ - sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.cb.val); + sqlite3VdbeMemSetInt64(&aMem[pOp->p3], val); } goto check_for_interrupt; } /* Opcode: RowSetTest P1 P2 P3 P4 +** Synopsis: if r[P3] in rowset(P1) goto P2 ** ** Register P3 is assumed to hold a 64-bit integer value. If register P1 ** contains a RowSet object and that RowSet object contains @@ -71345,14 +71557,12 @@ case OP_RowSetRead: { /* jump, in1, out3 */ ** inserted as part of some other set). */ case OP_RowSetTest: { /* jump, in1, in3 */ -#if 0 /* local variables moved into u.cc */ int iSet; int exists; -#endif /* local variables moved into u.cc */ pIn1 = &aMem[pOp->p1]; pIn3 = &aMem[pOp->p3]; - u.cc.iSet = pOp->p4.i; + iSet = pOp->p4.i; assert( pIn3->flags&MEM_Int ); /* If there is anything other than a rowset object in memory cell P1, @@ -71364,17 +71574,17 @@ case OP_RowSetTest: { /* jump, in1, in3 */ } assert( pOp->p4type==P4_INT32 ); - assert( u.cc.iSet==-1 || u.cc.iSet>=0 ); - if( u.cc.iSet ){ - u.cc.exists = sqlite3RowSetTest(pIn1->u.pRowSet, - (u8)(u.cc.iSet>=0 ? u.cc.iSet & 0xf : 0xff), + assert( iSet==-1 || iSet>=0 ); + if( iSet ){ + exists = sqlite3RowSetTest(pIn1->u.pRowSet, + (u8)(iSet>=0 ? iSet & 0xf : 0xff), pIn3->u.i); - if( u.cc.exists ){ + if( exists ){ pc = pOp->p2 - 1; break; } } - if( u.cc.iSet>=0 ){ + if( iSet>=0 ){ sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i); } break; @@ -71397,7 +71607,6 @@ case OP_RowSetTest: { /* jump, in1, in3 */ ** P4 is a pointer to the VM containing the trigger program. */ case OP_Program: { /* jump */ -#if 0 /* local variables moved into u.cd */ int nMem; /* Number of memory registers for sub-program */ int nByte; /* Bytes of runtime space required for sub-program */ Mem *pRt; /* Register to allocate runtime space */ @@ -71406,27 +71615,26 @@ case OP_Program: { /* jump */ VdbeFrame *pFrame; /* New vdbe frame to execute in */ SubProgram *pProgram; /* Sub-program to execute */ void *t; /* Token identifying trigger */ -#endif /* local variables moved into u.cd */ - u.cd.pProgram = pOp->p4.pProgram; - u.cd.pRt = &aMem[pOp->p3]; - assert( u.cd.pProgram->nOp>0 ); - - /* If the p5 flag is clear, then recursive invocation of triggers is + pProgram = pOp->p4.pProgram; + pRt = &aMem[pOp->p3]; + assert( pProgram->nOp>0 ); + + /* If the p5 flag is clear, then recursive invocation of triggers is ** disabled for backwards compatibility (p5 is set if this sub-program ** is really a trigger, not a foreign key action, and the flag set ** and cleared by the "PRAGMA recursive_triggers" command is clear). - ** - ** It is recursive invocation of triggers, at the SQL level, that is - ** disabled. In some cases a single trigger may generate more than one - ** SubProgram (if the trigger may be executed with more than one different + ** + ** It is recursive invocation of triggers, at the SQL level, that is + ** disabled. In some cases a single trigger may generate more than one + ** SubProgram (if the trigger may be executed with more than one different ** ON CONFLICT algorithm). SubProgram structures associated with a - ** single trigger all have the same value for the SubProgram.token + ** single trigger all have the same value for the SubProgram.token ** variable. */ if( pOp->p5 ){ - u.cd.t = u.cd.pProgram->token; - for(u.cd.pFrame=p->pFrame; u.cd.pFrame && u.cd.pFrame->token!=u.cd.t; u.cd.pFrame=u.cd.pFrame->pParent); - if( u.cd.pFrame ) break; + t = pProgram->token; + for(pFrame=p->pFrame; pFrame && pFrame->token!=t; pFrame=pFrame->pParent); + if( pFrame ) break; } if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){ @@ -71435,69 +71643,69 @@ case OP_Program: { /* jump */ break; } - /* Register u.cd.pRt is used to store the memory required to save the state + /* Register pRt is used to store the memory required to save the state ** of the current program, and the memory required at runtime to execute - ** the trigger program. If this trigger has been fired before, then u.cd.pRt + ** the trigger program. If this trigger has been fired before, then pRt ** is already allocated. Otherwise, it must be initialized. */ - if( (u.cd.pRt->flags&MEM_Frame)==0 ){ - /* SubProgram.nMem is set to the number of memory cells used by the + if( (pRt->flags&MEM_Frame)==0 ){ + /* SubProgram.nMem is set to the number of memory cells used by the ** program stored in SubProgram.aOp. As well as these, one memory ** cell is required for each cursor used by the program. Set local - ** variable u.cd.nMem (and later, VdbeFrame.nChildMem) to this value. + ** variable nMem (and later, VdbeFrame.nChildMem) to this value. */ - u.cd.nMem = u.cd.pProgram->nMem + u.cd.pProgram->nCsr; - u.cd.nByte = ROUND8(sizeof(VdbeFrame)) - + u.cd.nMem * sizeof(Mem) - + u.cd.pProgram->nCsr * sizeof(VdbeCursor *) - + u.cd.pProgram->nOnce * sizeof(u8); - u.cd.pFrame = sqlite3DbMallocZero(db, u.cd.nByte); - if( !u.cd.pFrame ){ + nMem = pProgram->nMem + pProgram->nCsr; + nByte = ROUND8(sizeof(VdbeFrame)) + + nMem * sizeof(Mem) + + pProgram->nCsr * sizeof(VdbeCursor *) + + pProgram->nOnce * sizeof(u8); + pFrame = sqlite3DbMallocZero(db, nByte); + if( !pFrame ){ goto no_mem; } - sqlite3VdbeMemRelease(u.cd.pRt); - u.cd.pRt->flags = MEM_Frame; - u.cd.pRt->u.pFrame = u.cd.pFrame; + sqlite3VdbeMemRelease(pRt); + pRt->flags = MEM_Frame; + pRt->u.pFrame = pFrame; - u.cd.pFrame->v = p; - u.cd.pFrame->nChildMem = u.cd.nMem; - u.cd.pFrame->nChildCsr = u.cd.pProgram->nCsr; - u.cd.pFrame->pc = pc; - u.cd.pFrame->aMem = p->aMem; - u.cd.pFrame->nMem = p->nMem; - u.cd.pFrame->apCsr = p->apCsr; - u.cd.pFrame->nCursor = p->nCursor; - u.cd.pFrame->aOp = p->aOp; - u.cd.pFrame->nOp = p->nOp; - u.cd.pFrame->token = u.cd.pProgram->token; - u.cd.pFrame->aOnceFlag = p->aOnceFlag; - u.cd.pFrame->nOnceFlag = p->nOnceFlag; + pFrame->v = p; + pFrame->nChildMem = nMem; + pFrame->nChildCsr = pProgram->nCsr; + pFrame->pc = pc; + pFrame->aMem = p->aMem; + pFrame->nMem = p->nMem; + pFrame->apCsr = p->apCsr; + pFrame->nCursor = p->nCursor; + pFrame->aOp = p->aOp; + pFrame->nOp = p->nOp; + pFrame->token = pProgram->token; + pFrame->aOnceFlag = p->aOnceFlag; + pFrame->nOnceFlag = p->nOnceFlag; - u.cd.pEnd = &VdbeFrameMem(u.cd.pFrame)[u.cd.pFrame->nChildMem]; - for(u.cd.pMem=VdbeFrameMem(u.cd.pFrame); u.cd.pMem!=u.cd.pEnd; u.cd.pMem++){ - u.cd.pMem->flags = MEM_Invalid; - u.cd.pMem->db = db; + pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; + for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ + pMem->flags = MEM_Invalid; + pMem->db = db; } }else{ - u.cd.pFrame = u.cd.pRt->u.pFrame; - assert( u.cd.pProgram->nMem+u.cd.pProgram->nCsr==u.cd.pFrame->nChildMem ); - assert( u.cd.pProgram->nCsr==u.cd.pFrame->nChildCsr ); - assert( pc==u.cd.pFrame->pc ); + pFrame = pRt->u.pFrame; + assert( pProgram->nMem+pProgram->nCsr==pFrame->nChildMem ); + assert( pProgram->nCsr==pFrame->nChildCsr ); + assert( pc==pFrame->pc ); } p->nFrame++; - u.cd.pFrame->pParent = p->pFrame; - u.cd.pFrame->lastRowid = lastRowid; - u.cd.pFrame->nChange = p->nChange; + pFrame->pParent = p->pFrame; + pFrame->lastRowid = lastRowid; + pFrame->nChange = p->nChange; p->nChange = 0; - p->pFrame = u.cd.pFrame; - p->aMem = aMem = &VdbeFrameMem(u.cd.pFrame)[-1]; - p->nMem = u.cd.pFrame->nChildMem; - p->nCursor = (u16)u.cd.pFrame->nChildCsr; + p->pFrame = pFrame; + p->aMem = aMem = &VdbeFrameMem(pFrame)[-1]; + p->nMem = pFrame->nChildMem; + p->nCursor = (u16)pFrame->nChildCsr; p->apCsr = (VdbeCursor **)&aMem[p->nMem+1]; - p->aOp = aOp = u.cd.pProgram->aOp; - p->nOp = u.cd.pProgram->nOp; + p->aOp = aOp = pProgram->aOp; + p->nOp = pProgram->nOp; p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor]; - p->nOnceFlag = u.cd.pProgram->nOnce; + p->nOnceFlag = pProgram->nOnce; pc = -1; memset(p->aOnceFlag, 0, p->nOnceFlag); @@ -71517,13 +71725,11 @@ case OP_Program: { /* jump */ ** calling OP_Program instruction. */ case OP_Param: { /* out2-prerelease */ -#if 0 /* local variables moved into u.ce */ VdbeFrame *pFrame; Mem *pIn; -#endif /* local variables moved into u.ce */ - u.ce.pFrame = p->pFrame; - u.ce.pIn = &u.ce.pFrame->aMem[pOp->p1 + u.ce.pFrame->aOp[u.ce.pFrame->pc].p1]; - sqlite3VdbeMemShallowCopy(pOut, u.ce.pIn, MEM_Ephem); + pFrame = p->pFrame; + pIn = &pFrame->aMem[pOp->p1 + pFrame->aOp[pFrame->pc].p1]; + sqlite3VdbeMemShallowCopy(pOut, pIn, MEM_Ephem); break; } @@ -71531,6 +71737,7 @@ case OP_Param: { /* out2-prerelease */ #ifndef SQLITE_OMIT_FOREIGN_KEY /* Opcode: FkCounter P1 P2 * * * +** Synopsis: fkctr[P1]+=P2 ** ** Increment a "constraint counter" by P2 (P2 may be negative or positive). ** If P1 is non-zero, the database constraint counter is incremented @@ -71549,6 +71756,7 @@ case OP_FkCounter: { } /* Opcode: FkIfZero P1 P2 * * * +** Synopsis: if fkctr[P1]==0 goto P2 ** ** This opcode tests if a foreign key constraint-counter is currently zero. ** If so, jump to instruction P2. Otherwise, fall through to the next @@ -71571,6 +71779,7 @@ case OP_FkIfZero: { /* jump */ #ifndef SQLITE_OMIT_AUTOINCREMENT /* Opcode: MemMax P1 P2 * * * +** Synopsis: r[P1]=max(r[P1],r[P2]) ** ** P1 is a register in the root frame of this VM (the root frame is ** different from the current frame if this instruction is being executed @@ -71581,28 +71790,26 @@ case OP_FkIfZero: { /* jump */ ** an integer. */ case OP_MemMax: { /* in2 */ -#if 0 /* local variables moved into u.cf */ - Mem *pIn1; VdbeFrame *pFrame; -#endif /* local variables moved into u.cf */ if( p->pFrame ){ - for(u.cf.pFrame=p->pFrame; u.cf.pFrame->pParent; u.cf.pFrame=u.cf.pFrame->pParent); - u.cf.pIn1 = &u.cf.pFrame->aMem[pOp->p1]; + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + pIn1 = &pFrame->aMem[pOp->p1]; }else{ - u.cf.pIn1 = &aMem[pOp->p1]; + pIn1 = &aMem[pOp->p1]; } - assert( memIsValid(u.cf.pIn1) ); - sqlite3VdbeMemIntegerify(u.cf.pIn1); + assert( memIsValid(pIn1) ); + sqlite3VdbeMemIntegerify(pIn1); pIn2 = &aMem[pOp->p2]; sqlite3VdbeMemIntegerify(pIn2); - if( u.cf.pIn1->u.iu.i){ - u.cf.pIn1->u.i = pIn2->u.i; + if( pIn1->u.iu.i){ + pIn1->u.i = pIn2->u.i; } break; } #endif /* SQLITE_OMIT_AUTOINCREMENT */ /* Opcode: IfPos P1 P2 * * * +** Synopsis: if r[P1]>0 goto P2 ** ** If the value of register P1 is 1 or greater, jump to P2. ** @@ -71619,6 +71826,7 @@ case OP_IfPos: { /* jump, in1 */ } /* Opcode: IfNeg P1 P2 * * * +** Synopsis: if r[P1]<0 goto P2 ** ** If the value of register P1 is less than zero, jump to P2. ** @@ -71635,6 +71843,7 @@ case OP_IfNeg: { /* jump, in1 */ } /* Opcode: IfZero P1 P2 P3 * * +** Synopsis: r[P1]+=P3, if r[P1]==0 goto P2 ** ** The register P1 must contain an integer. Add literal P3 to the ** value in register P1. If the result is exactly 0, jump to P2. @@ -71653,6 +71862,7 @@ case OP_IfZero: { /* jump, in1 */ } /* Opcode: AggStep * P2 P3 P4 P5 +** Synopsis: accum=r[P3] step(r[P2@P5]) ** ** Execute the step function for an aggregate. The ** function has P5 arguments. P4 is a pointer to the FuncDef @@ -71663,61 +71873,60 @@ case OP_IfZero: { /* jump, in1 */ ** successors. */ case OP_AggStep: { -#if 0 /* local variables moved into u.cg */ int n; int i; Mem *pMem; Mem *pRec; sqlite3_context ctx; sqlite3_value **apVal; -#endif /* local variables moved into u.cg */ - u.cg.n = pOp->p5; - assert( u.cg.n>=0 ); - u.cg.pRec = &aMem[pOp->p2]; - u.cg.apVal = p->apArg; - assert( u.cg.apVal || u.cg.n==0 ); - for(u.cg.i=0; u.cg.ip5; + assert( n>=0 ); + pRec = &aMem[pOp->p2]; + apVal = p->apArg; + assert( apVal || n==0 ); + for(i=0; ip4.pFunc; + ctx.pFunc = pOp->p4.pFunc; assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); - u.cg.ctx.pMem = u.cg.pMem = &aMem[pOp->p3]; - u.cg.pMem->n++; - u.cg.ctx.s.flags = MEM_Null; - u.cg.ctx.s.z = 0; - u.cg.ctx.s.zMalloc = 0; - u.cg.ctx.s.xDel = 0; - u.cg.ctx.s.db = db; - u.cg.ctx.isError = 0; - u.cg.ctx.pColl = 0; - u.cg.ctx.skipFlag = 0; - if( u.cg.ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + ctx.pMem = pMem = &aMem[pOp->p3]; + pMem->n++; + ctx.s.flags = MEM_Null; + ctx.s.z = 0; + ctx.s.zMalloc = 0; + ctx.s.xDel = 0; + ctx.s.db = db; + ctx.isError = 0; + ctx.pColl = 0; + ctx.skipFlag = 0; + if( ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ assert( pOp>p->aOp ); assert( pOp[-1].p4type==P4_COLLSEQ ); assert( pOp[-1].opcode==OP_CollSeq ); - u.cg.ctx.pColl = pOp[-1].p4.pColl; + ctx.pColl = pOp[-1].p4.pColl; } - (u.cg.ctx.pFunc->xStep)(&u.cg.ctx, u.cg.n, u.cg.apVal); /* IMP: R-24505-23230 */ - if( u.cg.ctx.isError ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cg.ctx.s)); - rc = u.cg.ctx.isError; + (ctx.pFunc->xStep)(&ctx, n, apVal); /* IMP: R-24505-23230 */ + if( ctx.isError ){ + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s)); + rc = ctx.isError; } - if( u.cg.ctx.skipFlag ){ + if( ctx.skipFlag ){ assert( pOp[-1].opcode==OP_CollSeq ); - u.cg.i = pOp[-1].p1; - if( u.cg.i ) sqlite3VdbeMemSetInt64(&aMem[u.cg.i], 1); + i = pOp[-1].p1; + if( i ) sqlite3VdbeMemSetInt64(&aMem[i], 1); } - sqlite3VdbeMemRelease(&u.cg.ctx.s); + sqlite3VdbeMemRelease(&ctx.s); break; } /* Opcode: AggFinal P1 P2 * P4 * +** Synopsis: accum=r[P1] N=P2 ** ** Execute the finalizer function for an aggregate. P1 is ** the memory location that is the accumulator for the aggregate. @@ -71730,19 +71939,17 @@ case OP_AggStep: { ** the step function was not previously called. */ case OP_AggFinal: { -#if 0 /* local variables moved into u.ch */ Mem *pMem; -#endif /* local variables moved into u.ch */ assert( pOp->p1>0 && pOp->p1<=(p->nMem-p->nCursor) ); - u.ch.pMem = &aMem[pOp->p1]; - assert( (u.ch.pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); - rc = sqlite3VdbeMemFinalize(u.ch.pMem, pOp->p4.pFunc); + pMem = &aMem[pOp->p1]; + assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); + rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); if( rc ){ - sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.ch.pMem)); + sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(pMem)); } - sqlite3VdbeChangeEncoding(u.ch.pMem, encoding); - UPDATE_MAX_BLOBSIZE(u.ch.pMem); - if( sqlite3VdbeMemTooBig(u.ch.pMem) ){ + sqlite3VdbeChangeEncoding(pMem, encoding); + UPDATE_MAX_BLOBSIZE(pMem); + if( sqlite3VdbeMemTooBig(pMem) ){ goto too_big; } break; @@ -71761,27 +71968,25 @@ case OP_AggFinal: { ** mem[P3+2] are initialized to -1. */ case OP_Checkpoint: { -#if 0 /* local variables moved into u.ci */ int i; /* Loop counter */ int aRes[3]; /* Results */ Mem *pMem; /* Write results here */ -#endif /* local variables moved into u.ci */ assert( p->readOnly==0 ); - u.ci.aRes[0] = 0; - u.ci.aRes[1] = u.ci.aRes[2] = -1; + aRes[0] = 0; + aRes[1] = aRes[2] = -1; assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE || pOp->p2==SQLITE_CHECKPOINT_FULL || pOp->p2==SQLITE_CHECKPOINT_RESTART ); - rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.ci.aRes[1], &u.ci.aRes[2]); + rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]); if( rc==SQLITE_BUSY ){ rc = SQLITE_OK; - u.ci.aRes[0] = 1; - } - for(u.ci.i=0, u.ci.pMem = &aMem[pOp->p3]; u.ci.i<3; u.ci.i++, u.ci.pMem++){ - sqlite3VdbeMemSetInt64(u.ci.pMem, (i64)u.ci.aRes[u.ci.i]); + aRes[0] = 1; } + for(i=0, pMem = &aMem[pOp->p3]; i<3; i++, pMem++){ + sqlite3VdbeMemSetInt64(pMem, (i64)aRes[i]); + } break; }; #endif @@ -71799,7 +72004,6 @@ case OP_Checkpoint: { ** Write a string containing the final journal-mode to register P2. */ case OP_JournalMode: { /* out2-prerelease */ -#if 0 /* local variables moved into u.cj */ Btree *pBt; /* Btree to change journal mode of */ Pager *pPager; /* Pager associated with pBt */ int eNew; /* New journal mode */ @@ -71807,86 +72011,85 @@ case OP_JournalMode: { /* out2-prerelease */ #ifndef SQLITE_OMIT_WAL const char *zFilename; /* Name of database file for pPager */ #endif -#endif /* local variables moved into u.cj */ - u.cj.eNew = pOp->p3; - assert( u.cj.eNew==PAGER_JOURNALMODE_DELETE - || u.cj.eNew==PAGER_JOURNALMODE_TRUNCATE - || u.cj.eNew==PAGER_JOURNALMODE_PERSIST - || u.cj.eNew==PAGER_JOURNALMODE_OFF - || u.cj.eNew==PAGER_JOURNALMODE_MEMORY - || u.cj.eNew==PAGER_JOURNALMODE_WAL - || u.cj.eNew==PAGER_JOURNALMODE_QUERY + eNew = pOp->p3; + assert( eNew==PAGER_JOURNALMODE_DELETE + || eNew==PAGER_JOURNALMODE_TRUNCATE + || eNew==PAGER_JOURNALMODE_PERSIST + || eNew==PAGER_JOURNALMODE_OFF + || eNew==PAGER_JOURNALMODE_MEMORY + || eNew==PAGER_JOURNALMODE_WAL + || eNew==PAGER_JOURNALMODE_QUERY ); assert( pOp->p1>=0 && pOp->p1nDb ); assert( p->readOnly==0 ); - u.cj.pBt = db->aDb[pOp->p1].pBt; - u.cj.pPager = sqlite3BtreePager(u.cj.pBt); - u.cj.eOld = sqlite3PagerGetJournalMode(u.cj.pPager); - if( u.cj.eNew==PAGER_JOURNALMODE_QUERY ) u.cj.eNew = u.cj.eOld; - if( !sqlite3PagerOkToChangeJournalMode(u.cj.pPager) ) u.cj.eNew = u.cj.eOld; + pBt = db->aDb[pOp->p1].pBt; + pPager = sqlite3BtreePager(pBt); + eOld = sqlite3PagerGetJournalMode(pPager); + if( eNew==PAGER_JOURNALMODE_QUERY ) eNew = eOld; + if( !sqlite3PagerOkToChangeJournalMode(pPager) ) eNew = eOld; #ifndef SQLITE_OMIT_WAL - u.cj.zFilename = sqlite3PagerFilename(u.cj.pPager, 1); + zFilename = sqlite3PagerFilename(pPager, 1); /* Do not allow a transition to journal_mode=WAL for a database - ** in temporary storage or if the VFS does not support shared memory + ** in temporary storage or if the VFS does not support shared memory */ - if( u.cj.eNew==PAGER_JOURNALMODE_WAL - && (sqlite3Strlen30(u.cj.zFilename)==0 /* Temp file */ - || !sqlite3PagerWalSupported(u.cj.pPager)) /* No shared-memory support */ + if( eNew==PAGER_JOURNALMODE_WAL + && (sqlite3Strlen30(zFilename)==0 /* Temp file */ + || !sqlite3PagerWalSupported(pPager)) /* No shared-memory support */ ){ - u.cj.eNew = u.cj.eOld; + eNew = eOld; } - if( (u.cj.eNew!=u.cj.eOld) - && (u.cj.eOld==PAGER_JOURNALMODE_WAL || u.cj.eNew==PAGER_JOURNALMODE_WAL) + if( (eNew!=eOld) + && (eOld==PAGER_JOURNALMODE_WAL || eNew==PAGER_JOURNALMODE_WAL) ){ if( !db->autoCommit || db->nVdbeRead>1 ){ rc = SQLITE_ERROR; - sqlite3SetString(&p->zErrMsg, db, + sqlite3SetString(&p->zErrMsg, db, "cannot change %s wal mode from within a transaction", - (u.cj.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of") + (eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of") ); break; }else{ - - if( u.cj.eOld==PAGER_JOURNALMODE_WAL ){ + + if( eOld==PAGER_JOURNALMODE_WAL ){ /* If leaving WAL mode, close the log file. If successful, the call - ** to PagerCloseWal() checkpoints and deletes the write-ahead-log - ** file. An EXCLUSIVE lock may still be held on the database file - ** after a successful return. + ** to PagerCloseWal() checkpoints and deletes the write-ahead-log + ** file. An EXCLUSIVE lock may still be held on the database file + ** after a successful return. */ - rc = sqlite3PagerCloseWal(u.cj.pPager); + rc = sqlite3PagerCloseWal(pPager); if( rc==SQLITE_OK ){ - sqlite3PagerSetJournalMode(u.cj.pPager, u.cj.eNew); + sqlite3PagerSetJournalMode(pPager, eNew); } - }else if( u.cj.eOld==PAGER_JOURNALMODE_MEMORY ){ + }else if( eOld==PAGER_JOURNALMODE_MEMORY ){ /* Cannot transition directly from MEMORY to WAL. Use mode OFF ** as an intermediate */ - sqlite3PagerSetJournalMode(u.cj.pPager, PAGER_JOURNALMODE_OFF); + sqlite3PagerSetJournalMode(pPager, PAGER_JOURNALMODE_OFF); } - + /* Open a transaction on the database file. Regardless of the journal ** mode, this transaction always uses a rollback journal. */ - assert( sqlite3BtreeIsInTrans(u.cj.pBt)==0 ); + assert( sqlite3BtreeIsInTrans(pBt)==0 ); if( rc==SQLITE_OK ){ - rc = sqlite3BtreeSetVersion(u.cj.pBt, (u.cj.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1)); + rc = sqlite3BtreeSetVersion(pBt, (eNew==PAGER_JOURNALMODE_WAL ? 2 : 1)); } } } #endif /* ifndef SQLITE_OMIT_WAL */ if( rc ){ - u.cj.eNew = u.cj.eOld; + eNew = eOld; } - u.cj.eNew = sqlite3PagerSetJournalMode(u.cj.pPager, u.cj.eNew); + eNew = sqlite3PagerSetJournalMode(pPager, eNew); pOut = &aMem[pOp->p2]; pOut->flags = MEM_Str|MEM_Static|MEM_Term; - pOut->z = (char *)sqlite3JournalModename(u.cj.eNew); + pOut->z = (char *)sqlite3JournalModename(eNew); pOut->n = sqlite3Strlen30(pOut->z); pOut->enc = SQLITE_UTF8; sqlite3VdbeChangeEncoding(pOut, encoding); @@ -71916,15 +72119,13 @@ case OP_Vacuum: { ** P2. Otherwise, fall through to the next instruction. */ case OP_IncrVacuum: { /* jump */ -#if 0 /* local variables moved into u.ck */ Btree *pBt; -#endif /* local variables moved into u.ck */ assert( pOp->p1>=0 && pOp->p1nDb ); assert( (p->btreeMask & (((yDbMask)1)<p1))!=0 ); assert( p->readOnly==0 ); - u.ck.pBt = db->aDb[pOp->p1].pBt; - rc = sqlite3BtreeIncrVacuum(u.ck.pBt); + pBt = db->aDb[pOp->p1].pBt; + rc = sqlite3BtreeIncrVacuum(pBt); if( rc==SQLITE_DONE ){ pc = pOp->p2 - 1; rc = SQLITE_OK; @@ -71953,6 +72154,7 @@ case OP_Expire: { #ifndef SQLITE_OMIT_SHARED_CACHE /* Opcode: TableLock P1 P2 P3 P4 * +** Synopsis: iDb=P1 root=P2 write=P3 ** ** Obtain a lock on a particular table. This instruction is only used when ** the shared-cache feature is enabled. @@ -71994,12 +72196,10 @@ case OP_TableLock: { ** code will be set to SQLITE_LOCKED. */ case OP_VBegin: { -#if 0 /* local variables moved into u.cl */ VTable *pVTab; -#endif /* local variables moved into u.cl */ - u.cl.pVTab = pOp->p4.pVtab; - rc = sqlite3VtabBegin(db, u.cl.pVTab); - if( u.cl.pVTab ) sqlite3VtabImportErrmsg(p, u.cl.pVTab->pVtab); + pVTab = pOp->p4.pVtab; + rc = sqlite3VtabBegin(db, pVTab); + if( pVTab ) sqlite3VtabImportErrmsg(p, pVTab->pVtab); break; } #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -72038,33 +72238,30 @@ case OP_VDestroy: { ** table and stores that cursor in P1. */ case OP_VOpen: { -#if 0 /* local variables moved into u.cm */ VdbeCursor *pCur; sqlite3_vtab_cursor *pVtabCursor; sqlite3_vtab *pVtab; sqlite3_module *pModule; -#endif /* local variables moved into u.cm */ assert( p->bIsReader ); - u.cm.pCur = 0; - u.cm.pVtabCursor = 0; - u.cm.pVtab = pOp->p4.pVtab->pVtab; - u.cm.pModule = (sqlite3_module *)u.cm.pVtab->pModule; - assert(u.cm.pVtab && u.cm.pModule); - rc = u.cm.pModule->xOpen(u.cm.pVtab, &u.cm.pVtabCursor); - sqlite3VtabImportErrmsg(p, u.cm.pVtab); + pCur = 0; + pVtabCursor = 0; + pVtab = pOp->p4.pVtab->pVtab; + pModule = (sqlite3_module *)pVtab->pModule; + assert(pVtab && pModule); + rc = pModule->xOpen(pVtab, &pVtabCursor); + sqlite3VtabImportErrmsg(p, pVtab); if( SQLITE_OK==rc ){ /* Initialize sqlite3_vtab_cursor base class */ - u.cm.pVtabCursor->pVtab = u.cm.pVtab; + pVtabCursor->pVtab = pVtab; /* Initialize vdbe cursor object */ - u.cm.pCur = allocateCursor(p, pOp->p1, 0, -1, 0); - if( u.cm.pCur ){ - u.cm.pCur->pVtabCursor = u.cm.pVtabCursor; - u.cm.pCur->pModule = u.cm.pVtabCursor->pVtab->pModule; + pCur = allocateCursor(p, pOp->p1, 0, -1, 0); + if( pCur ){ + pCur->pVtabCursor = pVtabCursor; }else{ db->mallocFailed = 1; - u.cm.pModule->xClose(u.cm.pVtabCursor); + pModule->xClose(pVtabCursor); } } break; @@ -72073,6 +72270,7 @@ case OP_VOpen: { #ifndef SQLITE_OMIT_VIRTUALTABLE /* Opcode: VFilter P1 P2 P3 P4 * +** Synopsis: iPlan=r[P3] zPlan='P4' ** ** P1 is a cursor opened using VOpen. P2 is an address to jump to if ** the filtered result set is empty. @@ -72091,7 +72289,6 @@ case OP_VOpen: { ** A jump is made to P2 if the result set after filtering would be empty. */ case OP_VFilter: { /* jump */ -#if 0 /* local variables moved into u.cn */ int nArg; int iQuery; const sqlite3_module *pModule; @@ -72103,45 +72300,44 @@ case OP_VFilter: { /* jump */ int res; int i; Mem **apArg; -#endif /* local variables moved into u.cn */ - u.cn.pQuery = &aMem[pOp->p3]; - u.cn.pArgc = &u.cn.pQuery[1]; - u.cn.pCur = p->apCsr[pOp->p1]; - assert( memIsValid(u.cn.pQuery) ); - REGISTER_TRACE(pOp->p3, u.cn.pQuery); - assert( u.cn.pCur->pVtabCursor ); - u.cn.pVtabCursor = u.cn.pCur->pVtabCursor; - u.cn.pVtab = u.cn.pVtabCursor->pVtab; - u.cn.pModule = u.cn.pVtab->pModule; + pQuery = &aMem[pOp->p3]; + pArgc = &pQuery[1]; + pCur = p->apCsr[pOp->p1]; + assert( memIsValid(pQuery) ); + REGISTER_TRACE(pOp->p3, pQuery); + assert( pCur->pVtabCursor ); + pVtabCursor = pCur->pVtabCursor; + pVtab = pVtabCursor->pVtab; + pModule = pVtab->pModule; /* Grab the index number and argc parameters */ - assert( (u.cn.pQuery->flags&MEM_Int)!=0 && u.cn.pArgc->flags==MEM_Int ); - u.cn.nArg = (int)u.cn.pArgc->u.i; - u.cn.iQuery = (int)u.cn.pQuery->u.i; + assert( (pQuery->flags&MEM_Int)!=0 && pArgc->flags==MEM_Int ); + nArg = (int)pArgc->u.i; + iQuery = (int)pQuery->u.i; /* Invoke the xFilter method */ { - u.cn.res = 0; - u.cn.apArg = p->apArg; - for(u.cn.i = 0; u.cn.iapArg; + for(i = 0; iinVtabMethod = 1; - rc = u.cn.pModule->xFilter(u.cn.pVtabCursor, u.cn.iQuery, pOp->p4.z, u.cn.nArg, u.cn.apArg); + rc = pModule->xFilter(pVtabCursor, iQuery, pOp->p4.z, nArg, apArg); p->inVtabMethod = 0; - sqlite3VtabImportErrmsg(p, u.cn.pVtab); + sqlite3VtabImportErrmsg(p, pVtab); if( rc==SQLITE_OK ){ - u.cn.res = u.cn.pModule->xEof(u.cn.pVtabCursor); + res = pModule->xEof(pVtabCursor); } - if( u.cn.res ){ + if( res ){ pc = pOp->p2 - 1; } } - u.cn.pCur->nullRow = 0; + pCur->nullRow = 0; break; } @@ -72149,57 +72345,56 @@ case OP_VFilter: { /* jump */ #ifndef SQLITE_OMIT_VIRTUALTABLE /* Opcode: VColumn P1 P2 P3 * * +** Synopsis: r[P3]=vcolumn(P2) ** ** Store the value of the P2-th column of ** the row of the virtual-table that the ** P1 cursor is pointing to into register P3. */ case OP_VColumn: { -#if 0 /* local variables moved into u.co */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; Mem *pDest; sqlite3_context sContext; -#endif /* local variables moved into u.co */ VdbeCursor *pCur = p->apCsr[pOp->p1]; assert( pCur->pVtabCursor ); assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) ); - u.co.pDest = &aMem[pOp->p3]; - memAboutToChange(p, u.co.pDest); + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); if( pCur->nullRow ){ - sqlite3VdbeMemSetNull(u.co.pDest); + sqlite3VdbeMemSetNull(pDest); break; } - u.co.pVtab = pCur->pVtabCursor->pVtab; - u.co.pModule = u.co.pVtab->pModule; - assert( u.co.pModule->xColumn ); - memset(&u.co.sContext, 0, sizeof(u.co.sContext)); + pVtab = pCur->pVtabCursor->pVtab; + pModule = pVtab->pModule; + assert( pModule->xColumn ); + memset(&sContext, 0, sizeof(sContext)); /* The output cell may already have a buffer allocated. Move - ** the current contents to u.co.sContext.s so in case the user-function - ** can use the already allocated buffer instead of allocating a + ** the current contents to sContext.s so in case the user-function + ** can use the already allocated buffer instead of allocating a ** new one. */ - sqlite3VdbeMemMove(&u.co.sContext.s, u.co.pDest); - MemSetTypeFlag(&u.co.sContext.s, MEM_Null); + sqlite3VdbeMemMove(&sContext.s, pDest); + MemSetTypeFlag(&sContext.s, MEM_Null); - rc = u.co.pModule->xColumn(pCur->pVtabCursor, &u.co.sContext, pOp->p2); - sqlite3VtabImportErrmsg(p, u.co.pVtab); - if( u.co.sContext.isError ){ - rc = u.co.sContext.isError; + rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2); + sqlite3VtabImportErrmsg(p, pVtab); + if( sContext.isError ){ + rc = sContext.isError; } /* Copy the result of the function to the P3 register. We ** do this regardless of whether or not an error occurred to ensure any - ** dynamic allocation in u.co.sContext.s (a Mem struct) is released. + ** dynamic allocation in sContext.s (a Mem struct) is released. */ - sqlite3VdbeChangeEncoding(&u.co.sContext.s, encoding); - sqlite3VdbeMemMove(u.co.pDest, &u.co.sContext.s); - REGISTER_TRACE(pOp->p3, u.co.pDest); - UPDATE_MAX_BLOBSIZE(u.co.pDest); + sqlite3VdbeChangeEncoding(&sContext.s, encoding); + sqlite3VdbeMemMove(pDest, &sContext.s); + REGISTER_TRACE(pOp->p3, pDest); + UPDATE_MAX_BLOBSIZE(pDest); - if( sqlite3VdbeMemTooBig(u.co.pDest) ){ + if( sqlite3VdbeMemTooBig(pDest) ){ goto too_big; } break; @@ -72214,38 +72409,36 @@ case OP_VColumn: { ** the end of its result set, then fall through to the next instruction. */ case OP_VNext: { /* jump */ -#if 0 /* local variables moved into u.cp */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; int res; VdbeCursor *pCur; -#endif /* local variables moved into u.cp */ - u.cp.res = 0; - u.cp.pCur = p->apCsr[pOp->p1]; - assert( u.cp.pCur->pVtabCursor ); - if( u.cp.pCur->nullRow ){ + res = 0; + pCur = p->apCsr[pOp->p1]; + assert( pCur->pVtabCursor ); + if( pCur->nullRow ){ break; } - u.cp.pVtab = u.cp.pCur->pVtabCursor->pVtab; - u.cp.pModule = u.cp.pVtab->pModule; - assert( u.cp.pModule->xNext ); + pVtab = pCur->pVtabCursor->pVtab; + pModule = pVtab->pModule; + assert( pModule->xNext ); /* Invoke the xNext() method of the module. There is no way for the ** underlying implementation to return an error if one occurs during - ** xNext(). Instead, if an error occurs, true is returned (indicating that + ** xNext(). Instead, if an error occurs, true is returned (indicating that ** data is available) and the error code returned when xColumn or ** some other method is next invoked on the save virtual table cursor. */ p->inVtabMethod = 1; - rc = u.cp.pModule->xNext(u.cp.pCur->pVtabCursor); + rc = pModule->xNext(pCur->pVtabCursor); p->inVtabMethod = 0; - sqlite3VtabImportErrmsg(p, u.cp.pVtab); + sqlite3VtabImportErrmsg(p, pVtab); if( rc==SQLITE_OK ){ - u.cp.res = u.cp.pModule->xEof(u.cp.pCur->pVtabCursor); + res = pModule->xEof(pCur->pVtabCursor); } - if( !u.cp.res ){ + if( !res ){ /* If there is data, jump to P2 */ pc = pOp->p2 - 1; } @@ -72261,25 +72454,23 @@ case OP_VNext: { /* jump */ ** in register P1 is passed as the zName argument to the xRename method. */ case OP_VRename: { -#if 0 /* local variables moved into u.cq */ sqlite3_vtab *pVtab; Mem *pName; -#endif /* local variables moved into u.cq */ - u.cq.pVtab = pOp->p4.pVtab->pVtab; - u.cq.pName = &aMem[pOp->p1]; - assert( u.cq.pVtab->pModule->xRename ); - assert( memIsValid(u.cq.pName) ); + pVtab = pOp->p4.pVtab->pVtab; + pName = &aMem[pOp->p1]; + assert( pVtab->pModule->xRename ); + assert( memIsValid(pName) ); assert( p->readOnly==0 ); - REGISTER_TRACE(pOp->p1, u.cq.pName); - assert( u.cq.pName->flags & MEM_Str ); - testcase( u.cq.pName->enc==SQLITE_UTF8 ); - testcase( u.cq.pName->enc==SQLITE_UTF16BE ); - testcase( u.cq.pName->enc==SQLITE_UTF16LE ); - rc = sqlite3VdbeChangeEncoding(u.cq.pName, SQLITE_UTF8); + REGISTER_TRACE(pOp->p1, pName); + assert( pName->flags & MEM_Str ); + testcase( pName->enc==SQLITE_UTF8 ); + testcase( pName->enc==SQLITE_UTF16BE ); + testcase( pName->enc==SQLITE_UTF16LE ); + rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8); if( rc==SQLITE_OK ){ - rc = u.cq.pVtab->pModule->xRename(u.cq.pVtab, u.cq.pName->z); - sqlite3VtabImportErrmsg(p, u.cq.pVtab); + rc = pVtab->pModule->xRename(pVtab, pName->z); + sqlite3VtabImportErrmsg(p, pVtab); p->expired = 0; } break; @@ -72288,6 +72479,7 @@ case OP_VRename: { #ifndef SQLITE_OMIT_VIRTUALTABLE /* Opcode: VUpdate P1 P2 P3 P4 * +** Synopsis: data=r[P3@P2] ** ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. ** This opcode invokes the corresponding xUpdate method. P2 values @@ -72311,7 +72503,6 @@ case OP_VRename: { ** is set to the value of the rowid for the row just inserted. */ case OP_VUpdate: { -#if 0 /* local variables moved into u.cr */ sqlite3_vtab *pVtab; sqlite3_module *pModule; int nArg; @@ -72319,34 +72510,33 @@ case OP_VUpdate: { sqlite_int64 rowid; Mem **apArg; Mem *pX; -#endif /* local variables moved into u.cr */ - assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback + assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace ); assert( p->readOnly==0 ); - u.cr.pVtab = pOp->p4.pVtab->pVtab; - u.cr.pModule = (sqlite3_module *)u.cr.pVtab->pModule; - u.cr.nArg = pOp->p2; + pVtab = pOp->p4.pVtab->pVtab; + pModule = (sqlite3_module *)pVtab->pModule; + nArg = pOp->p2; assert( pOp->p4type==P4_VTAB ); - if( ALWAYS(u.cr.pModule->xUpdate) ){ + if( ALWAYS(pModule->xUpdate) ){ u8 vtabOnConflict = db->vtabOnConflict; - u.cr.apArg = p->apArg; - u.cr.pX = &aMem[pOp->p3]; - for(u.cr.i=0; u.cr.iapArg; + pX = &aMem[pOp->p3]; + for(i=0; ivtabOnConflict = pOp->p5; - rc = u.cr.pModule->xUpdate(u.cr.pVtab, u.cr.nArg, u.cr.apArg, &u.cr.rowid); + rc = pModule->xUpdate(pVtab, nArg, apArg, &rowid); db->vtabOnConflict = vtabOnConflict; - sqlite3VtabImportErrmsg(p, u.cr.pVtab); + sqlite3VtabImportErrmsg(p, pVtab); if( rc==SQLITE_OK && pOp->p1 ){ - assert( u.cr.nArg>1 && u.cr.apArg[0] && (u.cr.apArg[0]->flags&MEM_Null) ); - db->lastRowid = lastRowid = u.cr.rowid; + assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) ); + db->lastRowid = lastRowid = rowid; } if( (rc&0xff)==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){ if( pOp->p5==OE_Ignore ){ @@ -72406,24 +72596,32 @@ case OP_MaxPgcnt: { /* out2-prerelease */ ** the UTF-8 string contained in P4 is emitted on the trace callback. */ case OP_Trace: { -#if 0 /* local variables moved into u.cs */ char *zTrace; char *z; -#endif /* local variables moved into u.cs */ if( db->xTrace && !p->doingRerun - && (u.cs.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 + && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){ - u.cs.z = sqlite3VdbeExpandSql(p, u.cs.zTrace); - db->xTrace(db->pTraceArg, u.cs.z); - sqlite3DbFree(db, u.cs.z); + z = sqlite3VdbeExpandSql(p, zTrace); + db->xTrace(db->pTraceArg, z); + sqlite3DbFree(db, z); } +#ifdef SQLITE_USE_FCNTL_TRACE + zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql); + if( zTrace ){ + int i; + for(i=0; inDb; i++){ + if( MASKBIT(i) & p->btreeMask)==0 ) continue; + sqlite3_file_control(db, db->aDb[i].zName, SQLITE_FCNTL_TRACE, zTrace); + } + } +#endif /* SQLITE_USE_FCNTL_TRACE */ #ifdef SQLITE_DEBUG if( (db->flags & SQLITE_SqlTrace)!=0 - && (u.cs.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 + && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){ - sqlite3DebugPrintf("SQL-trace: %s\n", u.cs.zTrace); + sqlite3DebugPrintf("SQL-trace: %s\n", zTrace); } #endif /* SQLITE_DEBUG */ break; @@ -72476,13 +72674,13 @@ default: { /* This is really OP_Noop and OP_Explain */ assert( pc>=-1 && pcnOp ); #ifdef SQLITE_DEBUG - if( p->trace ){ - if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc); + if( db->flags & SQLITE_VdbeTrace ){ + if( rc!=0 ) printf("rc=%d\n",rc); if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){ - registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]); + registerTrace(pOp->p2, &aMem[pOp->p2]); } if( pOp->opflags & OPFLG_OUT3 ){ - registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]); + registerTrace(pOp->p3, &aMem[pOp->p3]); } } #endif /* SQLITE_DEBUG */ @@ -72553,6 +72751,7 @@ abort_due_to_interrupt: goto vdbe_error_halt; } + /************** End of vdbe.c ************************************************/ /************** Begin file vdbeblob.c ****************************************/ /* @@ -72619,7 +72818,8 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ rc = sqlite3_step(p->pStmt); if( rc==SQLITE_ROW ){ - u32 type = v->apCsr[0]->aType[p->iCol]; + VdbeCursor *pC = v->apCsr[0]; + u32 type = pC->aType[p->iCol]; if( type<12 ){ zErr = sqlite3MPrintf(p->db, "cannot open value of type %s", type==0?"null": type==7?"real": "integer" @@ -72628,9 +72828,9 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ sqlite3_finalize(p->pStmt); p->pStmt = 0; }else{ - p->iOffset = v->apCsr[0]->aOffset[p->iCol]; + p->iOffset = pC->aType[p->iCol + pC->nField]; p->nByte = sqlite3VdbeSerialTypeLen(type); - p->pCsr = v->apCsr[0]->pCursor; + p->pCsr = pC->pCursor; sqlite3BtreeEnterCursor(p->pCsr); sqlite3BtreeCacheOverflow(p->pCsr); sqlite3BtreeLeaveCursor(p->pCsr); @@ -72733,6 +72933,10 @@ SQLITE_API int sqlite3_blob_open( pTab = 0; sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable); } + if( pTab && !HasRowid(pTab) ){ + pTab = 0; + sqlite3ErrorMsg(pParse, "cannot open table without rowid: %s", zTable); + } #ifndef SQLITE_OMIT_VIEW if( pTab && pTab->pSelect ){ pTab = 0; @@ -72790,7 +72994,7 @@ SQLITE_API int sqlite3_blob_open( #endif for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ int j; - for(j=0; jnColumn; j++){ + for(j=0; jnKeyCol; j++){ if( pIdx->aiColumn[j]==iCol ){ zFault = "indexed"; } @@ -72805,7 +73009,7 @@ SQLITE_API int sqlite3_blob_open( } } - pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db); + pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse); assert( pBlob->pStmt || db->mallocFailed ); if( pBlob->pStmt ){ Vdbe *v = (Vdbe *)pBlob->pStmt; @@ -72879,6 +73083,7 @@ blob_open_out: } sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr); sqlite3DbFree(db, zErr); + sqlite3ParserReset(pParse); sqlite3StackFree(db, pParse); rc = sqlite3ApiExit(db, rc); sqlite3_mutex_leave(db->mutex); @@ -73411,7 +73616,7 @@ static int vdbeSorterIterInit( */ static void vdbeSorterCompare( const VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */ - int bOmitRowid, /* Ignore rowid field at end of keys */ + int nIgnore, /* Ignore the last nIgnore fields */ const void *pKey1, int nKey1, /* Left side of comparison */ const void *pKey2, int nKey2, /* Right side of comparison */ int *pRes /* OUT: Result of comparison */ @@ -73425,8 +73630,8 @@ static void vdbeSorterCompare( sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2); } - if( bOmitRowid ){ - r2->nField = pKeyInfo->nField; + if( nIgnore ){ + r2->nField = pKeyInfo->nField - nIgnore; assert( r2->nField>0 ); for(i=0; inField; i++){ if( r2->aMem[i].flags & MEM_Null ){ @@ -74052,13 +74257,14 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *pCsr, Mem *pOut){ SQLITE_PRIVATE int sqlite3VdbeSorterCompare( const VdbeCursor *pCsr, /* Sorter cursor */ Mem *pVal, /* Value to compare to current sorter key */ + int nIgnore, /* Ignore this many fields at the end */ int *pRes /* OUT: Result of comparison */ ){ VdbeSorter *pSorter = pCsr->pSorter; void *pKey; int nKey; /* Sorter key to compare pVal with */ pKey = vdbeSorterRowkey(pSorter, &nKey); - vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes); + vdbeSorterCompare(pCsr, nIgnore, pVal->z, pVal->n, pKey, nKey, pRes); return SQLITE_OK; } @@ -74693,9 +74899,12 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ /* ** Call sqlite3WalkExpr() for every expression in Select statement p. ** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and -** on the compound select chain, p->pPrior. Invoke the xSelectCallback() -** either before or after the walk of expressions and FROM clause, depending -** on whether pWalker->bSelectDepthFirst is false or true, respectively. +** on the compound select chain, p->pPrior. +** +** If it is not NULL, the xSelectCallback() callback is invoked before +** the walk of the expressions and FROM clause. The xSelectCallback2() +** method, if it is not NULL, is invoked following the walk of the +** expressions and FROM clause. ** ** Return WRC_Continue under normal conditions. Return WRC_Abort if ** there is an abort request. @@ -74705,11 +74914,13 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ */ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ int rc; - if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue; + if( p==0 || (pWalker->xSelectCallback==0 && pWalker->xSelectCallback2==0) ){ + return WRC_Continue; + } rc = WRC_Continue; pWalker->walkerDepth++; while( p ){ - if( !pWalker->bSelectDepthFirst ){ + if( pWalker->xSelectCallback ){ rc = pWalker->xSelectCallback(pWalker, p); if( rc ) break; } @@ -74719,12 +74930,8 @@ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ pWalker->walkerDepth--; return WRC_Abort; } - if( pWalker->bSelectDepthFirst ){ - rc = pWalker->xSelectCallback(pWalker, p); - /* Depth-first search is currently only used for - ** selectAddSubqueryTypeInfo() and that routine always returns - ** WRC_Continue (0). So the following branch is never taken. */ - if( NEVER(rc) ) break; + if( pWalker->xSelectCallback2 ){ + pWalker->xSelectCallback2(pWalker, p); } p = p->pPrior; } @@ -74843,10 +75050,10 @@ static void resolveAlias( pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0); if( pDup==0 ) return; ExprSetProperty(pDup, EP_Skip); - if( pEList->a[iCol].iAlias==0 ){ - pEList->a[iCol].iAlias = (u16)(++pParse->nAlias); + if( pEList->a[iCol].u.x.iAlias==0 ){ + pEList->a[iCol].u.x.iAlias = (u16)(++pParse->nAlias); } - pDup->iTable = pEList->a[iCol].iAlias; + pDup->iTable = pEList->a[iCol].u.x.iAlias; } if( pExpr->op==TK_COLLATE ){ pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); @@ -74961,7 +75168,9 @@ static int lookupName( struct SrcList_item *pMatch = 0; /* The matching pSrcList item */ NameContext *pTopNC = pNC; /* First namecontext in the list */ Schema *pSchema = 0; /* Schema of the expression */ - int isTrigger = 0; + int isTrigger = 0; /* True if resolved to a trigger column */ + Table *pTab = 0; /* Table hold the row */ + Column *pCol; /* A column of pTab */ assert( pNC ); /* the name context cannot be NULL. */ assert( zCol ); /* The Z in X.Y.Z cannot be NULL */ @@ -75002,9 +75211,6 @@ static int lookupName( if( pSrcList ){ for(i=0, pItem=pSrcList->a; inSrc; i++, pItem++){ - Table *pTab; - Column *pCol; - pTab = pItem->pTab; assert( pTab!=0 && pTab->zName!=0 ); assert( pTab->nCol>0 ); @@ -75064,9 +75270,8 @@ static int lookupName( /* If we have not already resolved the name, then maybe ** it is a new.* or old.* trigger argument reference */ - if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){ + if( zDb==0 && zTab!=0 && cntTab==0 && pParse->pTriggerTab!=0 ){ int op = pParse->eTriggerOp; - Table *pTab = 0; assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){ pExpr->iTable = 1; @@ -75080,8 +75285,7 @@ static int lookupName( int iCol; pSchema = pTab->pSchema; cntTab++; - for(iCol=0; iColnCol; iCol++){ - Column *pCol = &pTab->aCol[iCol]; + for(iCol=0, pCol=pTab->aCol; iColnCol; iCol++, pCol++){ if( sqlite3StrICmp(pCol->zName, zCol)==0 ){ if( iCol==pTab->iPKey ){ iCol = -1; @@ -75089,8 +75293,10 @@ static int lookupName( break; } } - if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){ - iCol = -1; /* IMP: R-44911-55124 */ + if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) && HasRowid(pTab) ){ + /* IMP: R-24309-18625 */ + /* IMP: R-44911-55124 */ + iCol = -1; } if( iColnCol ){ cnt++; @@ -75116,7 +75322,8 @@ static int lookupName( /* ** Perhaps the name is a reference to the ROWID */ - if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){ + assert( pTab!=0 || cntTab==0 ); + if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) && HasRowid(pTab) ){ cnt = 1; pExpr->iColumn = -1; /* IMP: R-44911-55124 */ pExpr->affinity = SQLITE_AFF_INTEGER; @@ -75404,7 +75611,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ /* Resolve function names */ - case TK_CONST_FUNC: case TK_FUNCTION: { ExprList *pList = pExpr->x.pList; /* The argument list */ int n = pList ? pList->nExpr : 0; /* Number of arguments */ @@ -75417,7 +75623,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ FuncDef *pDef; /* Information about the function */ u8 enc = ENC(pParse->db); /* The database encoding */ - testcase( pExpr->op==TK_CONST_FUNC ); assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); notValidPartIdxWhere(pParse, pNC, "functions"); zId = pExpr->u.zToken; @@ -75462,6 +75667,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ pExpr->op = TK_NULL; return WRC_Prune; } + if( pDef->funcFlags & SQLITE_FUNC_CONSTANT ) ExprSetProperty(pExpr,EP_Constant); } #endif if( is_agg && (pNC->ncFlags & NC_AllowAgg)==0 ){ @@ -75713,7 +75919,7 @@ static int resolveCompoundOrderBy( pItem->pExpr->pLeft = pNew; } sqlite3ExprDelete(db, pE); - pItem->iOrderByCol = (u16)iCol; + pItem->u.x.iOrderByCol = (u16)iCol; pItem->done = 1; }else{ moreToDo = 1; @@ -75734,8 +75940,8 @@ static int resolveCompoundOrderBy( /* ** Check every term in the ORDER BY or GROUP BY clause pOrderBy of ** the SELECT statement pSelect. If any term is reference to a -** result set expression (as determined by the ExprList.a.iOrderByCol field) -** then convert that term into a copy of the corresponding result set +** result set expression (as determined by the ExprList.a.u.x.iOrderByCol +** field) then convert that term into a copy of the corresponding result set ** column. ** ** If any errors are detected, add an error message to pParse and @@ -75762,12 +75968,12 @@ SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy( pEList = pSelect->pEList; assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */ for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ - if( pItem->iOrderByCol ){ - if( pItem->iOrderByCol>pEList->nExpr ){ + if( pItem->u.x.iOrderByCol ){ + if( pItem->u.x.iOrderByCol>pEList->nExpr ){ resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr); return 1; } - resolveAlias(pParse, pEList, pItem->iOrderByCol-1, pItem->pExpr, zType,0); + resolveAlias(pParse, pEList, pItem->u.x.iOrderByCol-1, pItem->pExpr, zType,0); } } return 0; @@ -75816,7 +76022,7 @@ static int resolveOrderGroupBy( ** a copy of the iCol-th result-set column. The subsequent call to ** sqlite3ResolveOrderGroupBy() will convert the expression to a ** copy of the iCol-th result-set expression. */ - pItem->iOrderByCol = (u16)iCol; + pItem->u.x.iOrderByCol = (u16)iCol; continue; } } @@ -75828,18 +76034,18 @@ static int resolveOrderGroupBy( resolveOutOfRangeError(pParse, zType, i+1, nResult); return 1; } - pItem->iOrderByCol = (u16)iCol; + pItem->u.x.iOrderByCol = (u16)iCol; continue; } /* Otherwise, treat the ORDER BY term as an ordinary expression */ - pItem->iOrderByCol = 0; + pItem->u.x.iOrderByCol = 0; if( sqlite3ResolveExprNames(pNC, pE) ){ return 1; } for(j=0; jpEList->nExpr; j++){ if( sqlite3ExprCompare(pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ - pItem->iOrderByCol = j+1; + pItem->u.x.iOrderByCol = j+1; } } } @@ -76711,16 +76917,25 @@ SQLITE_PRIVATE Expr *sqlite3PExpr( } /* -** Return 1 if an expression must be FALSE in all cases and 0 if the -** expression might be true. This is an optimization. If is OK to -** return 0 here even if the expression really is always false (a -** false negative). But it is a bug to return 1 if the expression -** might be true in some rare circumstances (a false positive.) +** If the expression is always either TRUE or FALSE (respectively), +** then return 1. If one cannot determine the truth value of the +** expression at compile-time return 0. +** +** This is an optimization. If is OK to return 0 here even if +** the expression really is always false or false (a false negative). +** But it is a bug to return 1 if the expression might have different +** boolean values in different circumstances (a false positive.) ** ** Note that if the expression is part of conditional for a ** LEFT JOIN, then we cannot determine at compile-time whether or not ** is it true or false, so always return 0. */ +static int exprAlwaysTrue(Expr *p){ + int v = 0; + if( ExprHasProperty(p, EP_FromJoin) ) return 0; + if( !sqlite3ExprIsInteger(p, &v) ) return 0; + return v!=0; +} static int exprAlwaysFalse(Expr *p){ int v = 0; if( ExprHasProperty(p, EP_FromJoin) ) return 0; @@ -77074,6 +77289,33 @@ static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){ return pNew; } +/* +** Create and return a deep copy of the object passed as the second +** argument. If an OOM condition is encountered, NULL is returned +** and the db->mallocFailed flag set. +*/ +#ifndef SQLITE_OMIT_CTE +static With *withDup(sqlite3 *db, With *p){ + With *pRet = 0; + if( p ){ + int nByte = sizeof(*p) + sizeof(p->a[0]) * (p->nCte-1); + pRet = sqlite3DbMallocZero(db, nByte); + if( pRet ){ + int i; + pRet->nCte = p->nCte; + for(i=0; inCte; i++){ + pRet->a[i].pSelect = sqlite3SelectDup(db, p->a[i].pSelect, 0); + pRet->a[i].pCols = sqlite3ExprListDup(db, p->a[i].pCols, 0); + pRet->a[i].zName = sqlite3DbStrDup(db, p->a[i].zName); + } + } + } + return pRet; +} +#else +# define withDup(x,y) 0 +#endif + /* ** The following group of routines make deep copies of expressions, ** expression lists, ID lists, and select statements. The copies can @@ -77118,8 +77360,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags) pItem->sortOrder = pOldItem->sortOrder; pItem->done = 0; pItem->bSpanIsTab = pOldItem->bSpanIsTab; - pItem->iOrderByCol = pOldItem->iOrderByCol; - pItem->iAlias = pOldItem->iAlias; + pItem->u = pOldItem->u; } return pNew; } @@ -77155,6 +77396,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){ pNewItem->regReturn = pOldItem->regReturn; pNewItem->isCorrelated = pOldItem->isCorrelated; pNewItem->viaCoroutine = pOldItem->viaCoroutine; + pNewItem->isRecursive = pOldItem->isRecursive; pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex); pNewItem->notIndexed = pOldItem->notIndexed; pNewItem->pIndex = pOldItem->pIndex; @@ -77216,6 +77458,8 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; pNew->addrOpenEphm[2] = -1; + pNew->nSelectRow = p->nSelectRow; + pNew->pWith = withDup(db, p->pWith); return pNew; } #else @@ -77380,9 +77624,12 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ switch( pExpr->op ){ /* Consider functions to be constant if all their arguments are constant - ** and pWalker->u.i==2 */ + ** and either pWalker->u.i==2 or the function as the SQLITE_FUNC_CONST + ** flag. */ case TK_FUNCTION: - if( pWalker->u.i==2 ) return 0; + if( pWalker->u.i==2 || ExprHasProperty(pExpr,EP_Constant) ){ + return WRC_Continue; + } /* Fall through */ case TK_ID: case TK_COLUMN: @@ -77720,8 +77967,8 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){ sqlite3 *db = pParse->db; /* Database connection */ Table *pTab; /* Table . */ Expr *pExpr; /* Expression */ - int iCol; /* Index of column */ - int iDb; /* Database idx for pTab */ + i16 iCol; /* Index of column */ + i16 iDb; /* Database idx for pTab */ assert( p ); /* Because of isCandidateForInOpt(p) */ assert( p->pEList!=0 ); /* Because of isCandidateForInOpt(p) */ @@ -77729,7 +77976,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){ assert( p->pSrc!=0 ); /* Because of isCandidateForInOpt(p) */ pTab = p->pSrc->a[0].pTab; pExpr = p->pEList->a[0].pExpr; - iCol = pExpr->iColumn; + iCol = (i16)pExpr->iColumn; /* Code an OP_VerifyCookie and OP_TableLock for
. */ iDb = sqlite3SchemaToIndex(db, pTab->pSchema); @@ -77767,16 +78014,11 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){ for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){ if( (pIdx->aiColumn[0]==iCol) && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq - && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None)) + && (!mustBeUnique || (pIdx->nKeyCol==1 && pIdx->onError!=OE_None)) ){ - int iAddr; - char *pKey; - - pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx); - iAddr = sqlite3CodeOnce(pParse); - - sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb, - pKey,P4_KEYINFO_HANDOFF); + int iAddr = sqlite3CodeOnce(pParse); + sqlite3VdbeAddOp3(v, OP_OpenRead, iTab, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); VdbeComment((v, "%s", pIdx->zName)); assert( IN_INDEX_INDEX_DESC == IN_INDEX_INDEX_ASC+1 ); eType = IN_INDEX_INDEX_ASC + pIdx->aSortOrder[0]; @@ -77916,7 +78158,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( pExpr->iTable = pParse->nTab++; addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid); if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED); - pKeyInfo = isRowid ? 0 : sqlite3KeyInfoAlloc(pParse->db, 1); + pKeyInfo = isRowid ? 0 : sqlite3KeyInfoAlloc(pParse->db, 1, 1); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ /* Case 1: expr IN (SELECT ...) @@ -77934,13 +78176,14 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( pExpr->x.pSelect->iLimit = 0; testcase( pKeyInfo==0 ); /* Caused by OOM in sqlite3KeyInfoAlloc() */ if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){ - sqlite3DbFree(pParse->db, pKeyInfo); + sqlite3KeyInfoUnref(pKeyInfo); return 0; } pEList = pExpr->x.pSelect->pEList; assert( pKeyInfo!=0 ); /* OOM will cause exit after sqlite3Select() */ assert( pEList!=0 ); assert( pEList->nExpr>0 ); + assert( sqlite3KeyInfoIsWriteable(pKeyInfo) ); pKeyInfo->aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pEList->a[0].pExpr); }else if( ALWAYS(pExpr->x.pList!=0) ){ @@ -77960,6 +78203,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( affinity = SQLITE_AFF_NONE; } if( pKeyInfo ){ + assert( sqlite3KeyInfoIsWriteable(pKeyInfo) ); pKeyInfo->aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft); } @@ -78001,7 +78245,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( sqlite3ReleaseTempReg(pParse, r2); } if( pKeyInfo ){ - sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO_HANDOFF); + sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO); } break; } @@ -78359,6 +78603,11 @@ SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){ */ SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){ pParse->iCacheLevel++; +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("PUSH to %d\n", pParse->iCacheLevel); + } +#endif } /* @@ -78372,6 +78621,11 @@ SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){ assert( N>0 ); assert( pParse->iCacheLevel>=N ); pParse->iCacheLevel -= N; +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("POP to %d\n", pParse->iCacheLevel); + } +#endif for(i=0, p=pParse->aColCache; iiReg && p->iLevel>pParse->iCacheLevel ){ cacheEntryClear(pParse, p); @@ -78402,15 +78656,19 @@ static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){ SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable( Vdbe *v, /* The VDBE under construction */ Table *pTab, /* The table containing the value */ - int iTabCur, /* The cursor for this table */ + int iTabCur, /* The table cursor. Or the PK cursor for WITHOUT ROWID */ int iCol, /* Index of the column to extract */ - int regOut /* Extract the valud into this register */ + int regOut /* Extract the value into this register */ ){ if( iCol<0 || iCol==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); }else{ int op = IsVirtual(pTab) ? OP_VColumn : OP_Column; - sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut); + int x = iCol; + if( !HasRowid(pTab) ){ + x = sqlite3ColumnOfIndex(sqlite3PrimaryKeyIndex(pTab), iCol); + } + sqlite3VdbeAddOp3(v, op, iTabCur, x, regOut); } if( iCol>=0 ){ sqlite3ColumnDefault(v, pTab, iCol, regOut); @@ -78462,6 +78720,11 @@ SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){ int i; struct yColCache *p; +#if SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("CLEAR\n"); + } +#endif for(i=0, p=pParse->aColCache; iiReg ){ cacheEntryClear(pParse, p); @@ -78543,6 +78806,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) int regFree2 = 0; /* If non-zero free this temporary register */ int r1, r2, r3, r4; /* Various register numbers */ sqlite3 *db = pParse->db; /* The database connection */ + Expr tempX; /* Temporary expression node */ assert( target>0 && target<=pParse->nMem ); if( v==0 ){ @@ -78762,8 +79026,10 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) codeReal(v, pLeft->u.zToken, 1, target); #endif }else{ - regFree1 = r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_Integer, 0, r1); + tempX.op = TK_INTEGER; + tempX.flags = EP_IntValue|EP_TokenOnly; + tempX.u.iValue = 0; + r1 = sqlite3ExprCodeTemp(pParse, &tempX, ®Free1); r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free2); sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target); testcase( regFree2==0 ); @@ -78808,21 +79074,18 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) } break; } - case TK_CONST_FUNC: case TK_FUNCTION: { ExprList *pFarg; /* List of function arguments */ int nFarg; /* Number of function arguments */ FuncDef *pDef; /* The function definition object */ int nId; /* Length of the function name in bytes */ const char *zId; /* The function name */ - int constMask = 0; /* Mask of function arguments that are constant */ + u32 constMask = 0; /* Mask of function arguments that are constant */ int i; /* Loop counter */ u8 enc = ENC(db); /* The text encoding used by this database */ CollSeq *pColl = 0; /* A collating sequence */ assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - testcase( op==TK_CONST_FUNC ); - testcase( op==TK_FUNCTION ); if( ExprHasProperty(pExpr, EP_TokenOnly) ){ pFarg = 0; }else{ @@ -78866,8 +79129,22 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) break; } + for(i=0; ia[i].pExpr) ){ + testcase( i==31 ); + constMask |= MASKBIT32(i); + } + if( (pDef->funcFlags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){ + pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); + } + } if( pFarg ){ - r1 = sqlite3GetTempRange(pParse, nFarg); + if( constMask ){ + r1 = pParse->nMem+1; + pParse->nMem += nFarg; + }else{ + r1 = sqlite3GetTempRange(pParse, nFarg); + } /* For length() and typeof() functions with a column argument, ** set the P5 parameter to the OP_Column opcode to OPFLAG_LENGTHARG @@ -78882,14 +79159,15 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( exprOp==TK_COLUMN || exprOp==TK_AGG_COLUMN ){ assert( SQLITE_FUNC_LENGTH==OPFLAG_LENGTHARG ); assert( SQLITE_FUNC_TYPEOF==OPFLAG_TYPEOFARG ); - testcase( (pDef->funcFlags&~SQLITE_FUNC_ENCMASK) - ==SQLITE_FUNC_LENGTH ); - pFarg->a[0].pExpr->op2 = pDef->funcFlags&~SQLITE_FUNC_ENCMASK; + testcase( pDef->funcFlags & OPFLAG_LENGTHARG ); + pFarg->a[0].pExpr->op2 = + pDef->funcFlags & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG); } } sqlite3ExprCachePush(pParse); /* Ticket 2ea2425d34be */ - sqlite3ExprCodeExprList(pParse, pFarg, r1, 1); + sqlite3ExprCodeExprList(pParse, pFarg, r1, + SQLITE_ECEL_DUP|SQLITE_ECEL_FACTOR); sqlite3ExprCachePop(pParse, 1); /* Ticket 2ea2425d34be */ }else{ r1 = 0; @@ -78913,14 +79191,6 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); } #endif - for(i=0; ia[i].pExpr) ){ - constMask |= (1<funcFlags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){ - pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); - } - } if( pDef->funcFlags & SQLITE_FUNC_NEEDCOLL ){ if( !pColl ) pColl = db->pDfltColl; sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); @@ -78928,7 +79198,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target, (char*)pDef, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nFarg); - if( nFarg ){ + if( nFarg && constMask==0 ){ sqlite3ReleaseTempRange(pParse, r1, nFarg); } break; @@ -79079,7 +79349,6 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) ExprList *pEList; /* List of WHEN terms */ struct ExprList_item *aListelem; /* Array of WHEN terms */ Expr opCompare; /* The X==Ei expression */ - Expr cacheX; /* Cached expression X */ Expr *pX; /* The X expression */ Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; ) @@ -79091,13 +79360,12 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) nExpr = pEList->nExpr; endLabel = sqlite3VdbeMakeLabel(v); if( (pX = pExpr->pLeft)!=0 ){ - cacheX = *pX; + tempX = *pX; testcase( pX->op==TK_COLUMN ); - testcase( pX->op==TK_REGISTER ); - exprToRegister(&cacheX, sqlite3ExprCodeTemp(pParse, pX, ®Free1)); + exprToRegister(&tempX, sqlite3ExprCodeTemp(pParse, pX, ®Free1)); testcase( regFree1==0 ); opCompare.op = TK_EQ; - opCompare.pLeft = &cacheX; + opCompare.pLeft = &tempX; pTest = &opCompare; /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001: ** The value in regFree1 might get SCopy-ed into the file result. @@ -79117,7 +79385,6 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) testcase( pTest->op==TK_COLUMN ); sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL); testcase( aListelem[i+1].pExpr->op==TK_COLUMN ); - testcase( aListelem[i+1].pExpr->op==TK_REGISTER ); sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel); sqlite3ExprCachePop(pParse, 1); @@ -79156,7 +79423,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0); }else{ sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_TRIGGER, - pExpr->affinity, pExpr->u.zToken, 0); + pExpr->affinity, pExpr->u.zToken, 0, 0); } break; @@ -79168,6 +79435,28 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) return inReg; } +/* +** Factor out the code of the given expression to initialization time. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeAtInit( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The expression to code when the VDBE initializes */ + int regDest, /* Store the value in this register */ + u8 reusable /* True if this expression is reusable */ +){ + ExprList *p; + assert( ConstFactorOk(pParse) ); + p = pParse->pConstExpr; + pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); + p = sqlite3ExprListAppend(pParse, p, pExpr); + if( p ){ + struct ExprList_item *pItem = &p->a[p->nExpr-1]; + pItem->u.iConstExprReg = regDest; + pItem->reusable = reusable; + } + pParse->pConstExpr = p; +} + /* ** Generate code to evaluate an expression and store the results ** into a register. Return the register number where the results @@ -79176,15 +79465,40 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) ** If the register is a temporary register that can be deallocated, ** then write its number into *pReg. If the result register is not ** a temporary, then set *pReg to zero. +** +** If pExpr is a constant, then this routine might generate this +** code to fill the register in the initialization section of the +** VDBE program, in order to factor it out of the evaluation loop. */ SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ - int r1 = sqlite3GetTempReg(pParse); - int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); - if( r2==r1 ){ - *pReg = r1; + int r2; + pExpr = sqlite3ExprSkipCollate(pExpr); + if( ConstFactorOk(pParse) + && pExpr->op!=TK_REGISTER + && sqlite3ExprIsConstantNotJoin(pExpr) + ){ + ExprList *p = pParse->pConstExpr; + int i; + *pReg = 0; + if( p ){ + struct ExprList_item *pItem; + for(pItem=p->a, i=p->nExpr; i>0; pItem++, i--){ + if( pItem->reusable && sqlite3ExprCompare(pItem->pExpr,pExpr,-1)==0 ){ + return pItem->u.iConstExprReg; + } + } + } + r2 = ++pParse->nMem; + sqlite3ExprCodeAtInit(pParse, pExpr, r2, 1); }else{ - sqlite3ReleaseTempReg(pParse, r1); - *pReg = 0; + int r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); + if( r2==r1 ){ + *pReg = r1; + }else{ + sqlite3ReleaseTempReg(pParse, r1); + *pReg = 0; + } } return r2; } @@ -79227,12 +79541,13 @@ SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targe int inReg; inReg = sqlite3ExprCode(pParse, pExpr, target); assert( target>0 ); - /* This routine is called for terms to INSERT or UPDATE. And the only - ** other place where expressions can be converted into TK_REGISTER is - ** in WHERE clause processing. So as currently implemented, there is - ** no way for a TK_REGISTER to exist here. But it seems prudent to - ** keep the ALWAYS() in case the conditions above change with future - ** modifications or enhancements. */ + /* The only place, other than this routine, where expressions can be + ** converted to TK_REGISTER is internal subexpressions in BETWEEN and + ** CASE operators. Neither ever calls this routine. And this routine + ** is never called twice on the same expression. Hence it is impossible + ** for the input to this routine to already be a register. Nevertheless, + ** it seems prudent to keep the ALWAYS() in case the conditions above + ** change with future modifications or enhancements. */ if( ALWAYS(pExpr->op!=TK_REGISTER) ){ int iMem; iMem = ++pParse->nMem; @@ -79364,7 +79679,6 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){ } case TK_AGG_FUNCTION: - case TK_CONST_FUNC: case TK_FUNCTION: { ExprList *pFarg; /* List of function arguments */ if( ExprHasProperty(pExpr, EP_TokenOnly) ){ @@ -79515,164 +79829,51 @@ SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){ } #endif /* SQLITE_DEBUG */ -/* -** Return TRUE if pExpr is an constant expression that is appropriate -** for factoring out of a loop. Appropriate expressions are: -** -** * Any expression that evaluates to two or more opcodes. -** -** * Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, -** or OP_Variable that does not need to be placed in a -** specific register. -** -** There is no point in factoring out single-instruction constant -** expressions that need to be placed in a particular register. -** We could factor them out, but then we would end up adding an -** OP_SCopy instruction to move the value into the correct register -** later. We might as well just use the original instruction and -** avoid the OP_SCopy. -*/ -static int isAppropriateForFactoring(Expr *p){ - if( !sqlite3ExprIsConstantNotJoin(p) ){ - return 0; /* Only constant expressions are appropriate for factoring */ - } - if( (p->flags & EP_FixedDest)==0 ){ - return 1; /* Any constant without a fixed destination is appropriate */ - } - while( p->op==TK_UPLUS ) p = p->pLeft; - switch( p->op ){ -#ifndef SQLITE_OMIT_BLOB_LITERAL - case TK_BLOB: -#endif - case TK_VARIABLE: - case TK_INTEGER: - case TK_FLOAT: - case TK_NULL: - case TK_STRING: { - testcase( p->op==TK_BLOB ); - testcase( p->op==TK_VARIABLE ); - testcase( p->op==TK_INTEGER ); - testcase( p->op==TK_FLOAT ); - testcase( p->op==TK_NULL ); - testcase( p->op==TK_STRING ); - /* Single-instruction constants with a fixed destination are - ** better done in-line. If we factor them, they will just end - ** up generating an OP_SCopy to move the value to the destination - ** register. */ - return 0; - } - case TK_UMINUS: { - if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){ - return 0; - } - break; - } - default: { - break; - } - } - return 1; -} - -/* -** If pExpr is a constant expression that is appropriate for -** factoring out of a loop, then evaluate the expression -** into a register and convert the expression into a TK_REGISTER -** expression. -*/ -static int evalConstExpr(Walker *pWalker, Expr *pExpr){ - Parse *pParse = pWalker->pParse; - switch( pExpr->op ){ - case TK_IN: - case TK_REGISTER: { - return WRC_Prune; - } - case TK_COLLATE: { - return WRC_Continue; - } - case TK_FUNCTION: - case TK_AGG_FUNCTION: - case TK_CONST_FUNC: { - /* The arguments to a function have a fixed destination. - ** Mark them this way to avoid generated unneeded OP_SCopy - ** instructions. - */ - ExprList *pList = pExpr->x.pList; - assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); - if( pList ){ - int i = pList->nExpr; - struct ExprList_item *pItem = pList->a; - for(; i>0; i--, pItem++){ - if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest; - } - } - break; - } - } - if( isAppropriateForFactoring(pExpr) ){ - int r1 = ++pParse->nMem; - int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); - /* If r2!=r1, it means that register r1 is never used. That is harmless - ** but suboptimal, so we want to know about the situation to fix it. - ** Hence the following assert: */ - assert( r2==r1 ); - exprToRegister(pExpr, r2); - return WRC_Prune; - } - return WRC_Continue; -} - -/* -** Preevaluate constant subexpressions within pExpr and store the -** results in registers. Modify pExpr so that the constant subexpresions -** are TK_REGISTER opcodes that refer to the precomputed values. -** -** This routine is a no-op if the jump to the cookie-check code has -** already occur. Since the cookie-check jump is generated prior to -** any other serious processing, this check ensures that there is no -** way to accidently bypass the constant initializations. -** -** This routine is also a no-op if the SQLITE_FactorOutConst optimization -** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) -** interface. This allows test logic to verify that the same answer is -** obtained for queries regardless of whether or not constants are -** precomputed into registers or if they are inserted in-line. -*/ -SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){ - Walker w; - if( pParse->cookieGoto ) return; - if( OptimizationDisabled(pParse->db, SQLITE_FactorOutConst) ) return; - memset(&w, 0, sizeof(w)); - w.xExprCallback = evalConstExpr; - w.pParse = pParse; - sqlite3WalkExpr(&w, pExpr); -} - - /* ** Generate code that pushes the value of every element of the given ** expression list into a sequence of registers beginning at target. ** ** Return the number of elements evaluated. +** +** The SQLITE_ECEL_DUP flag prevents the arguments from being +** filled using OP_SCopy. OP_Copy must be used instead. +** +** The SQLITE_ECEL_FACTOR argument allows constant arguments to be +** factored out into initialization code. */ SQLITE_PRIVATE int sqlite3ExprCodeExprList( Parse *pParse, /* Parsing context */ ExprList *pList, /* The expression list to be coded */ int target, /* Where to write results */ - int doHardCopy /* Make a hard copy of every element */ + u8 flags /* SQLITE_ECEL_* flags */ ){ struct ExprList_item *pItem; int i, n; + u8 copyOp = (flags & SQLITE_ECEL_DUP) ? OP_Copy : OP_SCopy; assert( pList!=0 ); assert( target>0 ); assert( pParse->pVdbe!=0 ); /* Never gets this far otherwise */ n = pList->nExpr; + if( !ConstFactorOk(pParse) ) flags &= ~SQLITE_ECEL_FACTOR; for(pItem=pList->a, i=0; ipExpr; - int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); - if( inReg!=target+i ){ - sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy, - inReg, target+i); + if( (flags & SQLITE_ECEL_FACTOR)!=0 && sqlite3ExprIsConstant(pExpr) ){ + sqlite3ExprCodeAtInit(pParse, pExpr, target+i, 0); + }else{ + int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); + if( inReg!=target+i ){ + VdbeOp *pOp; + Vdbe *v = pParse->pVdbe; + if( copyOp==OP_Copy + && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy + && pOp->p1+pOp->p3+1==inReg + && pOp->p2+pOp->p3+1==target+i + ){ + pOp->p3++; + }else{ + sqlite3VdbeAddOp2(v, copyOp, inReg, target+i); + } + } } } return n; @@ -79762,8 +79963,8 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int case TK_AND: { int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); - sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); sqlite3ExprCachePop(pParse, 1); @@ -79772,7 +79973,9 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int case TK_OR: { testcase( jumpIfNull==0 ); sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); + sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull); + sqlite3ExprCachePop(pParse, 1); break; } case TK_NOT: { @@ -79847,10 +80050,16 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int } #endif default: { - r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); - sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0); - testcase( regFree1==0 ); - testcase( jumpIfNull==0 ); + if( exprAlwaysTrue(pExpr) ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, dest); + }else if( exprAlwaysFalse(pExpr) ){ + /* No-op */ + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); + } break; } } @@ -79913,14 +80122,16 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int case TK_AND: { testcase( jumpIfNull==0 ); sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); + sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); + sqlite3ExprCachePop(pParse, 1); break; } case TK_OR: { int d2 = sqlite3VdbeMakeLabel(v); testcase( jumpIfNull==0 ); - sqlite3ExprCachePush(pParse); sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprCachePush(pParse); sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull); sqlite3VdbeResolveLabel(v, d2); sqlite3ExprCachePop(pParse, 1); @@ -79992,10 +80203,16 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int } #endif default: { - r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); - sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0); - testcase( regFree1==0 ); - testcase( jumpIfNull==0 ); + if( exprAlwaysFalse(pExpr) ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, dest); + }else if( exprAlwaysTrue(pExpr) ){ + /* no-op */ + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); + } break; } } @@ -80026,16 +80243,18 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int ** an incorrect 0 or 1 could lead to a malfunction. */ SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){ - if( pA==0||pB==0 ){ + u32 combinedFlags; + if( pA==0 || pB==0 ){ return pB==pA ? 0 : 2; } - assert( !ExprHasProperty(pA, EP_TokenOnly|EP_Reduced) ); - assert( !ExprHasProperty(pB, EP_TokenOnly|EP_Reduced) ); - if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){ + combinedFlags = pA->flags | pB->flags; + if( combinedFlags & EP_IntValue ){ + if( (pA->flags&pB->flags&EP_IntValue)!=0 && pA->u.iValue==pB->u.iValue ){ + return 0; + } return 2; } - if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; - if( pA->op!=pB->op && (pA->op!=TK_REGISTER || pA->op2!=pB->op) ){ + if( pA->op!=pB->op ){ if( pA->op==TK_COLLATE && sqlite3ExprCompare(pA->pLeft, pB, iTab)<2 ){ return 1; } @@ -80044,23 +80263,23 @@ SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){ } return 2; } - if( sqlite3ExprCompare(pA->pLeft, pB->pLeft, iTab) ) return 2; - if( sqlite3ExprCompare(pA->pRight, pB->pRight, iTab) ) return 2; - if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; - if( pA->iColumn!=pB->iColumn ) return 2; - if( pA->iTable!=pB->iTable - && pA->op!=TK_REGISTER - && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; - if( ExprHasProperty(pA, EP_IntValue) ){ - if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){ - return 2; - } - }else if( pA->op!=TK_COLUMN && ALWAYS(pA->op!=TK_AGG_COLUMN) && pA->u.zToken){ - if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2; + if( pA->op!=TK_COLUMN && ALWAYS(pA->op!=TK_AGG_COLUMN) && pA->u.zToken ){ if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){ return pA->op==TK_COLLATE ? 1 : 2; } } + if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; + if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ + if( combinedFlags & EP_xIsSelect ) return 2; + if( sqlite3ExprCompare(pA->pLeft, pB->pLeft, iTab) ) return 2; + if( sqlite3ExprCompare(pA->pRight, pB->pRight, iTab) ) return 2; + if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; + if( ALWAYS((combinedFlags & EP_Reduced)==0) ){ + if( pA->iColumn!=pB->iColumn ) return 2; + if( pA->iTable!=pB->iTable + && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; + } + } return 0; } @@ -81532,8 +81751,7 @@ static void openStatTable( /* Open the sqlite_stat[134] tables for writing. */ for(i=0; aTable[i].zCols; i++){ assert( inRowid ){ + sqlite3DbFree(db, p->u.aRowid); + p->nRowid = 0; + } +} +#endif + +/* Initialize the BLOB value of a ROWID +*/ +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 +static void sampleSetRowid(sqlite3 *db, Stat4Sample *p, int n, const u8 *pData){ + assert( db!=0 ); + if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid); + p->u.aRowid = sqlite3DbMallocRaw(db, n); + if( p->u.aRowid ){ + p->nRowid = n; + memcpy(p->u.aRowid, pData, n); + }else{ + p->nRowid = 0; + } +} +#endif + +/* Initialize the INTEGER value of a ROWID. +*/ +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 +static void sampleSetRowidInt64(sqlite3 *db, Stat4Sample *p, i64 iRowid){ + assert( db!=0 ); + if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid); + p->nRowid = 0; + p->u.iRowid = iRowid; +} +#endif + + +/* +** Copy the contents of object (*pFrom) into (*pTo). +*/ +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 +static void sampleCopy(Stat4Accum *p, Stat4Sample *pTo, Stat4Sample *pFrom){ + pTo->isPSample = pFrom->isPSample; + pTo->iCol = pFrom->iCol; + pTo->iHash = pFrom->iHash; + memcpy(pTo->anEq, pFrom->anEq, sizeof(tRowcnt)*p->nCol); + memcpy(pTo->anLt, pFrom->anLt, sizeof(tRowcnt)*p->nCol); + memcpy(pTo->anDLt, pFrom->anDLt, sizeof(tRowcnt)*p->nCol); + if( pFrom->nRowid ){ + sampleSetRowid(p->db, pTo, pFrom->nRowid, pFrom->u.aRowid); + }else{ + sampleSetRowidInt64(p->db, pTo, pFrom->u.iRowid); + } +} +#endif + +/* +** Reclaim all memory of a Stat4Accum structure. +*/ +static void stat4Destructor(void *pOld){ + Stat4Accum *p = (Stat4Accum*)pOld; +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 + int i; + for(i=0; inCol; i++) sampleClear(p->db, p->aBest+i); + for(i=0; imxSample; i++) sampleClear(p->db, p->a+i); + sampleClear(p->db, &p->current); +#endif + sqlite3DbFree(p->db, p); +} + /* ** Implementation of the stat_init(N,C) SQL function. The two parameters ** are the number of rows in the table or index (C) and the number of columns @@ -81595,6 +81891,7 @@ static void statInit( int nCol; /* Number of columns in index being sampled */ int nColUp; /* nCol rounded up for alignment */ int n; /* Bytes of space to allocate */ + sqlite3 *db; /* Database connection */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 int mxSample = SQLITE_STAT4_SAMPLES; #endif @@ -81611,16 +81908,18 @@ static void statInit( + sizeof(tRowcnt)*nColUp /* Stat4Accum.anDLt */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 + sizeof(tRowcnt)*nColUp /* Stat4Accum.anLt */ - + sizeof(Stat4Sample)*(nCol+mxSample) /* Stat4Accum.aBest[], a[] */ + + sizeof(Stat4Sample)*(nCol+mxSample) /* Stat4Accum.aBest[], a[] */ + sizeof(tRowcnt)*3*nColUp*(nCol+mxSample) #endif ; - p = sqlite3MallocZero(n); + db = sqlite3_context_db_handle(context); + p = sqlite3DbMallocZero(db, n); if( p==0 ){ sqlite3_result_error_nomem(context); return; } + p->db = db; p->nRow = 0; p->nCol = nCol; p->current.anDLt = (tRowcnt*)&p[1]; @@ -81655,7 +81954,7 @@ static void statInit( #endif /* Return a pointer to the allocated object to the caller */ - sqlite3_result_blob(context, p, sizeof(p), sqlite3_free); + sqlite3_result_blob(context, p, sizeof(p), stat4Destructor); } static const FuncDef statInitFuncdef = { 1+IsStat34, /* nArg */ @@ -81729,25 +82028,12 @@ static int sampleIsBetter( #endif } -/* -** Copy the contents of object (*pFrom) into (*pTo). -*/ -static void sampleCopy(Stat4Accum *p, Stat4Sample *pTo, Stat4Sample *pFrom){ - pTo->iRowid = pFrom->iRowid; - pTo->isPSample = pFrom->isPSample; - pTo->iCol = pFrom->iCol; - pTo->iHash = pFrom->iHash; - memcpy(pTo->anEq, pFrom->anEq, sizeof(tRowcnt)*p->nCol); - memcpy(pTo->anLt, pFrom->anLt, sizeof(tRowcnt)*p->nCol); - memcpy(pTo->anDLt, pFrom->anDLt, sizeof(tRowcnt)*p->nCol); -} - /* ** Copy the contents of sample *pNew into the p->a[] array. If necessary, ** remove the least desirable sample from p->a[] to make room. */ static void sampleInsert(Stat4Accum *p, Stat4Sample *pNew, int nEqZero){ - Stat4Sample *pSample; + Stat4Sample *pSample = 0; int i; assert( IsStat4 || nEqZero==0 ); @@ -81787,8 +82073,10 @@ static void sampleInsert(Stat4Accum *p, Stat4Sample *pNew, int nEqZero){ tRowcnt *anEq = pMin->anEq; tRowcnt *anLt = pMin->anLt; tRowcnt *anDLt = pMin->anDLt; + sampleClear(p->db, pMin); memmove(pMin, &pMin[1], sizeof(p->a[0])*(p->nSample-p->iMin-1)); pSample = &p->a[p->nSample-1]; + pSample->nRowid = 0; pSample->anEq = anEq; pSample->anDLt = anDLt; pSample->anLt = anLt; @@ -81885,16 +82173,17 @@ static void samplePushPrevious(Stat4Accum *p, int iChng){ } /* -** Implementation of the stat_push SQL function: stat_push(P,R,C) +** Implementation of the stat_push SQL function: stat_push(P,C,R) ** Arguments: ** ** P Pointer to the Stat4Accum object created by stat_init() ** C Index of left-most column to differ from previous row -** R Rowid for the current row +** R Rowid for the current row. Might be a key record for +** WITHOUT ROWID tables. ** ** The SQL function always returns NULL. ** -** The R parameter is only used for STAT3 and STAT4. +** The R parameter is only used for STAT3 and STAT4 */ static void statPush( sqlite3_context *context, @@ -81934,7 +82223,12 @@ static void statPush( } p->nRow++; #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - p->current.iRowid = sqlite3_value_int64(argv[2]); + if( sqlite3_value_type(argv[2])==SQLITE_INTEGER ){ + sampleSetRowidInt64(p->db, &p->current, sqlite3_value_int64(argv[2])); + }else{ + sampleSetRowid(p->db, &p->current, sqlite3_value_bytes(argv[2]), + sqlite3_value_blob(argv[2])); + } p->current.iHash = p->iPrn = p->iPrn*1103515245 + 12345; #endif @@ -82058,7 +82352,13 @@ static void statGet( p->iGet = 0; } if( p->iGetnSample ){ - sqlite3_result_int64(context, p->a[p->iGet].iRowid); + Stat4Sample *pS = p->a + p->iGet; + if( pS->nRowid==0 ){ + sqlite3_result_int64(context, pS->u.iRowid); + }else{ + sqlite3_result_blob(context, pS->u.aRowid, pS->nRowid, + SQLITE_TRANSIENT); + } } }else{ tRowcnt *aCnt = 0; @@ -82195,22 +82495,26 @@ static void analyzeOneTable( for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ int nCol; /* Number of columns indexed by pIdx */ - KeyInfo *pKey; /* KeyInfo structure for pIdx */ int *aGotoChng; /* Array of jump instruction addresses */ int addrRewind; /* Address of "OP_Rewind iIdxCur" */ int addrGotoChng0; /* Address of "Goto addr_chng_0" */ int addrNextRow; /* Address of "next_row:" */ + const char *zIdxName; /* Name of the index */ if( pOnlyIdx && pOnlyIdx!=pIdx ) continue; if( pIdx->pPartIdxWhere==0 ) needTableCnt = 0; VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName)); - nCol = pIdx->nColumn; + nCol = pIdx->nKeyCol; aGotoChng = sqlite3DbMallocRaw(db, sizeof(int)*(nCol+1)); if( aGotoChng==0 ) continue; - pKey = sqlite3IndexKeyinfo(pParse, pIdx); /* Populate the register containing the index name. */ - sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0); + if( pIdx->autoIndex==2 && !HasRowid(pTab) ){ + zIdxName = pTab->zName; + }else{ + zIdxName = pIdx->zName; + } + sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, zIdxName, 0); /* ** Pseudo-code for loop that calls stat_push(): @@ -82253,7 +82557,7 @@ static void analyzeOneTable( /* Open a read-only cursor on the index being analyzed. */ assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) ); sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb); - sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); VdbeComment((v, "%s", pIdx->zName)); /* Invoke the stat_init() function. The arguments are: @@ -82327,8 +82631,21 @@ static void analyzeOneTable( */ sqlite3VdbeJumpHere(v, aGotoChng[nCol]); #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 - sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, regRowid); assert( regRowid==(regStat4+2) ); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, regRowid); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pIdx->pTable); + int j, k, regKey; + regKey = sqlite3GetTempRange(pParse, pPk->nKeyCol); + for(j=0; jnKeyCol; j++){ + k = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[j]); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, regKey+j); + VdbeComment((v, "%s", pTab->aCol[pPk->aiColumn[j]].zName)); + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regKey, pPk->nKeyCol, regRowid); + sqlite3ReleaseTempRange(pParse, regKey, pPk->nKeyCol); + } #endif assert( regChng==(regStat4+1) ); sqlite3VdbeAddOp3(v, OP_Function, 1, regStat4, regTemp); @@ -82354,6 +82671,7 @@ static void analyzeOneTable( int regSampleRowid = regCol + nCol; int addrNext; int addrIsNull; + u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound; pParse->nMem = MAX(pParse->nMem, regCol+nCol+1); @@ -82363,13 +82681,13 @@ static void analyzeOneTable( callStatGet(v, regStat4, STAT_GET_NEQ, regEq); callStatGet(v, regStat4, STAT_GET_NLT, regLt); callStatGet(v, regStat4, STAT_GET_NDLT, regDLt); - sqlite3VdbeAddOp3(v, OP_NotExists, iTabCur, addrNext, regSampleRowid); + sqlite3VdbeAddOp4Int(v, seekOp, iTabCur, addrNext, regSampleRowid, 0); #ifdef SQLITE_ENABLE_STAT3 sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, pIdx->aiColumn[0], regSample); #else for(i=0; iaiColumn[i]; + i16 iCol = pIdx->aiColumn[i]; sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, iCol, regCol+i); } sqlite3VdbeAddOp3(v, OP_MakeRecord, regCol, nCol+1, regSample); @@ -82617,15 +82935,17 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ if( pTable==0 ){ return 0; } - if( argv[1] ){ - pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase); - }else{ + if( argv[1]==0 ){ pIndex = 0; + }else if( sqlite3_stricmp(argv[0],argv[1])==0 ){ + pIndex = sqlite3PrimaryKeyIndex(pTable); + }else{ + pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase); } z = argv[2]; if( pIndex ){ - decodeIntArray((char*)z, pIndex->nColumn+1, pIndex->aiRowEst, pIndex); + decodeIntArray((char*)z, pIndex->nKeyCol+1, pIndex->aiRowEst, pIndex); if( pIndex->pPartIdxWhere==0 ) pTable->nRowEst = pIndex->aiRowEst[0]; }else{ Index fakeIdx; @@ -82671,7 +82991,7 @@ static void initAvgEq(Index *pIdx){ IndexSample *aSample = pIdx->aSample; IndexSample *pFinal = &aSample[pIdx->nSample-1]; int iCol; - for(iCol=0; iColnColumn; iCol++){ + for(iCol=0; iColnKeyCol; iCol++){ int i; /* Used to iterate through samples */ tRowcnt sumEq = 0; /* Sum of the nEq values */ tRowcnt nSum = 0; /* Number of terms contributing to sumEq */ @@ -82699,6 +83019,23 @@ static void initAvgEq(Index *pIdx){ } } +/* +** Look up an index by name. Or, if the name of a WITHOUT ROWID table +** is supplied instead, find the PRIMARY KEY index for that table. +*/ +static Index *findIndexOrPrimaryKey( + sqlite3 *db, + const char *zName, + const char *zDb +){ + Index *pIdx = sqlite3FindIndex(db, zName, zDb); + if( pIdx==0 ){ + Table *pTab = sqlite3FindTable(db, zName, zDb); + if( pTab && !HasRowid(pTab) ) pIdx = sqlite3PrimaryKeyIndex(pTab); + } + return pIdx; +} + /* ** Load the content from either the sqlite_stat4 or sqlite_stat3 table ** into the relevant Index.aSample[] arrays. @@ -82748,14 +83085,14 @@ static int loadStatTbl( zIndex = (char *)sqlite3_column_text(pStmt, 0); if( zIndex==0 ) continue; nSample = sqlite3_column_int(pStmt, 1); - pIdx = sqlite3FindIndex(db, zIndex, zDb); + pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); assert( pIdx==0 || bStat3 || pIdx->nSample==0 ); /* Index.nSample is non-zero at this point if data has already been ** loaded from the stat4 table. In this case ignore stat3 data. */ if( pIdx==0 || pIdx->nSample ) continue; if( bStat3==0 ){ - nIdxCol = pIdx->nColumn+1; - nAvgCol = pIdx->nColumn; + nIdxCol = pIdx->nKeyCol+1; + nAvgCol = pIdx->nKeyCol; } pIdx->nSampleCol = nIdxCol; nByte = sizeof(IndexSample) * nSample; @@ -82794,7 +83131,7 @@ static int loadStatTbl( zIndex = (char *)sqlite3_column_text(pStmt, 0); if( zIndex==0 ) continue; - pIdx = sqlite3FindIndex(db, zIndex, zDb); + pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); if( pIdx==0 ) continue; /* This next condition is true if data has already been loaded from ** the sqlite_stat4 table. In this case ignore stat3 data. */ @@ -82975,10 +83312,6 @@ static int resolveAttachExpr(NameContext *pName, Expr *pExpr) if( pExpr ){ if( pExpr->op!=TK_ID ){ rc = sqlite3ResolveExprNames(pName, pExpr); - if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){ - sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken); - return SQLITE_ERROR; - } }else{ pExpr->op = TK_STRING; } @@ -83908,6 +84241,7 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ assert( !pParse->isMultiWrite || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); if( v ){ + while( sqlite3VdbeDeletePriorOpcode(v, OP_Close) ){} sqlite3VdbeAddOp0(v, OP_Halt); /* The cookie mask contains one bit for each database file open. @@ -83918,7 +84252,7 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ */ if( pParse->cookieGoto>0 ){ yDbMask mask; - int iDb; + int iDb, i, addr; sqlite3VdbeJumpHere(v, pParse->cookieGoto-1); for(iDb=0, mask=1; iDbnDb; mask<<=1, iDb++){ if( (mask & pParse->cookieMask)==0 ) continue; @@ -83932,14 +84266,11 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ } } #ifndef SQLITE_OMIT_VIRTUALTABLE - { - int i; - for(i=0; inVtabLock; i++){ - char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); - sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); - } - pParse->nVtabLock = 0; + for(i=0; inVtabLock; i++){ + char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); + sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); } + pParse->nVtabLock = 0; #endif /* Once all the cookies have been verified and transactions opened, @@ -83952,8 +84283,18 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ */ sqlite3AutoincrementBegin(pParse); + /* Code constant expressions that where factored out of inner loops */ + addr = pParse->cookieGoto; + if( pParse->pConstExpr ){ + ExprList *pEL = pParse->pConstExpr; + pParse->cookieGoto = 0; + for(i=0; inExpr; i++){ + sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); + } + } + /* Finally, jump back to the beginning of the executable code. */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); } } @@ -83961,10 +84302,6 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ /* Get the VDBE program ready for execution */ if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){ -#ifdef SQLITE_DEBUG - FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0; - sqlite3VdbeTrace(v, trace); -#endif assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */ /* A minimum of one cursor is required if autoincrement is used * See ticket [a696379c1f08866] */ @@ -84150,8 +84487,10 @@ static void freeIndex(sqlite3 *db, Index *p){ #ifndef SQLITE_OMIT_ANALYZE sqlite3DeleteIndexSamples(db, p); #endif + if( db==0 || db->pnBytesFreed==0 ) sqlite3KeyInfoUnref(p->pKeyInfo); sqlite3ExprDelete(db, p->pPartIdxWhere); sqlite3DbFree(db, p->zColAff); + if( p->isResized ) sqlite3DbFree(db, p->azColl); sqlite3DbFree(db, p); } @@ -84409,8 +84748,7 @@ SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){ SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){ Vdbe *v = sqlite3GetVdbe(p); sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb)); - sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb); - sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32); /* 5 column table */ + sqlite3VdbeAddOp4Int(v, OP_OpenWrite, 0, MASTER_ROOT, iDb, 5); if( p->nTab==0 ){ p->nTab = 1; } @@ -84515,6 +84853,27 @@ SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){ return SQLITE_OK; } +/* +** Return the PRIMARY KEY index of a table +*/ +SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table *pTab){ + Index *p; + for(p=pTab->pIndex; p && p->autoIndex!=2; p=p->pNext){} + return p; +} + +/* +** Return the column of index pIdx that corresponds to table +** column iCol. Return -1 if not found. +*/ +SQLITE_PRIVATE i16 sqlite3ColumnOfIndex(Index *pIdx, i16 iCol){ + int i; + for(i=0; inColumn; i++){ + if( iCol==pIdx->aiColumn[i] ) return i; + } + return -1; +} + /* ** Begin constructing a new table representation in memory. This is ** the first of several action routines that get called in response @@ -84714,7 +85073,7 @@ SQLITE_PRIVATE void sqlite3StartTable( }else #endif { - sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2); + pParse->addrCrTab = sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2); } sqlite3OpenMasterTable(pParse, iDb); sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1); @@ -84982,6 +85341,7 @@ SQLITE_PRIVATE void sqlite3AddPrimaryKey( Table *pTab = pParse->pNewTable; char *zType = 0; int iCol = -1, i; + int nTerm; if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit; if( pTab->tabFlags & TF_HasPrimaryKey ){ sqlite3ErrorMsg(pParse, @@ -84992,39 +85352,43 @@ SQLITE_PRIVATE void sqlite3AddPrimaryKey( if( pList==0 ){ iCol = pTab->nCol - 1; pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY; + zType = pTab->aCol[iCol].zType; + nTerm = 1; }else{ - for(i=0; inExpr; i++){ + nTerm = pList->nExpr; + for(i=0; inCol; iCol++){ if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){ + pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY; + zType = pTab->aCol[iCol].zType; break; } } - if( iColnCol ){ - pTab->aCol[iCol].colFlags |= COLFLAG_PRIMKEY; - } } - if( pList->nExpr>1 ) iCol = -1; } - if( iCol>=0 && iColnCol ){ - zType = pTab->aCol[iCol].zType; - } - if( zType && sqlite3StrICmp(zType, "INTEGER")==0 - && sortOrder==SQLITE_SO_ASC ){ + if( nTerm==1 + && zType && sqlite3StrICmp(zType, "INTEGER")==0 + && sortOrder==SQLITE_SO_ASC + ){ pTab->iPKey = iCol; pTab->keyConf = (u8)onError; assert( autoInc==0 || autoInc==1 ); pTab->tabFlags |= autoInc*TF_Autoincrement; + if( pList ) pParse->iPkSortOrder = pList->a[0].sortOrder; }else if( autoInc ){ #ifndef SQLITE_OMIT_AUTOINCREMENT sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an " "INTEGER PRIMARY KEY"); #endif }else{ + Vdbe *v = pParse->pVdbe; Index *p; + if( v ) pParse->addrSkipPK = sqlite3VdbeAddOp0(v, OP_Noop); p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0); if( p ){ p->autoIndex = 2; + if( v ) sqlite3VdbeJumpHere(v, pParse->addrSkipPK); } pList = 0; } @@ -85081,7 +85445,7 @@ SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){ ** collation type was added. Correct this if it is the case. */ for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ - assert( pIdx->nColumn==1 ); + assert( pIdx->nKeyCol==1 ); if( pIdx->aiColumn[0]==i ){ pIdx->azColl[0] = p->aCol[i].zColl; } @@ -85189,10 +85553,10 @@ static void identPut(char *z, int *pIdx, char *zSignedIdent){ for(j=0; zIdent[j]; j++){ if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break; } - needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID; - if( !needQuote ){ - needQuote = zIdent[j]; - } + needQuote = sqlite3Isdigit(zIdent[0]) + || sqlite3KeywordCode(zIdent, j)!=TK_ID + || zIdent[j]!=0 + || j==0; if( needQuote ) z[i++] = '"'; for(j=0; zIdent[j]; j++){ @@ -85273,6 +85637,31 @@ static char *createTableStmt(sqlite3 *db, Table *p){ return zStmt; } +/* +** Resize an Index object to hold N columns total. Return SQLITE_OK +** on success and SQLITE_NOMEM on an OOM error. +*/ +static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){ + char *zExtra; + int nByte; + if( pIdx->nColumn>=N ) return SQLITE_OK; + assert( pIdx->isResized==0 ); + nByte = (sizeof(char*) + sizeof(i16) + 1)*N; + zExtra = sqlite3DbMallocZero(db, nByte); + if( zExtra==0 ) return SQLITE_NOMEM; + memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn); + pIdx->azColl = (char**)zExtra; + zExtra += sizeof(char*)*N; + memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn); + pIdx->aiColumn = (i16*)zExtra; + zExtra += sizeof(i16)*N; + memcpy(zExtra, pIdx->aSortOrder, pIdx->nColumn); + pIdx->aSortOrder = (u8*)zExtra; + pIdx->nColumn = N; + pIdx->isResized = 1; + return SQLITE_OK; +} + /* ** Estimate the total row width for a table. */ @@ -85291,16 +85680,148 @@ static void estimateTableWidth(Table *pTab){ ** Estimate the average size of a row for an index. */ static void estimateIndexWidth(Index *pIdx){ - unsigned wIndex = 1; + unsigned wIndex = 0; int i; const Column *aCol = pIdx->pTable->aCol; for(i=0; inColumn; i++){ - assert( pIdx->aiColumn[i]>=0 && pIdx->aiColumn[i]pTable->nCol ); - wIndex += aCol[pIdx->aiColumn[i]].szEst; + i16 x = pIdx->aiColumn[i]; + assert( xpTable->nCol ); + wIndex += x<0 ? 1 : aCol[pIdx->aiColumn[i]].szEst; } pIdx->szIdxRow = sqlite3LogEst(wIndex*4); } +/* Return true if value x is found any of the first nCol entries of aiCol[] +*/ +static int hasColumn(const i16 *aiCol, int nCol, int x){ + while( nCol-- > 0 ) if( x==*(aiCol++) ) return 1; + return 0; +} + +/* +** This routine runs at the end of parsing a CREATE TABLE statement that +** has a WITHOUT ROWID clause. The job of this routine is to convert both +** internal schema data structures and the generated VDBE code so that they +** are appropriate for a WITHOUT ROWID table instead of a rowid table. +** Changes include: +** +** (1) Convert the OP_CreateTable into an OP_CreateIndex. There is +** no rowid btree for a WITHOUT ROWID. Instead, the canonical +** data storage is a covering index btree. +** (2) Bypass the creation of the sqlite_master table entry +** for the PRIMARY KEY as the the primary key index is now +** identified by the sqlite_master table entry of the table itself. +** (3) Set the Index.tnum of the PRIMARY KEY Index object in the +** schema to the rootpage from the main table. +** (4) Set all columns of the PRIMARY KEY schema object to be NOT NULL. +** (5) Add all table columns to the PRIMARY KEY Index object +** so that the PRIMARY KEY is a covering index. The surplus +** columns are part of KeyInfo.nXField and are not used for +** sorting or lookup or uniqueness checks. +** (6) Replace the rowid tail on all automatically generated UNIQUE +** indices with the PRIMARY KEY columns. +*/ +static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ + Index *pIdx; + Index *pPk; + int nPk; + int i, j; + sqlite3 *db = pParse->db; + Vdbe *v = pParse->pVdbe; + + /* Convert the OP_CreateTable opcode that would normally create the + ** root-page for the table into a OP_CreateIndex opcode. The index + ** created will become the PRIMARY KEY index. + */ + if( pParse->addrCrTab ){ + assert( v ); + sqlite3VdbeGetOp(v, pParse->addrCrTab)->opcode = OP_CreateIndex; + } + + /* Bypass the creation of the PRIMARY KEY btree and the sqlite_master + ** table entry. + */ + if( pParse->addrSkipPK ){ + assert( v ); + sqlite3VdbeGetOp(v, pParse->addrSkipPK)->opcode = OP_Goto; + } + + /* Locate the PRIMARY KEY index. Or, if this table was originally + ** an INTEGER PRIMARY KEY table, create a new PRIMARY KEY index. + */ + if( pTab->iPKey>=0 ){ + ExprList *pList; + pList = sqlite3ExprListAppend(pParse, 0, 0); + if( pList==0 ) return; + pList->a[0].zName = sqlite3DbStrDup(pParse->db, + pTab->aCol[pTab->iPKey].zName); + pList->a[0].sortOrder = pParse->iPkSortOrder; + assert( pParse->pNewTable==pTab ); + pPk = sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0); + if( pPk==0 ) return; + pPk->autoIndex = 2; + pTab->iPKey = -1; + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + } + pPk->isCovering = 1; + assert( pPk!=0 ); + nPk = pPk->nKeyCol; + + /* Make sure every column of the PRIMARY KEY is NOT NULL */ + for(i=0; iaCol[pPk->aiColumn[i]].notNull = 1; + } + pPk->uniqNotNull = 1; + + /* The root page of the PRIMARY KEY is the table root page */ + pPk->tnum = pTab->tnum; + + /* Update the in-memory representation of all UNIQUE indices by converting + ** the final rowid column into one or more columns of the PRIMARY KEY. + */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int n; + if( pIdx->autoIndex==2 ) continue; + for(i=n=0; iaiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ) n++; + } + if( n==0 ){ + /* This index is a superset of the primary key */ + pIdx->nColumn = pIdx->nKeyCol; + continue; + } + if( resizeIndexObject(db, pIdx, pIdx->nKeyCol+n) ) return; + for(i=0, j=pIdx->nKeyCol; iaiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ){ + pIdx->aiColumn[j] = pPk->aiColumn[i]; + pIdx->azColl[j] = pPk->azColl[i]; + j++; + } + } + assert( pIdx->nColumn>=pIdx->nKeyCol+n ); + assert( pIdx->nColumn>=j ); + } + + /* Add all table columns to the PRIMARY KEY index + */ + if( nPknCol ){ + if( resizeIndexObject(db, pPk, pTab->nCol) ) return; + for(i=0, j=nPk; inCol; i++){ + if( !hasColumn(pPk->aiColumn, j, i) ){ + assert( jnColumn ); + pPk->aiColumn[j] = i; + pPk->azColl[j] = "BINARY"; + j++; + } + } + assert( pPk->nColumn==j ); + assert( pTab->nCol==j ); + }else{ + pPk->nColumn = pTab->nCol; + } +} + /* ** This routine is called to report the final ")" that terminates ** a CREATE TABLE statement. @@ -85324,7 +85845,8 @@ static void estimateIndexWidth(Index *pIdx){ SQLITE_PRIVATE void sqlite3EndTable( Parse *pParse, /* Parse context */ Token *pCons, /* The ',' token after the last column defn. */ - Token *pEnd, /* The final ')' token in the CREATE TABLE */ + Token *pEnd, /* The ')' before options in the CREATE TABLE */ + u8 tabOpts, /* Extra table options. Usually 0. */ Select *pSelect /* Select from a "CREATE ... AS SELECT" */ ){ Table *p; /* The new table */ @@ -85340,6 +85862,31 @@ SQLITE_PRIVATE void sqlite3EndTable( assert( !db->init.busy || !pSelect ); + /* If the db->init.busy is 1 it means we are reading the SQL off the + ** "sqlite_master" or "sqlite_temp_master" table on the disk. + ** So do not write to the disk again. Extract the root page number + ** for the table from the db->init.newTnum field. (The page number + ** should have been put there by the sqliteOpenCb routine.) + */ + if( db->init.busy ){ + p->tnum = db->init.newTnum; + } + + /* Special processing for WITHOUT ROWID Tables */ + if( tabOpts & TF_WithoutRowid ){ + if( (p->tabFlags & TF_Autoincrement) ){ + sqlite3ErrorMsg(pParse, + "AUTOINCREMENT not allowed on WITHOUT ROWID tables"); + return; + } + if( (p->tabFlags & TF_HasPrimaryKey)==0 ){ + sqlite3ErrorMsg(pParse, "PRIMARY KEY missing on table %s", p->zName); + }else{ + p->tabFlags |= TF_WithoutRowid; + convertToWithoutRowidTable(pParse, p); + } + } + iDb = sqlite3SchemaToIndex(db, p->pSchema); #ifndef SQLITE_OMIT_CHECK @@ -85356,16 +85903,6 @@ SQLITE_PRIVATE void sqlite3EndTable( estimateIndexWidth(pIdx); } - /* If the db->init.busy is 1 it means we are reading the SQL off the - ** "sqlite_master" or "sqlite_temp_master" table on the disk. - ** So do not write to the disk again. Extract the root page number - ** for the table from the db->init.newTnum field. (The page number - ** should have been put there by the sqliteOpenCb routine.) - */ - if( db->init.busy ){ - p->tnum = db->init.newTnum; - } - /* If not initializing, then create a record for the new table ** in the SQLITE_MASTER table of the database. ** @@ -85439,7 +85976,9 @@ SQLITE_PRIVATE void sqlite3EndTable( if( pSelect ){ zStmt = createTableStmt(db, p); }else{ - n = (int)(pEnd->z - pParse->sNameToken.z) + 1; + Token *pEnd2 = tabOpts ? &pParse->sLastToken : pEnd; + n = (int)(pEnd2->z - pParse->sNameToken.z); + if( pEnd2->z[0]!=';' ) n += pEnd2->n; zStmt = sqlite3MPrintf(db, "CREATE %s %.*s", zType2, n, pParse->sNameToken.z ); @@ -85482,7 +86021,7 @@ SQLITE_PRIVATE void sqlite3EndTable( /* Reparse everything to update our internal data structures */ sqlite3VdbeAddParseSchemaOp(v, iDb, - sqlite3MPrintf(db, "tbl_name='%q'", p->zName)); + sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName)); } @@ -85587,7 +86126,7 @@ SQLITE_PRIVATE void sqlite3CreateView( sEnd.n = 1; /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */ - sqlite3EndTable(pParse, 0, &sEnd, 0); + sqlite3EndTable(pParse, 0, &sEnd, 0, 0); return; } #endif /* SQLITE_OMIT_VIEW */ @@ -86042,8 +86581,8 @@ exit_drop_table: ** currently under construction. pFromCol determines which columns ** in the current table point to the foreign key. If pFromCol==0 then ** connect the key to the last column inserted. pTo is the name of -** the table referred to. pToCol is a list of tables in the other -** pTo table that the foreign key points to. flags contains all +** the table referred to (a.k.a the "parent" table). pToCol is a list +** of tables in the parent pTo table. flags contains all ** information about the conflict resolution algorithms specified ** in the ON DELETE, ON UPDATE and ON INSERT clauses. ** @@ -86226,16 +86765,13 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ tnum = memRootPage; }else{ tnum = pIndex->tnum; - sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); } - pKey = sqlite3IndexKeyinfo(pParse, pIndex); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, - (char *)pKey, P4_KEYINFO_HANDOFF); - sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0)); + pKey = sqlite3KeyInfoOfIndex(pParse, pIndex); /* Open the sorter cursor if we are to use one. */ iSorter = pParse->nTab++; - sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*)pKey, P4_KEYINFO); + sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*) + sqlite3KeyInfoRef(pKey), P4_KEYINFO); /* Open the table. Loop through all rows of the table, inserting index ** records into the sorter. */ @@ -86243,20 +86779,25 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); regRecord = sqlite3GetTempReg(pParse); - sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1, &iPartIdxLabel); + sqlite3GenerateIndexKey(pParse,pIndex,iTab,regRecord,0,&iPartIdxLabel,0,0); sqlite3VdbeAddOp2(v, OP_SorterInsert, iSorter, regRecord); sqlite3VdbeResolveLabel(v, iPartIdxLabel); sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1); sqlite3VdbeJumpHere(v, addr1); + if( memRootPage<0 ) sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); + sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, + (char *)pKey, P4_KEYINFO); + sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0)); + addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); - if( pIndex->onError!=OE_None ){ + assert( pKey!=0 || db->mallocFailed || pParse->nErr ); + if( pIndex->onError!=OE_None && pKey!=0 ){ int j2 = sqlite3VdbeCurrentAddr(v) + 3; sqlite3VdbeAddOp2(v, OP_Goto, 0, j2); addr2 = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp3(v, OP_SorterCompare, iSorter, j2, regRecord); - sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_UNIQUE, - OE_Abort, "indexed columns are not unique", P4_STATIC - ); + sqlite3VdbeAddOp4Int(v, OP_SorterCompare, iSorter, j2, regRecord, + pKey->nField - pIndex->nKeyCol); + sqlite3UniqueConstraint(pParse, OE_Abort, pIndex); }else{ addr2 = sqlite3VdbeCurrentAddr(v); } @@ -86272,6 +86813,41 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ sqlite3VdbeAddOp1(v, OP_Close, iSorter); } +/* +** Allocate heap space to hold an Index object with nCol columns. +** +** Increase the allocation size to provide an extra nExtra bytes +** of 8-byte aligned space after the Index object and return a +** pointer to this extra space in *ppExtra. +*/ +SQLITE_PRIVATE Index *sqlite3AllocateIndexObject( + sqlite3 *db, /* Database connection */ + i16 nCol, /* Total number of columns in the index */ + int nExtra, /* Number of bytes of extra space to alloc */ + char **ppExtra /* Pointer to the "extra" space */ +){ + Index *p; /* Allocated index object */ + int nByte; /* Bytes of space for Index object + arrays */ + + nByte = ROUND8(sizeof(Index)) + /* Index structure */ + ROUND8(sizeof(char*)*nCol) + /* Index.azColl */ + ROUND8(sizeof(tRowcnt)*(nCol+1) + /* Index.aiRowEst */ + sizeof(i16)*nCol + /* Index.aiColumn */ + sizeof(u8)*nCol); /* Index.aSortOrder */ + p = sqlite3DbMallocZero(db, nByte + nExtra); + if( p ){ + char *pExtra = ((char*)p)+ROUND8(sizeof(Index)); + p->azColl = (char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol); + p->aiRowEst = (tRowcnt*)pExtra; pExtra += sizeof(tRowcnt)*(nCol+1); + p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol; + p->aSortOrder = (u8*)pExtra; + p->nColumn = nCol; + p->nKeyCol = nCol - 1; + *ppExtra = ((char*)p) + nByte; + } + return p; +} + /* ** Create a new index for an SQL table. pName1.pName2 is the name of the index ** and pTblList is the name of the table that is to be indexed. Both will @@ -86306,7 +86882,6 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( char *zName = 0; /* Name of the index */ int nName; /* Number of characters in zName */ int i, j; - Token nullId; /* Fake token for an empty ID list */ DbFixer sFix; /* For assigning database names to pTable */ int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */ sqlite3 *db = pParse->db; @@ -86315,9 +86890,10 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( Token *pName = 0; /* Unqualified name of the index to create */ struct ExprList_item *pListItem; /* For looping over pList */ const Column *pTabCol; /* A column in the table */ - int nCol; /* Number of columns */ int nExtra = 0; /* Space allocated for zExtra[] */ - char *zExtra; /* Extra space after the Index object */ + int nExtraCol; /* Number of extra columns needed */ + char *zExtra = 0; /* Extra space after the Index object */ + Index *pPk = 0; /* PRIMARY KEY index for WITHOUT ROWID tables */ assert( pParse->nErr==0 ); /* Never called with prior errors */ if( db->mallocFailed || IN_DECLARE_VTAB ){ @@ -86369,6 +86945,7 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( pTab->zName); goto exit_create_index; } + if( !HasRowid(pTab) ) pPk = sqlite3PrimaryKeyIndex(pTab); }else{ assert( pName==0 ); assert( pStart==0 ); @@ -86464,11 +87041,10 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( ** So create a fake list to simulate this. */ if( pList==0 ){ - nullId.z = pTab->aCol[pTab->nCol-1].zName; - nullId.n = sqlite3Strlen30((char*)nullId.z); pList = sqlite3ExprListAppend(pParse, 0, 0); if( pList==0 ) goto exit_create_index; - sqlite3ExprListSetName(pParse, pList, &nullId, 0); + pList->a[0].zName = sqlite3DbStrDup(pParse->db, + pTab->aCol[pTab->nCol-1].zName); pList->a[0].sortOrder = (u8)sortOrder; } @@ -86487,36 +87063,23 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( ** Allocate the index structure. */ nName = sqlite3Strlen30(zName); - nCol = pList->nExpr; - pIndex = sqlite3DbMallocZero(db, - ROUND8(sizeof(Index)) + /* Index structure */ - ROUND8(sizeof(tRowcnt)*(nCol+1)) + /* Index.aiRowEst */ - sizeof(char *)*nCol + /* Index.azColl */ - sizeof(int)*nCol + /* Index.aiColumn */ - sizeof(u8)*nCol + /* Index.aSortOrder */ - nName + 1 + /* Index.zName */ - nExtra /* Collation sequence names */ - ); + nExtraCol = pPk ? pPk->nKeyCol : 1; + pIndex = sqlite3AllocateIndexObject(db, pList->nExpr + nExtraCol, + nName + nExtra + 1, &zExtra); if( db->mallocFailed ){ goto exit_create_index; } - zExtra = (char*)pIndex; - pIndex->aiRowEst = (tRowcnt*)&zExtra[ROUND8(sizeof(Index))]; - pIndex->azColl = (char**) - ((char*)pIndex->aiRowEst + ROUND8(sizeof(tRowcnt)*nCol+1)); assert( EIGHT_BYTE_ALIGNMENT(pIndex->aiRowEst) ); assert( EIGHT_BYTE_ALIGNMENT(pIndex->azColl) ); - pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]); - pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]); - pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]); - zExtra = (char *)(&pIndex->zName[nName+1]); + pIndex->zName = zExtra; + zExtra += nName + 1; memcpy(pIndex->zName, zName, nName+1); pIndex->pTable = pTab; - pIndex->nColumn = pList->nExpr; pIndex->onError = (u8)onError; - pIndex->uniqNotNull = onError==OE_Abort; + pIndex->uniqNotNull = onError!=OE_None; pIndex->autoIndex = (u8)(pName==0); pIndex->pSchema = db->aDb[iDb].pSchema; + pIndex->nKeyCol = pList->nExpr; if( pPIWhere ){ sqlite3ResolveSelfReference(pParse, pTab, NC_PartIdx, pPIWhere, 0); pIndex->pPartIdxWhere = pPIWhere; @@ -86556,7 +87119,8 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( pParse->checkSchema = 1; goto exit_create_index; } - pIndex->aiColumn[i] = j; + assert( pTab->nCol<=0x7fff && j<=0x7fff ); + pIndex->aiColumn[i] = (i16)j; if( pListItem->pExpr ){ int nColl; assert( pListItem->pExpr->op==TK_COLLATE ); @@ -86579,6 +87143,23 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( pIndex->aSortOrder[i] = (u8)requestedSortOrder; if( pTab->aCol[j].notNull==0 ) pIndex->uniqNotNull = 0; } + if( pPk ){ + for(j=0; jnKeyCol; j++){ + int x = pPk->aiColumn[j]; + if( hasColumn(pIndex->aiColumn, pIndex->nKeyCol, x) ){ + pIndex->nColumn--; + }else{ + pIndex->aiColumn[i] = x; + pIndex->azColl[i] = pPk->azColl[j]; + pIndex->aSortOrder[i] = pPk->aSortOrder[j]; + i++; + } + } + assert( i==pIndex->nColumn ); + }else{ + pIndex->aiColumn[i] = -1; + pIndex->azColl[i] = "BINARY"; + } sqlite3DefaultRowEst(pIndex); if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex); @@ -86611,8 +87192,8 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( assert( pIdx->autoIndex ); assert( pIndex->onError!=OE_None ); - if( pIdx->nColumn!=pIndex->nColumn ) continue; - for(k=0; knColumn; k++){ + if( pIdx->nKeyCol!=pIndex->nKeyCol ) continue; + for(k=0; knKeyCol; k++){ const char *z1; const char *z2; if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break; @@ -86620,7 +87201,7 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( z2 = pIndex->azColl[k]; if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break; } - if( k==pIdx->nColumn ){ + if( k==pIdx->nKeyCol ){ if( pIdx->onError!=pIndex->onError ){ /* This constraint creates the same index as a previous ** constraint specified somewhere in the CREATE TABLE statement. @@ -86662,22 +87243,20 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex( } } - /* If the db->init.busy is 0 then create the index on disk. This - ** involves writing the index into the master table and filling in the - ** index with the current table contents. + /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the + ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then + ** emit code to allocate the index rootpage on disk and make an entry for + ** the index in the sqlite_master table and populate the index with + ** content. But, do not do this if we are simply reading the sqlite_master + ** table to parse the schema, or if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table. ** - ** The db->init.busy is 0 when the user first enters a CREATE INDEX - ** command. db->init.busy is 1 when a database is opened and - ** CREATE INDEX statements are read out of the master table. In - ** the latter case the index already exists on disk, which is why - ** we don't want to recreate it. - ** - ** If pTblName==0 it means this index is generated as a primary key - ** or UNIQUE constraint of a CREATE TABLE statement. Since the table + ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY + ** or UNIQUE index in a CREATE TABLE statement. Since the table ** has just been created, it contains no data and the index initialization ** step can be skipped. */ - else if( pParse->nErr==0 ){ + else if( pParse->nErr==0 && (HasRowid(pTab) || pTblName!=0) ){ Vdbe *v; char *zStmt; int iMem = ++pParse->nMem; @@ -86789,12 +87368,12 @@ SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ a[0] = pIdx->pTable->nRowEst; if( a[0]<10 ) a[0] = 10; n = 10; - for(i=1; i<=pIdx->nColumn; i++){ + for(i=1; i<=pIdx->nKeyCol; i++){ a[i] = n; if( n>5 ) n--; } if( pIdx->onError!=OE_None ){ - a[pIdx->nColumn] = 1; + a[pIdx->nKeyCol] = 1; } } @@ -87482,7 +88061,8 @@ SQLITE_PRIVATE void sqlite3HaltConstraint( int errCode, /* extended error code */ int onError, /* Constraint type */ char *p4, /* Error message */ - int p4type /* P4_STATIC or P4_TRANSIENT */ + i8 p4type, /* P4_STATIC or P4_TRANSIENT */ + u8 p5Errmsg /* P5_ErrMsg type */ ){ Vdbe *v = sqlite3GetVdbe(pParse); assert( (errCode&0xff)==SQLITE_CONSTRAINT ); @@ -87490,6 +88070,58 @@ SQLITE_PRIVATE void sqlite3HaltConstraint( sqlite3MayAbort(pParse); } sqlite3VdbeAddOp4(v, OP_Halt, errCode, onError, 0, p4, p4type); + if( p5Errmsg ) sqlite3VdbeChangeP5(v, p5Errmsg); +} + +/* +** Code an OP_Halt due to UNIQUE or PRIMARY KEY constraint violation. +*/ +SQLITE_PRIVATE void sqlite3UniqueConstraint( + Parse *pParse, /* Parsing context */ + int onError, /* Constraint type */ + Index *pIdx /* The index that triggers the constraint */ +){ + char *zErr; + int j; + StrAccum errMsg; + Table *pTab = pIdx->pTable; + + sqlite3StrAccumInit(&errMsg, 0, 0, 200); + errMsg.db = pParse->db; + for(j=0; jnKeyCol; j++){ + char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName; + if( j ) sqlite3StrAccumAppend(&errMsg, ", ", 2); + sqlite3StrAccumAppendAll(&errMsg, pTab->zName); + sqlite3StrAccumAppend(&errMsg, ".", 1); + sqlite3StrAccumAppendAll(&errMsg, zCol); + } + zErr = sqlite3StrAccumFinish(&errMsg); + sqlite3HaltConstraint(pParse, + (pIdx->autoIndex==2)?SQLITE_CONSTRAINT_PRIMARYKEY:SQLITE_CONSTRAINT_UNIQUE, + onError, zErr, P4_DYNAMIC, P5_ConstraintUnique); +} + + +/* +** Code an OP_Halt due to non-unique rowid. +*/ +SQLITE_PRIVATE void sqlite3RowidConstraint( + Parse *pParse, /* Parsing context */ + int onError, /* Conflict resolution algorithm */ + Table *pTab /* The table with the non-unique rowid */ +){ + char *zMsg; + int rc; + if( pTab->iPKey>=0 ){ + zMsg = sqlite3MPrintf(pParse->db, "%s.%s", pTab->zName, + pTab->aCol[pTab->iPKey].zName); + rc = SQLITE_CONSTRAINT_PRIMARYKEY; + }else{ + zMsg = sqlite3MPrintf(pParse->db, "%s.rowid", pTab->zName); + rc = SQLITE_CONSTRAINT_ROWID; + } + sqlite3HaltConstraint(pParse, rc, onError, zMsg, P4_DYNAMIC, + P5_ConstraintUnique); } /* @@ -87502,8 +88134,8 @@ static int collationMatch(const char *zColl, Index *pIndex){ assert( zColl!=0 ); for(i=0; inColumn; i++){ const char *z = pIndex->azColl[i]; - assert( z!=0 ); - if( 0==sqlite3StrICmp(z, zColl) ){ + assert( z!=0 || pIndex->aiColumn[i]<0 ); + if( pIndex->aiColumn[i]>=0 && 0==sqlite3StrICmp(z, zColl) ){ return 1; } } @@ -87622,37 +88254,122 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ #endif /* -** Return a dynamicly allocated KeyInfo structure that can be used -** with OP_OpenRead or OP_OpenWrite to access database index pIdx. +** Return a KeyInfo structure that is appropriate for the given Index. ** -** If successful, a pointer to the new structure is returned. In this case -** the caller is responsible for calling sqlite3DbFree(db, ) on the returned -** pointer. If an error occurs (out of memory or missing collation -** sequence), NULL is returned and the state of pParse updated to reflect -** the error. +** The KeyInfo structure for an index is cached in the Index object. +** So there might be multiple references to the returned pointer. The +** caller should not try to modify the KeyInfo object. +** +** The caller should invoke sqlite3KeyInfoUnref() on the returned object +** when it has finished using it. */ -SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){ - int i; - int nCol = pIdx->nColumn; - KeyInfo *pKey; +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ + if( pParse->nErr ) return 0; +#ifndef SQLITE_OMIT_SHARED_CACHE + if( pIdx->pKeyInfo && pIdx->pKeyInfo->db!=pParse->db ){ + sqlite3KeyInfoUnref(pIdx->pKeyInfo); + pIdx->pKeyInfo = 0; + } +#endif + if( pIdx->pKeyInfo==0 ){ + int i; + int nCol = pIdx->nColumn; + int nKey = pIdx->nKeyCol; + KeyInfo *pKey; + if( pIdx->uniqNotNull ){ + pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey); + }else{ + pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); + } + if( pKey ){ + assert( sqlite3KeyInfoIsWriteable(pKey) ); + for(i=0; iazColl[i]; + assert( zColl!=0 ); + pKey->aColl[i] = strcmp(zColl,"BINARY")==0 ? 0 : + sqlite3LocateCollSeq(pParse, zColl); + pKey->aSortOrder[i] = pIdx->aSortOrder[i]; + } + if( pParse->nErr ){ + sqlite3KeyInfoUnref(pKey); + }else{ + pIdx->pKeyInfo = pKey; + } + } + } + return sqlite3KeyInfoRef(pIdx->pKeyInfo); +} - pKey = sqlite3KeyInfoAlloc(pParse->db, nCol); - if( pKey ){ - for(i=0; iazColl[i]; - assert( zColl ); - pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl); - pKey->aSortOrder[i] = pIdx->aSortOrder[i]; +#ifndef SQLITE_OMIT_CTE +/* +** This routine is invoked once per CTE by the parser while parsing a +** WITH clause. +*/ +SQLITE_PRIVATE With *sqlite3WithAdd( + Parse *pParse, /* Parsing context */ + With *pWith, /* Existing WITH clause, or NULL */ + Token *pName, /* Name of the common-table */ + ExprList *pArglist, /* Optional column name list for the table */ + Select *pQuery /* Query used to initialize the table */ +){ + sqlite3 *db = pParse->db; + With *pNew; + char *zName; + + /* Check that the CTE name is unique within this WITH clause. If + ** not, store an error in the Parse structure. */ + zName = sqlite3NameFromToken(pParse->db, pName); + if( zName && pWith ){ + int i; + for(i=0; inCte; i++){ + if( sqlite3StrICmp(zName, pWith->a[i].zName)==0 ){ + sqlite3ErrorMsg(pParse, "duplicate WITH table name: %s", zName); + } } } - if( pParse->nErr ){ - sqlite3DbFree(pParse->db, pKey); - pKey = 0; + if( pWith ){ + int nByte = sizeof(*pWith) + (sizeof(pWith->a[1]) * pWith->nCte); + pNew = sqlite3DbRealloc(db, pWith, nByte); + }else{ + pNew = sqlite3DbMallocZero(db, sizeof(*pWith)); } - return pKey; + assert( zName!=0 || pNew==0 ); + assert( db->mallocFailed==0 || pNew==0 ); + + if( pNew==0 ){ + sqlite3ExprListDelete(db, pArglist); + sqlite3SelectDelete(db, pQuery); + sqlite3DbFree(db, zName); + pNew = pWith; + }else{ + pNew->a[pNew->nCte].pSelect = pQuery; + pNew->a[pNew->nCte].pCols = pArglist; + pNew->a[pNew->nCte].zName = zName; + pNew->a[pNew->nCte].zErr = 0; + pNew->nCte++; + } + + return pNew; } +/* +** Free the contents of the With object passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3WithDelete(sqlite3 *db, With *pWith){ + if( pWith ){ + int i; + for(i=0; inCte; i++){ + struct Cte *pCte = &pWith->a[i]; + sqlite3ExprListDelete(db, pCte->pCols); + sqlite3SelectDelete(db, pCte->pSelect); + sqlite3DbFree(db, pCte->zName); + } + sqlite3DbFree(db, pWith); + } +} +#endif /* !defined(SQLITE_OMIT_CTE) */ + /************** End of build.c ***********************************************/ /************** Begin file callback.c ****************************************/ /* @@ -88013,7 +88730,6 @@ SQLITE_PRIVATE FuncDef *sqlite3FindFunction( assert( nArg>=(-2) ); assert( nArg>=(-1) || createFlag==0 ); - assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a); /* First search for a match amongst the application-defined functions. @@ -88270,7 +88986,7 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( ExprList *pOrderBy, /* The ORDER BY clause. May be null */ Expr *pLimit, /* The LIMIT clause. May be null */ Expr *pOffset, /* The OFFSET clause. May be null */ - char *zStmtType /* Either DELETE or UPDATE. For error messages. */ + char *zStmtType /* Either DELETE or UPDATE. For err msgs. */ ){ Expr *pWhereRowid = NULL; /* WHERE rowid .. */ Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ @@ -88345,7 +89061,8 @@ limit_where_cleanup_2: sqlite3ExprDelete(pParse->db, pOffset); return 0; } -#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ +#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) */ + /* && !defined(SQLITE_OMIT_SUBQUERY) */ /* ** Generate code for a DELETE FROM statement. @@ -88362,18 +89079,34 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( Vdbe *v; /* The virtual database engine */ Table *pTab; /* The table from which records will be deleted */ const char *zDb; /* Name of database holding pTab */ - int end, addr = 0; /* A couple addresses of generated code */ int i; /* Loop counter */ WhereInfo *pWInfo; /* Information about the WHERE clause */ Index *pIdx; /* For looping over indices of the table */ - int iCur; /* VDBE Cursor number for pTab */ + int iTabCur; /* Cursor number for the table */ + int iDataCur; /* VDBE cursor for the canonical data source */ + int iIdxCur; /* Cursor number of the first index */ + int nIdx; /* Number of indices */ sqlite3 *db; /* Main database structure */ AuthContext sContext; /* Authorization context */ NameContext sNC; /* Name context to resolve expressions in */ int iDb; /* Database number */ int memCnt = -1; /* Memory cell used for change counting */ int rcauth; /* Value returned by authorization callback */ - + int okOnePass; /* True for one-pass algorithm without the FIFO */ + int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ + u8 *aToOpen = 0; /* Open cursor iTabCur+j if aToOpen[j] is true */ + Index *pPk; /* The PRIMARY KEY index on the table */ + int iPk = 0; /* First of nPk registers holding PRIMARY KEY value */ + i16 nPk = 1; /* Number of columns in the PRIMARY KEY */ + int iKey; /* Memory cell holding key of row to be deleted */ + i16 nKey; /* Number of memory cells in the row key */ + int iEphCur = 0; /* Ephemeral table holding all primary key values */ + int iRowSet = 0; /* Register for rowset of rows to delete */ + int addrBypass = 0; /* Address of jump over the delete logic */ + int addrLoop = 0; /* Top of the delete loop */ + int addrDelete = 0; /* Jump directly to the delete logic */ + int addrEphOpen = 0; /* Instruction to open the Ephermeral table */ + #ifndef SQLITE_OMIT_TRIGGER int isView; /* True if attempting to delete from a view */ Trigger *pTrigger; /* List of table triggers, if required */ @@ -88428,11 +89161,11 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( } assert(!isView || pTrigger); - /* Assign cursor number to the table and all its indices. + /* Assign cursor numbers to the table and all its indices. */ assert( pTabList->nSrc==1 ); - iCur = pTabList->a[0].iCursor = pParse->nTab++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + iTabCur = pTabList->a[0].iCursor = pParse->nTab++; + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ pParse->nTab++; } @@ -88456,7 +89189,8 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( */ #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iCur); + sqlite3MaterializeView(pParse, pTab, pWhere, iTabCur); + iDataCur = iIdxCur = iTabCur; } #endif @@ -88487,78 +89221,168 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( ){ assert( !isView ); sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName); - sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt, - pTab->zName, P4_STATIC); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt, + pTab->zName, P4_STATIC); + } for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ assert( pIdx->pSchema==pTab->pSchema ); sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); } }else #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ - /* The usual case: There is a WHERE clause so we have to scan through - ** the table and pick which records to delete. - */ { - int iRowSet = ++pParse->nMem; /* Register for rowset of rows to delete */ - int iRowid = ++pParse->nMem; /* Used for storing rowid values. */ - int regRowid; /* Actual register containing rowids */ - - /* Collect rowids of every row to be deleted. + if( HasRowid(pTab) ){ + /* For a rowid table, initialize the RowSet to an empty set */ + pPk = 0; + nPk = 1; + iRowSet = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); + }else{ + /* For a WITHOUT ROWID table, create an ephermeral table used to + ** hold all primary keys for rows to be deleted. */ + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + nPk = pPk->nKeyCol; + iPk = pParse->nMem+1; + pParse->nMem += nPk; + iEphCur = pParse->nTab++; + addrEphOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEphCur, nPk); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + } + + /* Construct a query to find the rowid or primary key for every row + ** to be deleted, based on the WHERE clause. */ - sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); - pWInfo = sqlite3WhereBegin( - pParse, pTabList, pWhere, 0, 0, WHERE_DUPLICATES_OK, 0 - ); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0, 0, + WHERE_ONEPASS_DESIRED|WHERE_DUPLICATES_OK, + iTabCur+1); if( pWInfo==0 ) goto delete_from_cleanup; - regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid, 0); - sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid); + okOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + + /* Keep track of the number of rows to be deleted */ if( db->flags & SQLITE_CountRows ){ sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1); } + + /* Extract the rowid or primary key for the current row */ + if( pPk ){ + for(i=0; iaiColumn[i], iPk+i); + } + iKey = iPk; + }else{ + iKey = pParse->nMem + 1; + iKey = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iTabCur, iKey, 0); + if( iKey>pParse->nMem ) pParse->nMem = iKey; + } + + if( okOnePass ){ + /* For ONEPASS, no need to store the rowid/primary-key. There is only + ** one, so just keep it in its register(s) and fall through to the + ** delete code. + */ + nKey = nPk; /* OP_Found will use an unpacked key */ + aToOpen = sqlite3DbMallocRaw(db, nIdx+2); + if( aToOpen==0 ){ + sqlite3WhereEnd(pWInfo); + goto delete_from_cleanup; + } + memset(aToOpen, 1, nIdx+1); + aToOpen[nIdx+1] = 0; + if( aiCurOnePass[0]>=0 ) aToOpen[aiCurOnePass[0]-iTabCur] = 0; + if( aiCurOnePass[1]>=0 ) aToOpen[aiCurOnePass[1]-iTabCur] = 0; + if( addrEphOpen ) sqlite3VdbeChangeToNoop(v, addrEphOpen); + addrDelete = sqlite3VdbeAddOp0(v, OP_Goto); /* Jump to DELETE logic */ + }else if( pPk ){ + /* Construct a composite key for the row to be deleted and remember it */ + iKey = ++pParse->nMem; + nKey = 0; /* Zero tells OP_Found to use a composite key */ + sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, iKey, + sqlite3IndexAffinityStr(v, pPk), P4_TRANSIENT); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iEphCur, iKey); + }else{ + /* Get the rowid of the row to be deleted and remember it in the RowSet */ + nKey = 1; /* OP_Seek always uses a single rowid */ + sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, iKey); + } + + /* End of the WHERE loop */ sqlite3WhereEnd(pWInfo); - - /* Delete every item whose key was written to the list during the - ** database scan. We have to delete items after the scan is complete - ** because deleting an item can change the scan order. */ - end = sqlite3VdbeMakeLabel(v); - + if( okOnePass ){ + /* Bypass the delete logic below if the WHERE loop found zero rows */ + addrBypass = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrBypass); + sqlite3VdbeJumpHere(v, addrDelete); + } + /* Unless this is a view, open cursors for the table we are ** deleting from and all its indices. If this is a view, then the ** only effect this statement has is to fire the INSTEAD OF - ** triggers. */ + ** triggers. + */ if( !isView ){ - sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite); + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, iTabCur, aToOpen, + &iDataCur, &iIdxCur); + assert( pPk || iDataCur==iTabCur ); + assert( pPk || iIdxCur==iDataCur+1 ); } - - addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid); - + + /* Set up a loop over the rowids/primary-keys that were found in the + ** where-clause loop above. + */ + if( okOnePass ){ + /* Just one row. Hence the top-of-loop is a no-op */ + assert( nKey==nPk ); /* OP_Found will use an unpacked key */ + if( aToOpen[iDataCur-iTabCur] ){ + assert( pPk!=0 ); + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, addrBypass, iKey, nKey); + } + }else if( pPk ){ + addrLoop = sqlite3VdbeAddOp1(v, OP_Rewind, iEphCur); + sqlite3VdbeAddOp2(v, OP_RowKey, iEphCur, iKey); + assert( nKey==0 ); /* OP_Found will use a composite key */ + }else{ + addrLoop = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, 0, iKey); + assert( nKey==1 ); + } + /* Delete the row */ #ifndef SQLITE_OMIT_VIRTUALTABLE if( IsVirtual(pTab) ){ const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); sqlite3VtabMakeWritable(pParse, pTab); - sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB); + sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iKey, pVTab, P4_VTAB); sqlite3VdbeChangeP5(v, OE_Abort); sqlite3MayAbort(pParse); }else #endif { int count = (pParse->nested==0); /* True to count changes */ - sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default); + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + iKey, nKey, count, OE_Default, okOnePass); } - - /* End of the delete loop */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); - sqlite3VdbeResolveLabel(v, end); - + + /* End of the loop over all rowids/primary-keys. */ + if( okOnePass ){ + sqlite3VdbeResolveLabel(v, addrBypass); + }else if( pPk ){ + sqlite3VdbeAddOp2(v, OP_Next, iEphCur, addrLoop+1); + sqlite3VdbeJumpHere(v, addrLoop); + }else{ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrLoop); + sqlite3VdbeJumpHere(v, addrLoop); + } + /* Close the cursors open on the table and its indexes. */ if( !isView && !IsVirtual(pTab) ){ - for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ - sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum); + if( !pPk ) sqlite3VdbeAddOp1(v, OP_Close, iDataCur); + for(i=0, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + sqlite3VdbeAddOp1(v, OP_Close, iIdxCur + i); } - sqlite3VdbeAddOp1(v, OP_Close, iCur); } - } + } /* End non-truncate path */ /* Update the sqlite_sequence table by storing the content of the ** maximum rowid counter values recorded while inserting into @@ -88582,6 +89406,7 @@ delete_from_cleanup: sqlite3AuthContextPop(&sContext); sqlite3SrcListDelete(db, pTabList); sqlite3ExprDelete(db, pWhere); + sqlite3DbFree(db, aToOpen); return; } /* Make sure "isView" and other macros defined above are undefined. Otherwise @@ -88596,50 +89421,59 @@ delete_from_cleanup: /* ** This routine generates VDBE code that causes a single row of a -** single table to be deleted. +** single table to be deleted. Both the original table entry and +** all indices are removed. ** -** The VDBE must be in a particular state when this routine is called. -** These are the requirements: +** Preconditions: ** -** 1. A read/write cursor pointing to pTab, the table containing the row -** to be deleted, must be opened as cursor number $iCur. +** 1. iDataCur is an open cursor on the btree that is the canonical data +** store for the table. (This will be either the table itself, +** in the case of a rowid table, or the PRIMARY KEY index in the case +** of a WITHOUT ROWID table.) ** ** 2. Read/write cursors for all indices of pTab must be open as -** cursor number base+i for the i-th index. +** cursor number iIdxCur+i for the i-th index. ** -** 3. The record number of the row to be deleted must be stored in -** memory cell iRowid. -** -** This routine generates code to remove both the table record and all -** index entries that point to that record. +** 3. The primary key for the row to be deleted must be stored in a +** sequence of nPk memory cells starting at iPk. If nPk==0 that means +** that a search record formed from OP_MakeRecord is contained in the +** single memory location iPk. */ SQLITE_PRIVATE void sqlite3GenerateRowDelete( Parse *pParse, /* Parsing context */ Table *pTab, /* Table containing the row to be deleted */ - int iCur, /* Cursor number for the table */ - int iRowid, /* Memory cell that contains the rowid to delete */ - int count, /* If non-zero, increment the row change counter */ Trigger *pTrigger, /* List of triggers to (potentially) fire */ - int onconf /* Default ON CONFLICT policy for triggers */ + int iDataCur, /* Cursor from which column data is extracted */ + int iIdxCur, /* First index cursor */ + int iPk, /* First memory cell containing the PRIMARY KEY */ + i16 nPk, /* Number of PRIMARY KEY memory cells */ + u8 count, /* If non-zero, increment the row change counter */ + u8 onconf, /* Default ON CONFLICT policy for triggers */ + u8 bNoSeek /* iDataCur is already pointing to the row to delete */ ){ Vdbe *v = pParse->pVdbe; /* Vdbe */ int iOld = 0; /* First register in OLD.* array */ int iLabel; /* Label resolved to end of generated code */ + u8 opSeek; /* Seek opcode */ /* Vdbe is guaranteed to have been allocated by this stage. */ assert( v ); + VdbeModuleComment((v, "BEGIN: GenRowDel(%d,%d,%d,%d)", + iDataCur, iIdxCur, iPk, (int)nPk)); /* Seek cursor iCur to the row to delete. If this row no longer exists ** (this can happen if a trigger program has already deleted it), do ** not attempt to delete it or fire any DELETE triggers. */ iLabel = sqlite3VdbeMakeLabel(v); - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid); + opSeek = HasRowid(pTab) ? OP_NotExists : OP_NotFound; + if( !bNoSeek ) sqlite3VdbeAddOp4Int(v, opSeek, iDataCur, iLabel, iPk, nPk); /* If there are any triggers to fire, allocate a range of registers to ** use for the old.* references in the triggers. */ if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){ u32 mask; /* Mask of OLD.* columns in use */ int iCol; /* Iterator used while populating OLD.* */ + int addrStart; /* Start of BEFORE trigger programs */ /* TODO: Could use temporary registers here. Also could attempt to ** avoid copying the contents of the rowid register. */ @@ -88652,23 +89486,29 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( /* Populate the OLD.* pseudo-table register array. These values will be ** used by any BEFORE and AFTER triggers that exist. */ - sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld); + sqlite3VdbeAddOp2(v, OP_Copy, iPk, iOld); for(iCol=0; iColnCol; iCol++){ - if( mask==0xffffffff || mask&(1<pSelect==0 ){ - sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0); - sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0)); + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, 0); + sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0)); if( count ){ sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT); } @@ -88701,49 +89541,64 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( ** trigger programs were invoked. Or if a trigger program throws a ** RAISE(IGNORE) exception. */ sqlite3VdbeResolveLabel(v, iLabel); + VdbeModuleComment((v, "END: GenRowDel()")); } /* ** This routine generates VDBE code that causes the deletion of all -** index entries associated with a single row of a single table. +** index entries associated with a single row of a single table, pTab ** -** The VDBE must be in a particular state when this routine is called. -** These are the requirements: +** Preconditions: ** -** 1. A read/write cursor pointing to pTab, the table containing the row -** to be deleted, must be opened as cursor number "iCur". +** 1. A read/write cursor "iDataCur" must be open on the canonical storage +** btree for the table pTab. (This will be either the table itself +** for rowid tables or to the primary key index for WITHOUT ROWID +** tables.) ** ** 2. Read/write cursors for all indices of pTab must be open as -** cursor number iCur+i for the i-th index. +** cursor number iIdxCur+i for the i-th index. (The pTab->pIndex +** index is the 0-th index.) ** -** 3. The "iCur" cursor must be pointing to the row that is to be -** deleted. +** 3. The "iDataCur" cursor must be already be positioned on the row +** that is to be deleted. */ SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete( Parse *pParse, /* Parsing and code generating context */ Table *pTab, /* Table containing the row to be deleted */ - int iCur, /* Cursor number for the table */ + int iDataCur, /* Cursor of table holding data. */ + int iIdxCur, /* First index cursor */ int *aRegIdx /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */ ){ - int i; - Index *pIdx; - int r1; - int iPartIdxLabel; - Vdbe *v = pParse->pVdbe; + int i; /* Index loop counter */ + int r1 = -1; /* Register holding an index key */ + int iPartIdxLabel; /* Jump destination for skipping partial index entries */ + Index *pIdx; /* Current index */ + Index *pPrior = 0; /* Prior index */ + Vdbe *v; /* The prepared statement under construction */ + Index *pPk; /* PRIMARY KEY index, or NULL for rowid tables */ - for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ - if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue; - r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0, &iPartIdxLabel); - sqlite3VdbeAddOp3(v, OP_IdxDelete, iCur+i, r1, pIdx->nColumn+1); + v = pParse->pVdbe; + pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); + for(i=0, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + assert( iIdxCur+i!=iDataCur || pPk==pIdx ); + if( aRegIdx!=0 && aRegIdx[i]==0 ) continue; + if( pIdx==pPk ) continue; + VdbeModuleComment((v, "GenRowIdxDel for %s", pIdx->zName)); + r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 1, + &iPartIdxLabel, pPrior, r1); + sqlite3VdbeAddOp3(v, OP_IdxDelete, iIdxCur+i, r1, + pIdx->uniqNotNull ? pIdx->nKeyCol : pIdx->nColumn); sqlite3VdbeResolveLabel(v, iPartIdxLabel); + pPrior = pIdx; } } /* -** Generate code that will assemble an index key and put it in register +** Generate code that will assemble an index key and stores it in register ** regOut. The key with be for index pIdx which is an index on pTab. ** iCur is the index of a cursor open on the pTab table and pointing to -** the entry that needs indexing. +** the entry that needs indexing. If pTab is a WITHOUT ROWID table, then +** iCur must be the cursor of the PRIMARY KEY index. ** ** Return a register number which is the first in a block of ** registers that holds the elements of the index key. The @@ -88756,14 +89611,27 @@ SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete( ** to false or null. If pIdx is not a partial index, *piPartIdxLabel ** will be set to zero which is an empty label that is ignored by ** sqlite3VdbeResolveLabel(). +** +** The pPrior and regPrior parameters are used to implement a cache to +** avoid unnecessary register loads. If pPrior is not NULL, then it is +** a pointer to a different index for which an index key has just been +** computed into register regPrior. If the current pIdx index is generating +** its key into the same sequence of registers and if pPrior and pIdx share +** a column in common, then the register corresponding to that column already +** holds the correct value and the loading of that register is skipped. +** This optimization is helpful when doing a DELETE or an INTEGRITY_CHECK +** on a table with multiple indices, and especially with the ROWID or +** PRIMARY KEY columns of the index. */ SQLITE_PRIVATE int sqlite3GenerateIndexKey( Parse *pParse, /* Parsing context */ Index *pIdx, /* The index for which to generate a key */ - int iCur, /* Cursor number for the pIdx->pTable table */ - int regOut, /* Write the new index key to this register */ - int doMakeRec, /* Run the OP_MakeRecord instruction if true */ - int *piPartIdxLabel /* OUT: Jump to this label to skip partial index */ + int iDataCur, /* Cursor number from which to take column data */ + int regOut, /* Put the new key into this register if not 0 */ + int prefixOnly, /* Compute only a unique prefix of the key */ + int *piPartIdxLabel, /* OUT: Jump to this label to skip partial index */ + Index *pPrior, /* Previously generated index key */ + int regPrior /* Register holding previous generated key */ ){ Vdbe *v = pParse->pVdbe; int j; @@ -88774,38 +89642,32 @@ SQLITE_PRIVATE int sqlite3GenerateIndexKey( if( piPartIdxLabel ){ if( pIdx->pPartIdxWhere ){ *piPartIdxLabel = sqlite3VdbeMakeLabel(v); - pParse->iPartIdxTab = iCur; + pParse->iPartIdxTab = iDataCur; sqlite3ExprIfFalse(pParse, pIdx->pPartIdxWhere, *piPartIdxLabel, SQLITE_JUMPIFNULL); }else{ *piPartIdxLabel = 0; } } - nCol = pIdx->nColumn; - regBase = sqlite3GetTempRange(pParse, nCol+1); - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol); + nCol = (prefixOnly && pIdx->uniqNotNull) ? pIdx->nKeyCol : pIdx->nColumn; + regBase = sqlite3GetTempRange(pParse, nCol); + if( pPrior && (regBase!=regPrior || pPrior->pPartIdxWhere) ) pPrior = 0; for(j=0; jaiColumn[j]; - if( idx==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j); - }else{ - sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j); - sqlite3ColumnDefault(v, pTab, idx, -1); - } + if( pPrior && pPrior->aiColumn[j]==pIdx->aiColumn[j] ) continue; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, pIdx->aiColumn[j], + regBase+j); + /* If the column affinity is REAL but the number is an integer, then it + ** might be stored in the table as an integer (using a compact + ** representation) then converted to REAL by an OP_RealAffinity opcode. + ** But we are getting ready to store this value back into an index, where + ** it should be converted by to INTEGER again. So omit the OP_RealAffinity + ** opcode if it is present */ + sqlite3VdbeDeletePriorOpcode(v, OP_RealAffinity); } - if( doMakeRec ){ - const char *zAff; - if( pTab->pSelect - || OptimizationDisabled(pParse->db, SQLITE_IdxRealAsInt) - ){ - zAff = 0; - }else{ - zAff = sqlite3IndexAffinityStr(v, pIdx); - } - sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut); - sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT); + if( regOut ){ + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regOut); } - sqlite3ReleaseTempRange(pParse, regBase, nCol+1); + sqlite3ReleaseTempRange(pParse, regBase, nCol); return regBase; } @@ -88948,9 +89810,9 @@ static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ case SQLITE_INTEGER: { i64 iVal = sqlite3_value_int64(argv[0]); if( iVal<0 ){ - if( (iVal<<1)==0 ){ - /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then - ** abs(X) throws an integer overflow error since there is no + if( iVal==SMALLEST_INT64 ){ + /* IMP: R-31676-45509 If X is the integer -9223372036854775808 + ** then abs(X) throws an integer overflow error since there is no ** equivalent positive 64-bit two complement value. */ sqlite3_result_error(context, "integer overflow", -1); return; @@ -89029,6 +89891,32 @@ static void instrFunc( sqlite3_result_int(context, N); } +/* +** Implementation of the printf() function. +*/ +static void printfFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + PrintfArguments x; + StrAccum str; + const char *zFormat; + int n; + + if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){ + x.nArg = argc-1; + x.nUsed = 0; + x.apArg = argv+1; + sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH); + str.db = sqlite3_context_db_handle(context); + sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x); + n = str.nChar; + sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n, + SQLITE_DYNAMIC); + } +} + /* ** Implementation of the substr() function. ** @@ -90322,11 +91210,11 @@ static void groupConcatStep( zSep = ","; nSep = 1; } - sqlite3StrAccumAppend(pAccum, zSep, nSep); + if( nSep ) sqlite3StrAccumAppend(pAccum, zSep, nSep); } zVal = (char*)sqlite3_value_text(argv[0]); nVal = sqlite3_value_bytes(argv[0]); - sqlite3StrAccumAppend(pAccum, zVal, nVal); + if( nVal ) sqlite3StrAccumAppend(pAccum, zVal, nVal); } } static void groupConcatFinalize(sqlite3_context *context){ @@ -90459,6 +91347,7 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ FUNCTION(instr, 2, 0, 0, instrFunc ), FUNCTION(substr, 2, 0, 0, substrFunc ), FUNCTION(substr, 3, 0, 0, substrFunc ), + FUNCTION(printf, -1, 0, 0, printfFunc ), FUNCTION(unicode, 1, 0, 0, unicodeFunc ), FUNCTION(char, -1, 0, 0, charFunc ), FUNCTION(abs, 1, 0, 0, absFunc ), @@ -90475,8 +91364,8 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ FUNCTION2(ifnull, 2, 0, 0, noopFunc, SQLITE_FUNC_COALESCE), FUNCTION2(unlikely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), FUNCTION2(likelihood, 2, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), - FUNCTION(random, 0, 0, 0, randomFunc ), - FUNCTION(randomblob, 1, 0, 0, randomBlob ), + VFUNCTION(random, 0, 0, 0, randomFunc ), + VFUNCTION(randomblob, 1, 0, 0, randomBlob ), FUNCTION(nullif, 2, 0, 1, nullifFunc ), FUNCTION(sqlite_version, 0, 0, 0, versionFunc ), FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), @@ -90486,9 +91375,9 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){ FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ), #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ FUNCTION(quote, 1, 0, 0, quoteFunc ), - FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), - FUNCTION(changes, 0, 0, 0, changes ), - FUNCTION(total_changes, 0, 0, 0, total_changes ), + VFUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), + VFUNCTION(changes, 0, 0, 0, changes ), + VFUNCTION(total_changes, 0, 0, 0, total_changes ), FUNCTION(replace, 3, 0, 0, replaceFunc ), FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ), #ifdef SQLITE_SOUNDEX @@ -90761,7 +91650,7 @@ SQLITE_PRIVATE int sqlite3FkLocateIndex( } for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){ + if( pIdx->nKeyCol==nCol && pIdx->onError!=OE_None ){ /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number ** of columns. If each indexed column corresponds to a foreign key ** column of pFKey, then this index is a winner. */ @@ -90784,7 +91673,7 @@ SQLITE_PRIVATE int sqlite3FkLocateIndex( ** the default collation sequences for each column. */ int i, j; for(i=0; iaiColumn[i]; /* Index of column in parent tbl */ + i16 iCol = pIdx->aiColumn[i]; /* Index of column in parent tbl */ char *zDfltColl; /* Def. collation for column */ char *zIdxCol; /* Name of indexed column */ @@ -90915,10 +91804,9 @@ static void fkLookupParent( int nCol = pFKey->nCol; int regTemp = sqlite3GetTempRange(pParse, nCol); int regRec = sqlite3GetTempReg(pParse); - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb); - sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); for(i=0; i0 && pFKey->isDeferred==0 ){ sqlite3ParseToplevel(pParse)->mayAbort = 1; @@ -90981,6 +91868,62 @@ static void fkLookupParent( sqlite3VdbeAddOp1(v, OP_Close, iCur); } + +/* +** Return an Expr object that refers to a memory register corresponding +** to column iCol of table pTab. +** +** regBase is the first of an array of register that contains the data +** for pTab. regBase itself holds the rowid. regBase+1 holds the first +** column. regBase+2 holds the second column, and so forth. +*/ +static Expr *exprTableRegister( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* The table whose content is at r[regBase]... */ + int regBase, /* Contents of table pTab */ + i16 iCol /* Which column of pTab is desired */ +){ + Expr *pExpr; + Column *pCol; + const char *zColl; + sqlite3 *db = pParse->db; + + pExpr = sqlite3Expr(db, TK_REGISTER, 0); + if( pExpr ){ + if( iCol>=0 && iCol!=pTab->iPKey ){ + pCol = &pTab->aCol[iCol]; + pExpr->iTable = regBase + iCol + 1; + pExpr->affinity = pCol->affinity; + zColl = pCol->zColl; + if( zColl==0 ) zColl = db->pDfltColl->zName; + pExpr = sqlite3ExprAddCollateString(pParse, pExpr, zColl); + }else{ + pExpr->iTable = regBase; + pExpr->affinity = SQLITE_AFF_INTEGER; + } + } + return pExpr; +} + +/* +** Return an Expr object that refers to column iCol of table pTab which +** has cursor iCur. +*/ +static Expr *exprTableColumn( + sqlite3 *db, /* The database connection */ + Table *pTab, /* The table whose column is desired */ + int iCursor, /* The open cursor on the table */ + i16 iCol /* The column that is wanted */ +){ + Expr *pExpr = sqlite3Expr(db, TK_COLUMN, 0); + if( pExpr ){ + pExpr->pTab = pTab; + pExpr->iTable = iCursor; + pExpr->iColumn = iCol; + } + return pExpr; +} + /* ** This function is called to generate code executed when a row is deleted ** from the parent table of foreign key constraint pFKey and, if pFKey is @@ -90996,13 +91939,13 @@ static void fkLookupParent( ** -------------------------------------------------------------------------- ** DELETE immediate Increment the "immediate constraint counter". ** Or, if the ON (UPDATE|DELETE) action is RESTRICT, -** throw a "foreign key constraint failed" exception. +** throw a "FOREIGN KEY constraint failed" exception. ** ** INSERT immediate Decrement the "immediate constraint counter". ** ** DELETE deferred Increment the "deferred constraint counter". ** Or, if the ON (UPDATE|DELETE) action is RESTRICT, -** throw a "foreign key constraint failed" exception. +** throw a "FOREIGN KEY constraint failed" exception. ** ** INSERT deferred Decrement the "deferred constraint counter". ** @@ -91011,12 +91954,12 @@ static void fkLookupParent( */ static void fkScanChildren( Parse *pParse, /* Parse context */ - SrcList *pSrc, /* SrcList containing the table to scan */ - Table *pTab, - Index *pIdx, /* Foreign key index */ - FKey *pFKey, /* Foreign key relationship */ + SrcList *pSrc, /* The child table to be scanned */ + Table *pTab, /* The parent table */ + Index *pIdx, /* Index on parent covering the foreign key */ + FKey *pFKey, /* The foreign key linking pSrc to pTab */ int *aiCol, /* Map from pIdx cols to child table cols */ - int regData, /* Referenced table data starts here */ + int regData, /* Parent row data starts here */ int nIncr /* Amount to increment deferred counter by */ ){ sqlite3 *db = pParse->db; /* Database handle */ @@ -91027,7 +91970,10 @@ static void fkScanChildren( int iFkIfZero = 0; /* Address of OP_FkIfZero */ Vdbe *v = sqlite3GetVdbe(pParse); - assert( !pIdx || pIdx->pTable==pTab ); + assert( pIdx==0 || pIdx->pTable==pTab ); + assert( pIdx==0 || pIdx->nKeyCol==pFKey->nCol ); + assert( pIdx!=0 || pFKey->nCol==1 ); + assert( pIdx!=0 || HasRowid(pTab) ); if( nIncr<0 ){ iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0); @@ -91045,29 +91991,11 @@ static void fkScanChildren( Expr *pLeft; /* Value from parent table row */ Expr *pRight; /* Column ref to child table */ Expr *pEq; /* Expression (pLeft = pRight) */ - int iCol; /* Index of column in child table */ + i16 iCol; /* Index of column in child table */ const char *zCol; /* Name of column in child table */ - pLeft = sqlite3Expr(db, TK_REGISTER, 0); - if( pLeft ){ - /* Set the collation sequence and affinity of the LHS of each TK_EQ - ** expression to the parent key column defaults. */ - if( pIdx ){ - Column *pCol; - const char *zColl; - iCol = pIdx->aiColumn[i]; - pCol = &pTab->aCol[iCol]; - if( pTab->iPKey==iCol ) iCol = -1; - pLeft->iTable = regData+iCol+1; - pLeft->affinity = pCol->affinity; - zColl = pCol->zColl; - if( zColl==0 ) zColl = db->pDfltColl->zName; - pLeft = sqlite3ExprAddCollateString(pParse, pLeft, zColl); - }else{ - pLeft->iTable = regData; - pLeft->affinity = SQLITE_AFF_INTEGER; - } - } + iCol = pIdx ? pIdx->aiColumn[i] : -1; + pLeft = exprTableRegister(pParse, pTab, regData, iCol); iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; assert( iCol>=0 ); zCol = pFKey->pFrom->aCol[iCol].zName; @@ -91076,24 +92004,39 @@ static void fkScanChildren( pWhere = sqlite3ExprAnd(db, pWhere, pEq); } - /* If the child table is the same as the parent table, and this scan - ** is taking place as part of a DELETE operation (operation D.2), omit the - ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE - ** clause, where $rowid is the rowid of the row being deleted. */ + /* If the child table is the same as the parent table, then add terms + ** to the WHERE clause that prevent this entry from being scanned. + ** The added WHERE clause terms are like this: + ** + ** $current_rowid!=rowid + ** NOT( $current_a==a AND $current_b==b AND ... ) + ** + ** The first form is used for rowid tables. The second form is used + ** for WITHOUT ROWID tables. In the second form, the primary key is + ** (a,b,...) + */ if( pTab==pFKey->pFrom && nIncr>0 ){ - Expr *pEq; /* Expression (pLeft = pRight) */ + Expr *pNe; /* Expression (pLeft != pRight) */ Expr *pLeft; /* Value from parent table row */ Expr *pRight; /* Column ref to child table */ - pLeft = sqlite3Expr(db, TK_REGISTER, 0); - pRight = sqlite3Expr(db, TK_COLUMN, 0); - if( pLeft && pRight ){ - pLeft->iTable = regData; - pLeft->affinity = SQLITE_AFF_INTEGER; - pRight->iTable = pSrc->a[0].iCursor; - pRight->iColumn = -1; + if( HasRowid(pTab) ){ + pLeft = exprTableRegister(pParse, pTab, regData, -1); + pRight = exprTableColumn(db, pTab, pSrc->a[0].iCursor, -1); + pNe = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0); + }else{ + Expr *pEq, *pAll = 0; + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pIdx!=0 ); + for(i=0; inKeyCol; i++){ + i16 iCol = pIdx->aiColumn[i]; + pLeft = exprTableRegister(pParse, pTab, regData, iCol); + pRight = exprTableColumn(db, pTab, pSrc->a[0].iCursor, iCol); + pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0); + pAll = sqlite3ExprAnd(db, pAll, pEq); + } + pNe = sqlite3PExpr(pParse, TK_NOT, pAll, 0, 0); } - pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0); - pWhere = sqlite3ExprAnd(db, pWhere, pEq); + pWhere = sqlite3ExprAnd(db, pWhere, pNe); } /* Resolve the references in the WHERE clause. */ @@ -91123,8 +92066,8 @@ static void fkScanChildren( } /* -** This function returns a pointer to the head of a linked list of FK -** constraints for which table pTab is the parent table. For example, +** This function returns a linked list of FKey objects (connected by +** FKey.pNextTo) holding all children of table pTab. For example, ** given the following schema: ** ** CREATE TABLE t1(a PRIMARY KEY); @@ -91215,8 +92158,7 @@ SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTa if( (db->flags & SQLITE_DeferFKs)==0 ){ sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2); sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_FOREIGNKEY, - OE_Abort, "foreign key constraint failed", P4_STATIC - ); + OE_Abort, 0, P4_STATIC, P5_ConstraintFK); } if( iSkip ){ @@ -91426,7 +92368,8 @@ SQLITE_PRIVATE void sqlite3FkCheck( sqlite3DbFree(db, aiFree); } - /* Loop through all the foreign key constraints that refer to this table */ + /* Loop through all the foreign key constraints that refer to this table. + ** (the "child" constraints) */ for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ Index *pIdx = 0; /* Foreign key index for pFKey */ SrcList *pSrc; @@ -91451,9 +92394,8 @@ SQLITE_PRIVATE void sqlite3FkCheck( } assert( aiCol || pFKey->nCol==1 ); - /* Create a SrcList structure containing a single table (the table - ** the foreign key that refers to this table is attached to). This - ** is required for the sqlite3WhereXXX() interface. */ + /* Create a SrcList structure containing the child table. We need the + ** child table as a SrcList for sqlite3WhereBegin() */ pSrc = sqlite3SrcListAppend(db, 0, 0, 0); if( pSrc ){ struct SrcList_item *pItem = pSrc->a; @@ -91502,7 +92444,7 @@ SQLITE_PRIVATE u32 sqlite3FkOldmask( Index *pIdx = 0; sqlite3FkLocateIndex(pParse, pTab, p, &pIdx, 0); if( pIdx ){ - for(i=0; inColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]); + for(i=0; inKeyCol; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]); } } } @@ -91694,7 +92636,7 @@ static Trigger *fkActionTrigger( tFrom.z = zFrom; tFrom.n = nFrom; - pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed"); + pRaise = sqlite3Expr(db, TK_RAISE, "FOREIGN KEY constraint failed"); if( pRaise ){ pRaise->affinity = OE_Abort; } @@ -91858,10 +92800,16 @@ SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ */ /* -** Generate code that will open a table for reading. +** Generate code that will +** +** (1) acquire a lock for table pTab then +** (2) open pTab as cursor iCur. +** +** If pTab is a WITHOUT ROWID table, then it is the PRIMARY KEY index +** for that table that is actually opened. */ SQLITE_PRIVATE void sqlite3OpenTable( - Parse *p, /* Generate code into this VDBE */ + Parse *pParse, /* Generate code into this VDBE */ int iCur, /* The cursor number of the table */ int iDb, /* The database index in sqlite3.aDb[] */ Table *pTab, /* The table to be opened */ @@ -91869,12 +92817,21 @@ SQLITE_PRIVATE void sqlite3OpenTable( ){ Vdbe *v; assert( !IsVirtual(pTab) ); - v = sqlite3GetVdbe(p); + v = sqlite3GetVdbe(pParse); assert( opcode==OP_OpenWrite || opcode==OP_OpenRead ); - sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName); - sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb); - sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32); - VdbeComment((v, "%s", pTab->zName)); + sqlite3TableLock(pParse, iDb, pTab->tnum, + (opcode==OP_OpenWrite)?1:0, pTab->zName); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp4Int(v, opcode, iCur, pTab->tnum, iDb, pTab->nCol); + VdbeComment((v, "%s", pTab->zName)); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->tnum=pTab->tnum ); + sqlite3VdbeAddOp3(v, opcode, iCur, pPk->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + VdbeComment((v, "%s", pTab->zName)); + } } /* @@ -91910,15 +92867,15 @@ SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){ int n; Table *pTab = pIdx->pTable; sqlite3 *db = sqlite3VdbeDb(v); - pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2); + pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1); if( !pIdx->zColAff ){ db->mallocFailed = 1; return 0; } for(n=0; nnColumn; n++){ - pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity; + i16 x = pIdx->aiColumn[n]; + pIdx->zColAff[n] = x<0 ? SQLITE_AFF_INTEGER : pTab->aCol[x].affinity; } - pIdx->zColAff[n++] = SQLITE_AFF_INTEGER; pIdx->zColAff[n] = 0; } @@ -92264,7 +93221,7 @@ static int xferOptimization( ); /* -** This routine is call to handle SQL of the following forms: +** This routine is called to handle SQL of the following forms: ** ** insert into TABLE (IDLIST) values(EXPRLIST) ** insert into TABLE (IDLIST) select @@ -92279,12 +93236,12 @@ static int xferOptimization( ** data for the insert. ** ** The code generated follows one of four templates. For a simple -** select with data coming from a VALUES clause, the code executes +** insert with data coming from a VALUES clause, the code executes ** once straight down through. Pseudo-code follows (we call this ** the "1st template"): ** ** open write cursor to
and its indices -** puts VALUES clause expressions onto the stack +** put VALUES clause expressions into registers ** write the resulting record into
** cleanup ** @@ -92368,7 +93325,6 @@ static int xferOptimization( SQLITE_PRIVATE void sqlite3Insert( Parse *pParse, /* Parser context */ SrcList *pTabList, /* Name of table into which we are inserting */ - ExprList *pList, /* List of values to be inserted */ Select *pSelect, /* A SELECT statement to use as the data source */ IdList *pColumn, /* Column names corresponding to IDLIST. */ int onError /* How to handle constraint errors */ @@ -92382,8 +93338,9 @@ SQLITE_PRIVATE void sqlite3Insert( Index *pIdx; /* For looping over indices of the table */ int nColumn; /* Number of columns in the data */ int nHidden = 0; /* Number of hidden columns if TABLE is virtual */ - int baseCur = 0; /* VDBE Cursor number for pTab */ - int keyColumn = -1; /* Column that is the INTEGER PRIMARY KEY */ + int iDataCur = 0; /* VDBE cursor that is the main data repository */ + int iIdxCur = 0; /* First index cursor */ + int ipkColumn = -1; /* Column that is the INTEGER PRIMARY KEY */ int endOfLoop; /* Label for the end of the insertion loop */ int useTempTable = 0; /* Store SELECT results in intermediate table */ int srcTab = 0; /* Data comes from this temporary cursor if >=0 */ @@ -92394,6 +93351,8 @@ SQLITE_PRIVATE void sqlite3Insert( int iDb; /* Index of database holding TABLE */ Db *pDb; /* The database containing table being inserted into */ int appendFlag = 0; /* True if the insert is likely to be an append */ + int withoutRowid; /* 0 for normal table. 1 for WITHOUT ROWID table */ + ExprList *pList = 0; /* List of VALUES() to be inserted */ /* Register allocations */ int regFromSelect = 0;/* Base register for data coming from SELECT */ @@ -92417,6 +93376,17 @@ SQLITE_PRIVATE void sqlite3Insert( goto insert_cleanup; } + /* If the Select object is really just a simple VALUES() list with a + ** single row values (the common case) then keep that one row of values + ** and go ahead and discard the Select object + */ + if( pSelect && (pSelect->selFlags & SF_Values)!=0 && pSelect->pPrior==0 ){ + pList = pSelect->pEList; + pSelect->pEList = 0; + sqlite3SelectDelete(db, pSelect); + pSelect = 0; + } + /* Locate the table into which we will be inserting new information. */ assert( pTabList->nSrc==1 ); @@ -92433,6 +93403,7 @@ SQLITE_PRIVATE void sqlite3Insert( if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){ goto insert_cleanup; } + withoutRowid = !HasRowid(pTab); /* Figure out if we have any triggers and if the table being ** inserted into is a view @@ -92452,16 +93423,13 @@ SQLITE_PRIVATE void sqlite3Insert( assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) ); /* If pTab is really a view, make sure it has been initialized. - ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual - ** module table). + ** ViewGetColumnNames() is a no-op if pTab is not a view. */ if( sqlite3ViewGetColumnNames(pParse, pTab) ){ goto insert_cleanup; } - /* Ensure that: - * (a) the table is not read-only, - * (b) that if it is a view then ON INSERT triggers exist + /* Cannot insert into a read-only table. */ if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ goto insert_cleanup; @@ -92502,8 +93470,7 @@ SQLITE_PRIVATE void sqlite3Insert( ** co-routine is the common header to the 3rd and 4th templates. */ if( pSelect ){ - /* Data is coming from a SELECT. Generate a co-routine to run that - ** SELECT. */ + /* Data is coming from a SELECT. Generate a co-routine to run the SELECT */ int rc = sqlite3CodeCoroutine(pParse, pSelect, &dest); if( rc ) goto insert_cleanup; @@ -92515,7 +93482,7 @@ SQLITE_PRIVATE void sqlite3Insert( /* Set useTempTable to TRUE if the result of the SELECT statement ** should be written into a temporary table (template 4). Set to - ** FALSE if each* row of the SELECT can be written directly into + ** FALSE if each output row of the SELECT can be written directly into ** the destination table (template 3). ** ** A temp table must be used if the table being updated is also one @@ -92598,11 +93565,11 @@ SQLITE_PRIVATE void sqlite3Insert( ** remember the column indices. ** ** If the table has an INTEGER PRIMARY KEY column and that column - ** is named in the IDLIST, then record in the keyColumn variable - ** the index into IDLIST of the primary key column. keyColumn is + ** is named in the IDLIST, then record in the ipkColumn variable + ** the index into IDLIST of the primary key column. ipkColumn is ** the index of the primary key as it appears in IDLIST, not as - ** is appears in the original table. (The index of the primary - ** key in the original table is pTab->iPKey.) + ** is appears in the original table. (The index of the INTEGER + ** PRIMARY KEY in the original table is pTab->iPKey.) */ if( pColumn ){ for(i=0; inId; i++){ @@ -92613,14 +93580,14 @@ SQLITE_PRIVATE void sqlite3Insert( if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){ pColumn->a[i].idx = j; if( j==pTab->iPKey ){ - keyColumn = i; + ipkColumn = i; assert( !withoutRowid ); } break; } } if( j>=pTab->nCol ){ - if( sqlite3IsRowid(pColumn->a[i].zName) ){ - keyColumn = i; + if( sqlite3IsRowid(pColumn->a[i].zName) && !withoutRowid ){ + ipkColumn = i; }else{ sqlite3ErrorMsg(pParse, "table %S has no column named %s", pTabList, 0, pColumn->a[i].zName); @@ -92632,11 +93599,11 @@ SQLITE_PRIVATE void sqlite3Insert( } /* If there is no IDLIST term but the table has an integer primary - ** key, the set the keyColumn variable to the primary key column index - ** in the original table definition. + ** key, the set the ipkColumn variable to the integer primary key + ** column index in the original table definition. */ if( pColumn==0 && nColumn>0 ){ - keyColumn = pTab->iPKey; + ipkColumn = pTab->iPKey; } /* Initialize the count of rows to be inserted @@ -92649,9 +93616,8 @@ SQLITE_PRIVATE void sqlite3Insert( /* If this is not a view, open the table and and all indices */ if( !isView ){ int nIdx; - - baseCur = pParse->nTab; - nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite); + nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, -1, 0, + &iDataCur, &iIdxCur); aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1)); if( aRegIdx==0 ){ goto insert_cleanup; @@ -92711,15 +93677,16 @@ SQLITE_PRIVATE void sqlite3Insert( ** we do not know what the unique ID will be (because the insert has ** not happened yet) so we substitute a rowid of -1 */ - if( keyColumn<0 ){ + if( ipkColumn<0 ){ sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); }else{ int j1; + assert( !withoutRowid ); if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols); + sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regCols); }else{ assert( pSelect==0 ); /* Otherwise useTempTable is true */ - sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols); + sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regCols); } j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols); sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); @@ -92769,29 +93736,27 @@ SQLITE_PRIVATE void sqlite3Insert( sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1); } - /* Push the record number for the new entry onto the stack. The - ** record number is a randomly generate integer created by NewRowid - ** except when the table has an INTEGER PRIMARY KEY column, in which - ** case the record number is the same as that column. + /* Compute the content of the next row to insert into a range of + ** registers beginning at regIns. */ if( !isView ){ if( IsVirtual(pTab) ){ /* The row that the VUpdate opcode will delete: none */ sqlite3VdbeAddOp2(v, OP_Null, 0, regIns); } - if( keyColumn>=0 ){ + if( ipkColumn>=0 ){ if( useTempTable ){ - sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid); + sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regRowid); }else if( pSelect ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid); + sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+ipkColumn, regRowid); }else{ VdbeOp *pOp; - sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid); + sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regRowid); pOp = sqlite3VdbeGetOp(v, -1); if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){ appendFlag = 1; pOp->opcode = OP_NewRowid; - pOp->p1 = baseCur; + pOp->p1 = iDataCur; pOp->p2 = regRowid; pOp->p3 = regAutoinc; } @@ -92803,7 +93768,7 @@ SQLITE_PRIVATE void sqlite3Insert( int j1; if( !IsVirtual(pTab) ){ j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid); - sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); + sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc); sqlite3VdbeJumpHere(v, j1); }else{ j1 = sqlite3VdbeCurrentAddr(v); @@ -92811,15 +93776,15 @@ SQLITE_PRIVATE void sqlite3Insert( } sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); } - }else if( IsVirtual(pTab) ){ + }else if( IsVirtual(pTab) || withoutRowid ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid); }else{ - sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc); + sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc); appendFlag = 1; } autoIncStep(pParse, regAutoinc, regRowid); - /* Push onto the stack, data for all columns of the new entry, beginning + /* Compute data for all columns of the new entry, beginning ** with the first column. */ nHidden = 0; @@ -92827,8 +93792,8 @@ SQLITE_PRIVATE void sqlite3Insert( int iRegStore = regRowid+1+i; if( i==pTab->iPKey ){ /* The value of the INTEGER PRIMARY KEY column is always a NULL. - ** Whenever this column is read, the record number will be substituted - ** in its place. So will fill this column with a NULL to avoid + ** Whenever this column is read, the rowid will be substituted + ** in its place. Hence, fill this column with a NULL to avoid ** taking up data space with information that will never be used. */ sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore); continue; @@ -92871,13 +93836,12 @@ SQLITE_PRIVATE void sqlite3Insert( #endif { int isReplace; /* Set to true if constraints may cause a replace */ - sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx, - keyColumn>=0, 0, onError, endOfLoop, &isReplace + sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, + regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace ); sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); - sqlite3CompleteInsertion( - pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0 - ); + sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur, + regIns, aRegIdx, 0, appendFlag, isReplace==0); } } @@ -92908,9 +93872,9 @@ SQLITE_PRIVATE void sqlite3Insert( if( !IsVirtual(pTab) && !isView ){ /* Close all tables opened */ - sqlite3VdbeAddOp1(v, OP_Close, baseCur); - for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){ - sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur); + if( iDataCurpIndex; pIdx; pIdx=pIdx->pNext, idx++){ + sqlite3VdbeAddOp1(v, OP_Close, idx+iIdxCur); } } @@ -92955,36 +93919,48 @@ insert_cleanup: #undef tmask #endif - /* -** Generate code to do constraint checks prior to an INSERT or an UPDATE. +** Generate code to do constraint checks prior to an INSERT or an UPDATE +** on table pTab. ** -** The input is a range of consecutive registers as follows: +** The regNewData parameter is the first register in a range that contains +** the data to be inserted or the data after the update. There will be +** pTab->nCol+1 registers in this range. The first register (the one +** that regNewData points to) will contain the new rowid, or NULL in the +** case of a WITHOUT ROWID table. The second register in the range will +** contain the content of the first table column. The third register will +** contain the content of the second table column. And so forth. ** -** 1. The rowid of the row after the update. +** The regOldData parameter is similar to regNewData except that it contains +** the data prior to an UPDATE rather than afterwards. regOldData is zero +** for an INSERT. This routine can distinguish between UPDATE and INSERT by +** checking regOldData for zero. ** -** 2. The data in the first column of the entry after the update. +** For an UPDATE, the pkChng boolean is true if the true primary key (the +** rowid for a normal table or the PRIMARY KEY for a WITHOUT ROWID table) +** might be modified by the UPDATE. If pkChng is false, then the key of +** the iDataCur content table is guaranteed to be unchanged by the UPDATE. ** -** i. Data from middle columns... +** For an INSERT, the pkChng boolean indicates whether or not the rowid +** was explicitly specified as part of the INSERT statement. If pkChng +** is zero, it means that the either rowid is computed automatically or +** that the table is a WITHOUT ROWID table and has no rowid. On an INSERT, +** pkChng will only be true if the INSERT statement provides an integer +** value for either the rowid column or its INTEGER PRIMARY KEY alias. ** -** N. The data in the last column of the entry after the update. -** -** The regRowid parameter is the index of the register containing (1). -** -** If isUpdate is true and rowidChng is non-zero, then rowidChng contains -** the address of a register containing the rowid before the update takes -** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate -** is false, indicating an INSERT statement, then a non-zero rowidChng -** indicates that the rowid was explicitly specified as part of the -** INSERT statement. If rowidChng is false, it means that the rowid is -** computed automatically in an insert or that the rowid value is not -** modified by an update. -** -** The code generated by this routine store new index entries into +** The code generated by this routine will store new index entries into ** registers identified by aRegIdx[]. No index entry is created for ** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is ** the same as the order of indices on the linked list of indices -** attached to the table. +** at pTab->pIndex. +** +** The caller must have already opened writeable cursors on the main +** table and all applicable indices (that is to say, all indices for which +** aRegIdx[] is not zero). iDataCur is the cursor for the main table when +** inserting or updating a rowid table, or the cursor for the PRIMARY KEY +** index when operating on a WITHOUT ROWID table. iIdxCur is the cursor +** for the first index in the pTab->pIndex list. Cursors for other indices +** are at iIdxCur+N for the N-th element of the pTab->pIndex list. ** ** This routine also generates code to check constraints. NOT NULL, ** CHECK, and UNIQUE constraints are all checked. If a constraint fails, @@ -92994,22 +93970,23 @@ insert_cleanup: ** Constraint type Action What Happens ** --------------- ---------- ---------------------------------------- ** any ROLLBACK The current transaction is rolled back and -** sqlite3_exec() returns immediately with a +** sqlite3_step() returns immediately with a ** return code of SQLITE_CONSTRAINT. ** ** any ABORT Back out changes from the current command ** only (do not do a complete rollback) then -** cause sqlite3_exec() to return immediately +** cause sqlite3_step() to return immediately ** with SQLITE_CONSTRAINT. ** -** any FAIL Sqlite3_exec() returns immediately with a +** any FAIL Sqlite3_step() returns immediately with a ** return code of SQLITE_CONSTRAINT. The ** transaction is not rolled back and any -** prior changes are retained. +** changes to prior rows are retained. ** -** any IGNORE The record number and data is popped from -** the stack and there is an immediate jump -** to label ignoreDest. +** any IGNORE The attempt in insert or update the current +** row is skipped, without throwing an error. +** Processing continues with the next row. +** (There is an immediate jump to ignoreDest.) ** ** NOT NULL REPLACE The NULL value is replace by the default ** value for that column. If the default value @@ -93024,44 +94001,58 @@ insert_cleanup: ** Or if overrideError==OE_Default, then the pParse->onError parameter ** is used. Or if pParse->onError==OE_Default then the onError value ** for the constraint is used. -** -** The calling routine must open a read/write cursor for pTab with -** cursor number "baseCur". All indices of pTab must also have open -** read/write cursors with cursor number baseCur+i for the i-th cursor. -** Except, if there is no possibility of a REPLACE action then -** cursors do not need to be open for indices where aRegIdx[i]==0. */ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( - Parse *pParse, /* The parser context */ - Table *pTab, /* the table into which we are inserting */ - int baseCur, /* Index of a read/write cursor pointing at pTab */ - int regRowid, /* Index of the range of input registers */ - int *aRegIdx, /* Register used by each index. 0 for unused indices */ - int rowidChng, /* True if the rowid might collide with existing entry */ - int isUpdate, /* True for UPDATE, False for INSERT */ - int overrideError, /* Override onError to this if not OE_Default */ - int ignoreDest, /* Jump to this label on an OE_Ignore resolution */ - int *pbMayReplace /* OUT: Set to true if constraint may cause a replace */ + Parse *pParse, /* The parser context */ + Table *pTab, /* The table being inserted or updated */ + int *aRegIdx, /* Use register aRegIdx[i] for index i. 0 for unused */ + int iDataCur, /* Canonical data cursor (main table or PK index) */ + int iIdxCur, /* First index cursor */ + int regNewData, /* First register in a range holding values to insert */ + int regOldData, /* Previous content. 0 for INSERTs */ + u8 pkChng, /* Non-zero if the rowid or PRIMARY KEY changed */ + u8 overrideError, /* Override onError to this if not OE_Default */ + int ignoreDest, /* Jump to this label on an OE_Ignore resolution */ + int *pbMayReplace /* OUT: Set to true if constraint may cause a replace */ ){ - int i; /* loop counter */ - Vdbe *v; /* VDBE under constrution */ - int nCol; /* Number of columns */ - int onError; /* Conflict resolution strategy */ - int j1; /* Addresss of jump instruction */ - int j2 = 0, j3; /* Addresses of jump instructions */ - int regData; /* Register containing first data column */ - int iCur; /* Table cursor number */ + Vdbe *v; /* VDBE under constrution */ Index *pIdx; /* Pointer to one of the indices */ + Index *pPk = 0; /* The PRIMARY KEY index */ sqlite3 *db; /* Database connection */ + int i; /* loop counter */ + int ix; /* Index loop counter */ + int nCol; /* Number of columns */ + int onError; /* Conflict resolution strategy */ + int j1; /* Addresss of jump instruction */ int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ - int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid; + int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */ + int ipkTop = 0; /* Top of the rowid change constraint check */ + int ipkBottom = 0; /* Bottom of the rowid change constraint check */ + u8 isUpdate; /* True if this is an UPDATE operation */ + int regRowid = -1; /* Register holding ROWID value */ + isUpdate = regOldData!=0; db = pParse->db; v = sqlite3GetVdbe(pParse); assert( v!=0 ); assert( pTab->pSelect==0 ); /* This table is not a VIEW */ nCol = pTab->nCol; - regData = regRowid + 1; + + /* pPk is the PRIMARY KEY index for WITHOUT ROWID tables and NULL for + ** normal rowid tables. nPkField is the number of key fields in the + ** pPk index or 1 for a rowid table. In other words, nPkField is the + ** number of fields in the true primary key of the table. */ + if( HasRowid(pTab) ){ + pPk = 0; + nPkField = 1; + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + nPkField = pPk->nKeyCol; + } + + /* Record that this module has started */ + VdbeModuleComment((v, "BEGIN: GenCnstCks(%d,%d,%d,%d,%d)", + iDataCur, iIdxCur, regNewData, regOldData, pkChng)); /* Test all NOT NULL constraints. */ @@ -93084,24 +94075,24 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( switch( onError ){ case OE_Abort: sqlite3MayAbort(pParse); + /* Fall through */ case OE_Rollback: case OE_Fail: { - char *zMsg; - sqlite3VdbeAddOp3(v, OP_HaltIfNull, - SQLITE_CONSTRAINT_NOTNULL, onError, regData+i); - zMsg = sqlite3MPrintf(db, "%s.%s may not be NULL", - pTab->zName, pTab->aCol[i].zName); - sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC); + char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName, + pTab->aCol[i].zName); + sqlite3VdbeAddOp4(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL, onError, + regNewData+1+i, zMsg, P4_DYNAMIC); + sqlite3VdbeChangeP5(v, P5_ConstraintNotNull); break; } case OE_Ignore: { - sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest); + sqlite3VdbeAddOp2(v, OP_IsNull, regNewData+1+i, ignoreDest); break; } default: { assert( onError==OE_Replace ); - j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i); - sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i); + j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regNewData+1+i); + sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regNewData+1+i); sqlite3VdbeJumpHere(v, j1); break; } @@ -93113,7 +94104,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( #ifndef SQLITE_OMIT_CHECK if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ ExprList *pCheck = pTab->pCheck; - pParse->ckBase = regData; + pParse->ckBase = regNewData+1; onError = overrideError!=OE_Default ? overrideError : OE_Abort; for(i=0; inExpr; i++){ int allOk = sqlite3VdbeMakeLabel(v); @@ -93121,37 +94112,58 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( if( onError==OE_Ignore ){ sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); }else{ - char *zConsName = pCheck->a[i].zName; + char *zName = pCheck->a[i].zName; + if( zName==0 ) zName = pTab->zName; if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */ - if( zConsName ){ - zConsName = sqlite3MPrintf(db, "constraint %s failed", zConsName); - }else{ - zConsName = 0; - } sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_CHECK, - onError, zConsName, P4_DYNAMIC); + onError, zName, P4_TRANSIENT, + P5_ConstraintCheck); } sqlite3VdbeResolveLabel(v, allOk); } } #endif /* !defined(SQLITE_OMIT_CHECK) */ - /* If we have an INTEGER PRIMARY KEY, make sure the primary key - ** of the new record does not previously exist. Except, if this - ** is an UPDATE and the primary key is not changing, that is OK. + /* If rowid is changing, make sure the new rowid does not previously + ** exist in the table. */ - if( rowidChng ){ + if( pkChng && pPk==0 ){ + int addrRowidOk = sqlite3VdbeMakeLabel(v); + + /* Figure out what action to take in case of a rowid collision */ onError = pTab->keyConf; if( overrideError!=OE_Default ){ onError = overrideError; }else if( onError==OE_Default ){ onError = OE_Abort; } - + if( isUpdate ){ - j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng); + /* pkChng!=0 does not mean that the rowid has change, only that + ** it might have changed. Skip the conflict logic below if the rowid + ** is unchanged. */ + sqlite3VdbeAddOp3(v, OP_Eq, regNewData, addrRowidOk, regOldData); } - j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid); + + /* If the response to a rowid conflict is REPLACE but the response + ** to some other UNIQUE constraint is FAIL or IGNORE, then we need + ** to defer the running of the rowid conflict checking until after + ** the UNIQUE constraints have run. + */ + if( onError==OE_Replace && overrideError!=OE_Replace ){ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->onError==OE_Ignore || pIdx->onError==OE_Fail ){ + ipkTop = sqlite3VdbeAddOp0(v, OP_Goto); + break; + } + } + } + + /* Check to see if the new rowid already exists in the table. Skip + ** the following conflict logic if it does not. */ + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, addrRowidOk, regNewData); + + /* Generate code that deals with a rowid collision */ switch( onError ){ default: { onError = OE_Abort; @@ -93160,8 +94172,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( case OE_Rollback: case OE_Abort: case OE_Fail: { - sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_PRIMARYKEY, - onError, "PRIMARY KEY must be unique", P4_STATIC); + sqlite3RowidConstraint(pParse, onError, pTab); break; } case OE_Replace: { @@ -93193,68 +94204,90 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){ sqlite3MultiWrite(pParse); - sqlite3GenerateRowDelete( - pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace - ); + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + regNewData, 1, 0, OE_Replace, 1); }else if( pTab->pIndex ){ sqlite3MultiWrite(pParse); - sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0); + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, 0); } seenReplace = 1; break; } case OE_Ignore: { - assert( seenReplace==0 ); + /*assert( seenReplace==0 );*/ sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); break; } } - sqlite3VdbeJumpHere(v, j3); - if( isUpdate ){ - sqlite3VdbeJumpHere(v, j2); + sqlite3VdbeResolveLabel(v, addrRowidOk); + if( ipkTop ){ + ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, ipkTop); } } /* Test all UNIQUE constraints by creating entries for each UNIQUE ** index and making sure that duplicate entries do not already exist. - ** Add the new records to the indices as we go. + ** Compute the revised record entries for indices as we go. + ** + ** This loop also handles the case of the PRIMARY KEY index for a + ** WITHOUT ROWID table. */ - for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){ - int regIdx; - int regR; - int addrSkipRow = 0; + for(ix=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, ix++){ + int regIdx; /* Range of registers hold conent for pIdx */ + int regR; /* Range of registers holding conflicting PK */ + int iThisCur; /* Cursor for this UNIQUE index */ + int addrUniqueOk; /* Jump here if the UNIQUE constraint is satisfied */ - if( aRegIdx[iCur]==0 ) continue; /* Skip unused indices */ + if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */ + iThisCur = iIdxCur+ix; + addrUniqueOk = sqlite3VdbeMakeLabel(v); + /* Skip partial indices for which the WHERE clause is not true */ if( pIdx->pPartIdxWhere ){ - sqlite3VdbeAddOp2(v, OP_Null, 0, aRegIdx[iCur]); - addrSkipRow = sqlite3VdbeMakeLabel(v); - pParse->ckBase = regData; - sqlite3ExprIfFalse(pParse, pIdx->pPartIdxWhere, addrSkipRow, + sqlite3VdbeAddOp2(v, OP_Null, 0, aRegIdx[ix]); + pParse->ckBase = regNewData+1; + sqlite3ExprIfFalse(pParse, pIdx->pPartIdxWhere, addrUniqueOk, SQLITE_JUMPIFNULL); pParse->ckBase = 0; } - /* Create a key for accessing the index entry */ - regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1); + /* Create a record for this index entry as it should appear after + ** the insert or update. Store that record in the aRegIdx[ix] register + */ + regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn); for(i=0; inColumn; i++){ - int idx = pIdx->aiColumn[i]; - if( idx==pTab->iPKey ){ - sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); + int iField = pIdx->aiColumn[i]; + int x; + if( iField<0 || iField==pTab->iPKey ){ + if( regRowid==regIdx+i ) continue; /* ROWID already in regIdx+i */ + x = regNewData; + regRowid = pIdx->pPartIdxWhere ? -1 : regIdx+i; }else{ - sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i); + x = iField + regNewData + 1; } + sqlite3VdbeAddOp2(v, OP_SCopy, x, regIdx+i); + VdbeComment((v, "%s", iField<0 ? "rowid" : pTab->aCol[iField].zName)); } - sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]); sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT); - sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1); + VdbeComment((v, "for %s", pIdx->zName)); + sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn); - /* Find out what action to take in case there is an indexing conflict */ + /* In an UPDATE operation, if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table and there has been no change the + ** primary key, then no collision is possible. The collision detection + ** logic below can all be skipped. */ + if( isUpdate && pPk==pIdx && pkChng==0 ){ + sqlite3VdbeResolveLabel(v, addrUniqueOk); + continue; + } + + /* Find out what action to take in case there is a uniqueness conflict */ onError = pIdx->onError; if( onError==OE_None ){ - sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); - sqlite3VdbeResolveLabel(v, addrSkipRow); + sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn); + sqlite3VdbeResolveLabel(v, addrUniqueOk); continue; /* pIdx is not a UNIQUE index */ } if( overrideError!=OE_Default ){ @@ -93262,18 +94295,59 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( }else if( onError==OE_Default ){ onError = OE_Abort; } - if( seenReplace ){ - if( onError==OE_Ignore ) onError = OE_Replace; - else if( onError==OE_Fail ) onError = OE_Abort; - } /* Check to see if the new index entry will be unique */ - regR = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR); - j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0, - regR, SQLITE_INT_TO_PTR(regIdx), - P4_INT32); - sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1); + sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, + regIdx, pIdx->nKeyCol); + + /* Generate code to handle collisions */ + regR = (pIdx==pPk) ? regIdx : sqlite3GetTempRange(pParse, nPkField); + if( isUpdate || onError==OE_Replace ){ + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR); + /* Conflict only if the rowid of the existing index entry + ** is different from old-rowid */ + if( isUpdate ){ + sqlite3VdbeAddOp3(v, OP_Eq, regR, addrUniqueOk, regOldData); + } + }else{ + int x; + /* Extract the PRIMARY KEY from the end of the index entry and + ** store it in registers regR..regR+nPk-1 */ + if( pIdx!=pPk ){ + for(i=0; inKeyCol; i++){ + x = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[i]); + sqlite3VdbeAddOp3(v, OP_Column, iThisCur, x, regR+i); + VdbeComment((v, "%s.%s", pTab->zName, + pTab->aCol[pPk->aiColumn[i]].zName)); + } + } + if( isUpdate ){ + /* If currently processing the PRIMARY KEY of a WITHOUT ROWID + ** table, only conflict if the new PRIMARY KEY values are actually + ** different from the old. + ** + ** For a UNIQUE index, only conflict if the PRIMARY KEY values + ** of the matched index row are different from the original PRIMARY + ** KEY values of this row before the update. */ + int addrJump = sqlite3VdbeCurrentAddr(v)+pPk->nKeyCol; + int op = OP_Ne; + int regCmp = (pIdx->autoIndex==2 ? regIdx : regR); + + for(i=0; inKeyCol; i++){ + char *p4 = (char*)sqlite3LocateCollSeq(pParse, pPk->azColl[i]); + x = pPk->aiColumn[i]; + if( i==(pPk->nKeyCol-1) ){ + addrJump = addrUniqueOk; + op = OP_Eq; + } + sqlite3VdbeAddOp4(v, op, + regOldData+1+x, addrJump, regCmp+i, p4, P4_COLLSEQ + ); + } + } + } + } /* Generate code that executes if the new index entry is not unique */ assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail @@ -93282,30 +94356,10 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( case OE_Rollback: case OE_Abort: case OE_Fail: { - int j; - StrAccum errMsg; - const char *zSep; - char *zErr; - - sqlite3StrAccumInit(&errMsg, 0, 0, 200); - errMsg.db = db; - zSep = pIdx->nColumn>1 ? "columns " : "column "; - for(j=0; jnColumn; j++){ - char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName; - sqlite3StrAccumAppend(&errMsg, zSep, -1); - zSep = ", "; - sqlite3StrAccumAppend(&errMsg, zCol, -1); - } - sqlite3StrAccumAppend(&errMsg, - pIdx->nColumn>1 ? " are not unique" : " is not unique", -1); - zErr = sqlite3StrAccumFinish(&errMsg); - sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_UNIQUE, - onError, zErr, 0); - sqlite3DbFree(errMsg.db, zErr); + sqlite3UniqueConstraint(pParse, onError, pIdx); break; } case OE_Ignore: { - assert( seenReplace==0 ); sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); break; } @@ -93316,27 +94370,29 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( if( db->flags&SQLITE_RecTriggers ){ pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); } - sqlite3GenerateRowDelete( - pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace - ); + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + regR, nPkField, 0, OE_Replace, pIdx==pPk); seenReplace = 1; break; } } - sqlite3VdbeJumpHere(v, j3); - sqlite3VdbeResolveLabel(v, addrSkipRow); - sqlite3ReleaseTempReg(pParse, regR); + sqlite3VdbeResolveLabel(v, addrUniqueOk); + sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn); + if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField); + } + if( ipkTop ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, ipkTop+1); + sqlite3VdbeJumpHere(v, ipkBottom); } - if( pbMayReplace ){ - *pbMayReplace = seenReplace; - } + *pbMayReplace = seenReplace; + VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace)); } /* ** This routine generates code to finish the INSERT or UPDATE operation ** that was started by a prior call to sqlite3GenerateConstraintChecks. -** A consecutive range of registers starting at regRowid contains the +** A consecutive range of registers starting at regNewData contains the ** rowid and the content to be inserted. ** ** The arguments to this routine should be the same as the first six @@ -93345,19 +94401,20 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( SQLITE_PRIVATE void sqlite3CompleteInsertion( Parse *pParse, /* The parser context */ Table *pTab, /* the table into which we are inserting */ - int baseCur, /* Index of a read/write cursor pointing at pTab */ - int regRowid, /* Range of content */ + int iDataCur, /* Cursor of the canonical data source */ + int iIdxCur, /* First index cursor */ + int regNewData, /* Range of content */ int *aRegIdx, /* Register used by each index. 0 for unused indices */ int isUpdate, /* True for UPDATE, False for INSERT */ int appendBias, /* True if this is likely to be an append */ int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */ ){ - int i; - Vdbe *v; - Index *pIdx; - u8 pik_flags; - int regData; - int regRec; + Vdbe *v; /* Prepared statements under construction */ + Index *pIdx; /* An index being inserted or updated */ + u8 pik_flags; /* flag values passed to the btree insert */ + int regData; /* Content registers (after the rowid) */ + int regRec; /* Register holding assemblied record for the table */ + int i; /* Loop counter */ v = sqlite3GetVdbe(pParse); assert( v!=0 ); @@ -93367,12 +94424,17 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( if( pIdx->pPartIdxWhere ){ sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2); } - sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]); - if( useSeekResult ){ - sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i]); + pik_flags = 0; + if( useSeekResult ) pik_flags = OPFLAG_USESEEKRESULT; + if( pIdx->autoIndex==2 && !HasRowid(pTab) ){ + assert( pParse->nested==0 ); + pik_flags |= OPFLAG_NCHANGE; } + if( pik_flags ) sqlite3VdbeChangeP5(v, pik_flags); } - regData = regRowid + 1; + if( !HasRowid(pTab) ) return; + regData = regNewData + 1; regRec = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec); sqlite3TableAffinityStr(v, pTab); @@ -93389,7 +94451,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( if( useSeekResult ){ pik_flags |= OPFLAG_USESEEKRESULT; } - sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iDataCur, regRec, regNewData); if( !pParse->nested ){ sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT); } @@ -93397,39 +94459,71 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( } /* -** Generate code that will open cursors for a table and for all -** indices of that table. The "baseCur" parameter is the cursor number used -** for the table. Indices are opened on subsequent cursors. +** Allocate cursors for the pTab table and all its indices and generate +** code to open and initialized those cursors. ** -** Return the number of indices on the table. +** The cursor for the object that contains the complete data (normally +** the table itself, but the PRIMARY KEY index in the case of a WITHOUT +** ROWID table) is returned in *piDataCur. The first index cursor is +** returned in *piIdxCur. The number of indices is returned. +** +** Use iBase as the first cursor (either the *piDataCur for rowid tables +** or the first index for WITHOUT ROWID tables) if it is non-negative. +** If iBase is negative, then allocate the next available cursor. +** +** For a rowid table, *piDataCur will be exactly one less than *piIdxCur. +** For a WITHOUT ROWID table, *piDataCur will be somewhere in the range +** of *piIdxCurs, depending on where the PRIMARY KEY index appears on the +** pTab->pIndex list. */ SQLITE_PRIVATE int sqlite3OpenTableAndIndices( Parse *pParse, /* Parsing context */ Table *pTab, /* Table to be opened */ - int baseCur, /* Cursor number assigned to the table */ - int op /* OP_OpenRead or OP_OpenWrite */ + int op, /* OP_OpenRead or OP_OpenWrite */ + int iBase, /* Use this for the table cursor, if there is one */ + u8 *aToOpen, /* If not NULL: boolean for each table and index */ + int *piDataCur, /* Write the database source cursor number here */ + int *piIdxCur /* Write the first index cursor number here */ ){ int i; int iDb; + int iDataCur; Index *pIdx; Vdbe *v; - if( IsVirtual(pTab) ) return 0; + assert( op==OP_OpenRead || op==OP_OpenWrite ); + if( IsVirtual(pTab) ){ + assert( aToOpen==0 ); + *piDataCur = 0; + *piIdxCur = 1; + return 0; + } iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); v = sqlite3GetVdbe(pParse); assert( v!=0 ); - sqlite3OpenTable(pParse, baseCur, iDb, pTab, op); - for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); + if( iBase<0 ) iBase = pParse->nTab; + iDataCur = iBase++; + if( piDataCur ) *piDataCur = iDataCur; + if( HasRowid(pTab) && (aToOpen==0 || aToOpen[0]) ){ + sqlite3OpenTable(pParse, iDataCur, iDb, pTab, op); + }else{ + sqlite3TableLock(pParse, iDb, pTab->tnum, op==OP_OpenWrite, pTab->zName); + } + if( piIdxCur ) *piIdxCur = iBase; + for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + int iIdxCur = iBase++; assert( pIdx->pSchema==pTab->pSchema ); - sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); - VdbeComment((v, "%s", pIdx->zName)); + if( pIdx->autoIndex==2 && !HasRowid(pTab) && piDataCur ){ + *piDataCur = iIdxCur; + } + if( aToOpen==0 || aToOpen[i+1] ){ + sqlite3VdbeAddOp3(v, op, iIdxCur, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + VdbeComment((v, "%s", pIdx->zName)); + } } - if( pParse->nTabnTab = baseCur+i; - } - return i-1; + if( iBase>pParse->nTab ) pParse->nTab = iBase; + return i; } @@ -93474,13 +94568,13 @@ static int xferCompatibleIndex(Index *pDest, Index *pSrc){ int i; assert( pDest && pSrc ); assert( pDest->pTable!=pSrc->pTable ); - if( pDest->nColumn!=pSrc->nColumn ){ + if( pDest->nKeyCol!=pSrc->nKeyCol ){ return 0; /* Different number of columns */ } if( pDest->onError!=pSrc->onError ){ return 0; /* Different conflict resolution strategies */ } - for(i=0; inColumn; i++){ + for(i=0; inKeyCol; i++){ if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){ return 0; /* Different columns indexed */ } @@ -93539,10 +94633,9 @@ static int xferOptimization( int iDbSrc; /* The database of pSrc */ int iSrc, iDest; /* Cursors from source and destination */ int addr1, addr2; /* Loop addresses */ - int emptyDestTest; /* Address of test for empty pDest */ - int emptySrcTest; /* Address of test for empty pSrc */ + int emptyDestTest = 0; /* Address of test for empty pDest */ + int emptySrcTest = 0; /* Address of test for empty pSrc */ Vdbe *v; /* The VDBE we are building */ - KeyInfo *pKey; /* Key information for an index */ int regAutoinc; /* Memory register used by AUTOINC */ int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */ int regData, regRowid; /* Registers holding data and rowid */ @@ -93550,6 +94643,12 @@ static int xferOptimization( if( pSelect==0 ){ return 0; /* Must be of the form INSERT INTO ... SELECT ... */ } + if( pParse->pWith || pSelect->pWith ){ + /* Do not attempt to process this query if there are an WITH clauses + ** attached to it. Proceeding may generate a false "no such table: xxx" + ** error if pSelect reads from a CTE named "xxx". */ + return 0; + } if( sqlite3TriggerList(pParse, pDest) ){ return 0; /* tab1 must not have triggers */ } @@ -93612,6 +94711,9 @@ static int xferOptimization( if( pSrc==pDest ){ return 0; /* tab1 and tab2 may not be the same table */ } + if( HasRowid(pDest)!=HasRowid(pSrc) ){ + return 0; /* source and destination must both be WITHOUT ROWID or not */ + } #ifndef SQLITE_OMIT_VIRTUALTABLE if( pSrc->tabFlags & TF_Virtual ){ return 0; /* tab2 must not be a virtual table */ @@ -93682,7 +94784,10 @@ static int xferOptimization( iSrc = pParse->nTab++; iDest = pParse->nTab++; regAutoinc = autoIncBegin(pParse, iDbDest, pDest); + regData = sqlite3GetTempReg(pParse); + regRowid = sqlite3GetTempReg(pParse); sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite); + assert( HasRowid(pDest) || destHasUniqueIdx ); if( (pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */ || destHasUniqueIdx /* (2) */ || (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */ @@ -93704,45 +94809,43 @@ static int xferOptimization( addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0); emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0); sqlite3VdbeJumpHere(v, addr1); - }else{ - emptyDestTest = 0; } - sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead); - emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); - regData = sqlite3GetTempReg(pParse); - regRowid = sqlite3GetTempReg(pParse); - if( pDest->iPKey>=0 ){ - addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); - addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid); - sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_PRIMARYKEY, - onError, "PRIMARY KEY must be unique", P4_STATIC); - sqlite3VdbeJumpHere(v, addr2); - autoIncStep(pParse, regAutoinc, regRowid); - }else if( pDest->pIndex==0 ){ - addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid); + if( HasRowid(pSrc) ){ + sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead); + emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); + if( pDest->iPKey>=0 ){ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid); + sqlite3RowidConstraint(pParse, onError, pDest); + sqlite3VdbeJumpHere(v, addr2); + autoIncStep(pParse, regAutoinc, regRowid); + }else if( pDest->pIndex==0 ){ + addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid); + }else{ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + assert( (pDest->tabFlags & TF_Autoincrement)==0 ); + } + sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); + sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); + sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); + sqlite3VdbeChangeP4(v, -1, pDest->zName, 0); + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); }else{ - addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); - assert( (pDest->tabFlags & TF_Autoincrement)==0 ); + sqlite3TableLock(pParse, iDbDest, pDest->tnum, 1, pDest->zName); + sqlite3TableLock(pParse, iDbSrc, pSrc->tnum, 0, pSrc->zName); } - sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); - sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); - sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND); - sqlite3VdbeChangeP4(v, -1, pDest->zName, 0); - sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){ if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; } assert( pSrcIdx ); - sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); - sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); - pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx); - sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc, - (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeAddOp3(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc); + sqlite3VdbeSetP4KeyInfo(pParse, pSrcIdx); VdbeComment((v, "%s", pSrcIdx->zName)); - pKey = sqlite3IndexKeyinfo(pParse, pDestIdx); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest, - (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeAddOp3(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest); + sqlite3VdbeSetP4KeyInfo(pParse, pDestIdx); sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR); VdbeComment((v, "%s", pDestIdx->zName)); addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); @@ -93750,12 +94853,12 @@ static int xferOptimization( sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1); sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); } sqlite3VdbeJumpHere(v, emptySrcTest); sqlite3ReleaseTempReg(pParse, regRowid); sqlite3ReleaseTempReg(pParse, regData); - sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); - sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); if( emptyDestTest ){ sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0); sqlite3VdbeJumpHere(v, emptyDestTest); @@ -95257,11 +96360,13 @@ static const struct sPragmaNames { /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_AUTOMATIC_INDEX) { /* zName: */ "automatic_index", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_AutoIndex }, +#endif #endif { /* zName: */ "busy_timeout", /* ePragTyp: */ PragTyp_BUSY_TIMEOUT, @@ -95273,18 +96378,22 @@ static const struct sPragmaNames { /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "cache_spill", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_CacheSpill }, +#endif { /* zName: */ "case_sensitive_like", /* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE, /* ePragFlag: */ 0, /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "checkpoint_fullfsync", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_CkptFullFSync }, +#endif #if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) { /* zName: */ "collation_list", /* ePragTyp: */ PragTyp_COLLATION_LIST, @@ -95297,10 +96406,12 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "count_changes", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_CountRows }, +#endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN { /* zName: */ "data_store_directory", /* ePragTyp: */ PragTyp_DATA_STORE_DIRECTORY, @@ -95319,16 +96430,20 @@ static const struct sPragmaNames { /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) { /* zName: */ "defer_foreign_keys", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_DeferFKs }, #endif +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "empty_result_callbacks", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_NullCallback }, +#endif #if !defined(SQLITE_OMIT_UTF16) { /* zName: */ "encoding", /* ePragTyp: */ PragTyp_ENCODING, @@ -95347,18 +96462,21 @@ static const struct sPragmaNames { /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) { /* zName: */ "foreign_keys", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_ForeignKeys }, #endif +#endif #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) { /* zName: */ "freelist_count", /* ePragTyp: */ PragTyp_HEADER_VALUE, /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "full_column_names", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, @@ -95367,6 +96485,7 @@ static const struct sPragmaNames { /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_FullFSync }, +#endif #if defined(SQLITE_HAS_CODEC) { /* zName: */ "hexkey", /* ePragTyp: */ PragTyp_HEXKEY, @@ -95377,12 +96496,14 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_CHECK) { /* zName: */ "ignore_check_constraints", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_IgnoreChecks }, #endif +#endif #if !defined(SQLITE_OMIT_AUTOVACUUM) { /* zName: */ "incremental_vacuum", /* ePragTyp: */ PragTyp_INCREMENTAL_VACUUM, @@ -95421,10 +96542,12 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "legacy_file_format", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_LegacyFileFmt }, +#endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE { /* zName: */ "lock_proxy_file", /* ePragTyp: */ PragTyp_LOCK_PROXY_FILE, @@ -95465,16 +96588,19 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "query_only", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_QueryOnly }, +#endif #if !defined(SQLITE_OMIT_INTEGRITY_CHECK) { /* zName: */ "quick_check", /* ePragTyp: */ PragTyp_INTEGRITY_CHECK, /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "read_uncommitted", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, @@ -95483,16 +96609,19 @@ static const struct sPragmaNames { /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_RecTriggers }, +#endif #if defined(SQLITE_HAS_CODEC) { /* zName: */ "rekey", /* ePragTyp: */ PragTyp_REKEY, /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "reverse_unordered_selects", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_ReverseOrder }, +#endif #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) { /* zName: */ "schema_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, @@ -95505,10 +96634,12 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "short_column_names", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_ShortColNames }, +#endif { /* zName: */ "shrink_memory", /* ePragTyp: */ PragTyp_SHRINK_MEMORY, /* ePragFlag: */ 0, @@ -95517,12 +96648,14 @@ static const struct sPragmaNames { /* ePragTyp: */ PragTyp_SOFT_HEAP_LIMIT, /* ePragFlag: */ 0, /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if defined(SQLITE_DEBUG) { /* zName: */ "sql_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_SqlTrace }, #endif +#endif #if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) { /* zName: */ "stats", /* ePragTyp: */ PragTyp_STATS, @@ -95557,6 +96690,7 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if defined(SQLITE_DEBUG) { /* zName: */ "vdbe_addoptrace", /* ePragTyp: */ PragTyp_FLAG, @@ -95566,6 +96700,10 @@ static const struct sPragmaNames { /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace }, + { /* zName: */ "vdbe_eqp", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlag: */ 0, + /* iArg: */ SQLITE_VdbeEQP }, { /* zName: */ "vdbe_listing", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, @@ -95575,6 +96713,7 @@ static const struct sPragmaNames { /* ePragFlag: */ 0, /* iArg: */ SQLITE_VdbeTrace }, #endif +#endif #if !defined(SQLITE_OMIT_WAL) { /* zName: */ "wal_autocheckpoint", /* ePragTyp: */ PragTyp_WAL_AUTOCHECKPOINT, @@ -95585,12 +96724,14 @@ static const struct sPragmaNames { /* ePragFlag: */ PragFlag_NeedSchema, /* iArg: */ 0 }, #endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) { /* zName: */ "writable_schema", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlag: */ 0, /* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode }, +#endif }; -/* Number of pragmas: 56 on by default, 68 total. */ +/* Number of pragmas: 56 on by default, 69 total. */ /* End of the automatically generated pragma table. ***************************************************************************/ @@ -96554,8 +97695,7 @@ SQLITE_PRIVATE void sqlite3Pragma( int i, k; int nHidden = 0; Column *pCol; - Index *pPk; - for(pPk=pTab->pIndex; pPk && pPk->autoIndex!=2; pPk=pPk->pNext){} + Index *pPk = sqlite3PrimaryKeyIndex(pTab); sqlite3VdbeSetNumCols(v, 6); pParse->nMem = 6; sqlite3CodeVerifySchema(pParse, iDb); @@ -96638,8 +97778,8 @@ SQLITE_PRIVATE void sqlite3Pragma( sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC); sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC); sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC); - for(i=0; inColumn; i++){ - int cnum = pIdx->aiColumn[i]; + for(i=0; inKeyCol; i++){ + i16 cnum = pIdx->aiColumn[i]; sqlite3VdbeAddOp2(v, OP_Integer, i, 1); sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2); assert( pTab->nCol>cnum ); @@ -96810,9 +97950,8 @@ SQLITE_PRIVATE void sqlite3Pragma( if( pIdx==0 ){ sqlite3OpenTable(pParse, i, iDb, pParent, OP_OpenRead); }else{ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); sqlite3VdbeAddOp3(v, OP_OpenRead, i, pIdx->tnum, iDb); - sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); } }else{ k = 0; @@ -96976,16 +98115,20 @@ SQLITE_PRIVATE void sqlite3Pragma( for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ Table *pTab = sqliteHashData(x); Index *pIdx; - sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt); - cnt++; + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt); + VdbeComment((v, "%s", pTab->zName)); + cnt++; + } for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt); + VdbeComment((v, "%s", pIdx->zName)); cnt++; } } /* Make sure sufficient number of registers have been allocated */ - pParse->nMem = MAX( pParse->nMem, cnt+7 ); + pParse->nMem = MAX( pParse->nMem, cnt+8 ); /* Do the b-tree integrity checks */ sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1); @@ -97003,58 +98146,63 @@ SQLITE_PRIVATE void sqlite3Pragma( */ for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){ Table *pTab = sqliteHashData(x); - Index *pIdx; + Index *pIdx, *pPk; + Index *pPrior = 0; int loopTop; + int iDataCur, iIdxCur; + int r1 = -1; if( pTab->pIndex==0 ) continue; + pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */ sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); sqlite3VdbeJumpHere(v, addr); sqlite3ExprCacheClear(pParse); - sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead); + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, + 1, 0, &iDataCur, &iIdxCur); + sqlite3VdbeAddOp2(v, OP_Integer, 0, 7); for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - sqlite3VdbeAddOp2(v, OP_Integer, 0, 7+j); /* index entries counter */ + sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */ } - pParse->nMem = MAX(pParse->nMem, 7+j); - loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0) + 1; + pParse->nMem = MAX(pParse->nMem, 8+j); + sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); + loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1); for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - int jmp2, jmp3; - int r1; - static const VdbeOpList idxErr[] = { - { OP_AddImm, 1, -1, 0}, - { OP_String8, 0, 3, 0}, /* 1 */ - { OP_Rowid, 1, 4, 0}, - { OP_String8, 0, 5, 0}, /* 3 */ - { OP_String8, 0, 6, 0}, /* 4 */ - { OP_Concat, 4, 3, 3}, - { OP_Concat, 5, 3, 3}, - { OP_Concat, 6, 3, 3}, - { OP_ResultRow, 3, 1, 0}, - { OP_IfPos, 1, 0, 0}, /* 9 */ - { OP_Halt, 0, 0, 0}, - }; - r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0, &jmp3); - sqlite3VdbeAddOp2(v, OP_AddImm, 7+j, 1); /* increment entry count */ - jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1); - addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr); - sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC); - sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC); - sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT); - sqlite3VdbeJumpHere(v, addr+9); + int jmp2, jmp3, jmp4; + if( pPk==pIdx ) continue; + r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3, + pPrior, r1); + pPrior = pIdx; + sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1); /* increment entry count */ + jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, 0, r1, + pIdx->nColumn); + sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */ + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, "row ", P4_STATIC); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, " missing from index ", + P4_STATIC); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); + sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, pIdx->zName, P4_TRANSIENT); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); + sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1); + jmp4 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); + sqlite3VdbeAddOp0(v, OP_Halt); + sqlite3VdbeJumpHere(v, jmp4); sqlite3VdbeJumpHere(v, jmp2); sqlite3VdbeResolveLabel(v, jmp3); } - sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop); + sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); sqlite3VdbeJumpHere(v, loopTop-1); #ifndef SQLITE_OMIT_BTREECOUNT sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, "wrong # of entries in index ", P4_STATIC); for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + if( pPk==pIdx ) continue; addr = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr+2); sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeAddOp2(v, OP_Count, j+2, 3); - sqlite3VdbeAddOp3(v, OP_Eq, 7+j, addr+8, 3); + sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3); + sqlite3VdbeAddOp3(v, OP_Eq, 8+j, addr+8, 3); sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pIdx->zName, P4_TRANSIENT); sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7); @@ -97948,6 +99096,17 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ return i; } +/* +** Free all memory allocations in the pParse object +*/ +SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){ + if( pParse ){ + sqlite3 *db = pParse->db; + sqlite3DbFree(db, pParse->aLabel); + sqlite3ExprListDelete(db, pParse->pConstExpr); + } +} + /* ** Compile the UTF-8 encoded SQL statement zSql into a statement handle. */ @@ -98105,6 +99264,7 @@ static int sqlite3Prepare( end_prepare: + sqlite3ParserReset(pParse); sqlite3StackFree(db, pParse); rc = sqlite3ApiExit(db, rc); assert( (rc&db->errMask)==rc ); @@ -98328,6 +99488,7 @@ static void clearSelect(sqlite3 *db, Select *p){ sqlite3SelectDelete(db, p->pPrior); sqlite3ExprDelete(db, p->pLimit); sqlite3ExprDelete(db, p->pOffset); + sqlite3WithDelete(db, p->pWith); } /* @@ -98760,13 +99921,13 @@ static void pushOntoSorter( */ static void codeOffset( Vdbe *v, /* Generate code into this VM */ - Select *p, /* The SELECT statement being coded */ + int iOffset, /* Register holding the offset counter */ int iContinue /* Jump here to skip the current record */ ){ - if( p->iOffset && iContinue!=0 ){ + if( iOffset>0 && iContinue!=0 ){ int addr; - sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1); - addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset); + sqlite3VdbeAddOp2(v, OP_AddImm, iOffset, -1); + addr = sqlite3VdbeAddOp1(v, OP_IfNeg, iOffset); sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue); VdbeComment((v, "skip OFFSET records")); sqlite3VdbeJumpHere(v, addr); @@ -98841,17 +100002,16 @@ struct DistinctCtx { ** This routine generates the code for the inside of the inner loop ** of a SELECT. ** -** If srcTab and nColumn are both zero, then the pEList expressions -** are evaluated in order to get the data for this row. If nColumn>0 -** then data is pulled from srcTab and pEList is used only to get the -** datatypes for each column. +** If srcTab is negative, then the pEList expressions +** are evaluated in order to get the data for this row. If srcTab is +** zero or more, then data is pulled from srcTab and pEList is used only +** to get number columns and the datatype for each column. */ static void selectInnerLoop( Parse *pParse, /* The parser context */ Select *p, /* The complete select statement being coded */ ExprList *pEList, /* List of values being extracted */ int srcTab, /* Pull data from this table */ - int nColumn, /* Number of columns in the source table */ ExprList *pOrderBy, /* If not NULL, sort results using this key */ DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */ SelectDest *pDest, /* How to dispose of the results */ @@ -98867,20 +100027,15 @@ static void selectInnerLoop( int nResultCol; /* Number of result columns */ assert( v ); - if( NEVER(v==0) ) return; assert( pEList!=0 ); hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP; if( pOrderBy==0 && !hasDistinct ){ - codeOffset(v, p, iContinue); + codeOffset(v, p->iOffset, iContinue); } /* Pull the requested columns. */ - if( nColumn>0 ){ - nResultCol = nColumn; - }else{ - nResultCol = pEList->nExpr; - } + nResultCol = pEList->nExpr; if( pDest->iSdst==0 ){ pDest->iSdst = pParse->nMem+1; pDest->nSdst = nResultCol; @@ -98889,26 +100044,24 @@ static void selectInnerLoop( assert( pDest->nSdst==nResultCol ); } regResult = pDest->iSdst; - if( nColumn>0 ){ - for(i=0; i=0 ){ + for(i=0; ia[i].zName)); } }else if( eDest!=SRT_Exists ){ /* If the destination is an EXISTS(...) expression, the actual ** values returned by the SELECT are not required. */ - sqlite3ExprCacheClear(pParse); - sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Output); + sqlite3ExprCodeExprList(pParse, pEList, regResult, + (eDest==SRT_Output)?SQLITE_ECEL_DUP:0); } - nColumn = nResultCol; /* If the DISTINCT keyword was present on the SELECT statement ** and this row has been seen before, then do not make this row ** part of the result. */ if( hasDistinct ){ - assert( pEList!=0 ); - assert( pEList->nExpr==nColumn ); switch( pDistinct->eTnctType ){ case WHERE_DISTINCT_ORDERED: { VdbeOp *pOp; /* No longer required OpenEphemeral instr. */ @@ -98917,7 +100070,7 @@ static void selectInnerLoop( /* Allocate space for the previous row */ regPrev = pParse->nMem+1; - pParse->nMem += nColumn; + pParse->nMem += nResultCol; /* Change the OP_OpenEphemeral coded earlier to an OP_Null ** sets the MEM_Cleared bit on the first register of the @@ -98931,10 +100084,10 @@ static void selectInnerLoop( pOp->p1 = 1; pOp->p2 = regPrev; - iJump = sqlite3VdbeCurrentAddr(v) + nColumn; - for(i=0; ia[i].pExpr); - if( ieTnctType==WHERE_DISTINCT_UNORDERED ); - codeDistinct(pParse, pDistinct->tabTnct, iContinue, nColumn, regResult); + codeDistinct(pParse, pDistinct->tabTnct, iContinue, nResultCol, regResult); break; } } if( pOrderBy==0 ){ - codeOffset(v, p, iContinue); + codeOffset(v, p->iOffset, iContinue); } } @@ -98971,7 +100124,7 @@ static void selectInnerLoop( case SRT_Union: { int r1; r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1); sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); sqlite3ReleaseTempReg(pParse, r1); break; @@ -98982,19 +100135,33 @@ static void selectInnerLoop( ** the temporary table iParm. */ case SRT_Except: { - sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn); + sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nResultCol); break; } -#endif +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ /* Store the result as data using a unique key. */ + case SRT_DistTable: case SRT_Table: case SRT_EphemTab: { int r1 = sqlite3GetTempReg(pParse); testcase( eDest==SRT_Table ); testcase( eDest==SRT_EphemTab ); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1); +#ifndef SQLITE_OMIT_CTE + if( eDest==SRT_DistTable ){ + /* If the destination is DistTable, then cursor (iParm+1) is open + ** on an ephemeral index. If the current row is already present + ** in the index, do not write it to the output. If not, add the + ** current row to the index and proceed with writing it to the + ** output table as well. */ + int addr = sqlite3VdbeCurrentAddr(v) + 4; + sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, addr, r1, 0); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r1); + assert( pOrderBy==0 ); + } +#endif if( pOrderBy ){ pushOntoSorter(pParse, pOrderBy, p, r1); }else{ @@ -99014,7 +100181,7 @@ static void selectInnerLoop( ** item into the set table with bogus data. */ case SRT_Set: { - assert( nColumn==1 ); + assert( nResultCol==1 ); pDest->affSdst = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affSdst); if( pOrderBy ){ @@ -99046,7 +100213,7 @@ static void selectInnerLoop( ** of the scan loop. */ case SRT_Mem: { - assert( nColumn==1 ); + assert( nResultCol==1 ); if( pOrderBy ){ pushOntoSorter(pParse, pOrderBy, p, regResult); }else{ @@ -99067,18 +100234,64 @@ static void selectInnerLoop( testcase( eDest==SRT_Output ); if( pOrderBy ){ int r1 = sqlite3GetTempReg(pParse); - sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1); pushOntoSorter(pParse, pOrderBy, p, r1); sqlite3ReleaseTempReg(pParse, r1); }else if( eDest==SRT_Coroutine ){ sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); }else{ - sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn); - sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn); + sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol); + sqlite3ExprCacheAffinityChange(pParse, regResult, nResultCol); } break; } +#ifndef SQLITE_OMIT_CTE + /* Write the results into a priority queue that is order according to + ** pDest->pOrderBy (in pSO). pDest->iSDParm (in iParm) is the cursor for an + ** index with pSO->nExpr+2 columns. Build a key using pSO for the first + ** pSO->nExpr columns, then make sure all keys are unique by adding a + ** final OP_Sequence column. The last column is the record as a blob. + */ + case SRT_DistQueue: + case SRT_Queue: { + int nKey; + int r1, r2, r3; + int addrTest = 0; + ExprList *pSO; + pSO = pDest->pOrderBy; + assert( pSO ); + nKey = pSO->nExpr; + r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3GetTempRange(pParse, nKey+2); + r3 = r2+nKey+1; + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r3); + if( eDest==SRT_DistQueue ){ + /* If the destination is DistQueue, then cursor (iParm+1) is open + ** on a second ephemeral index that holds all values every previously + ** added to the queue. Only add this new value if it has never before + ** been added */ + addrTest = sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, 0, r3, 0); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r3); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + } + for(i=0; ia[i].u.x.iOrderByCol - 1, + r2+i); + } + sqlite3VdbeAddOp2(v, OP_Sequence, iParm, r2+nKey); + sqlite3VdbeAddOp3(v, OP_MakeRecord, r2, nKey+2, r1); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1); + if( addrTest ) sqlite3VdbeJumpHere(v, addrTest); + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ReleaseTempRange(pParse, r2, nKey+2); + break; + } +#endif /* SQLITE_OMIT_CTE */ + + + #if !defined(SQLITE_OMIT_TRIGGER) /* Discard the results. This is used for SELECT statements inside ** the body of a TRIGGER. The purpose of such selects is to call @@ -99102,24 +100315,57 @@ static void selectInnerLoop( } /* -** Allocate a KeyInfo object sufficient for an index of N columns. -** -** Actually, always allocate one extra column for the rowid at the end -** of the index. So the KeyInfo returned will have space sufficient for -** N+1 columns. +** Allocate a KeyInfo object sufficient for an index of N key columns and +** X extra columns. */ -SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N){ - KeyInfo *p = sqlite3DbMallocZero(db, - sizeof(KeyInfo) + (N+1)*(sizeof(CollSeq*)+1)); +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){ + KeyInfo *p = sqlite3DbMallocZero(0, + sizeof(KeyInfo) + (N+X)*(sizeof(CollSeq*)+1)); if( p ){ - p->aSortOrder = (u8*)&p->aColl[N+1]; + p->aSortOrder = (u8*)&p->aColl[N+X]; p->nField = (u16)N; + p->nXField = (u16)X; p->enc = ENC(db); p->db = db; + p->nRef = 1; + }else{ + db->mallocFailed = 1; } return p; } +/* +** Deallocate a KeyInfo object +*/ +SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ + if( p ){ + assert( p->nRef>0 ); + p->nRef--; + if( p->nRef==0 ) sqlite3DbFree(0, p); + } +} + +/* +** Make a new pointer to a KeyInfo object +*/ +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoRef(KeyInfo *p){ + if( p ){ + assert( p->nRef>0 ); + p->nRef++; + } + return p; +} + +#ifdef SQLITE_DEBUG +/* +** Return TRUE if a KeyInfo object can be change. The KeyInfo object +** can only be changed if this is just a single reference to the object. +** +** This routine is used only inside of assert() statements. +*/ +SQLITE_PRIVATE int sqlite3KeyInfoIsWriteable(KeyInfo *p){ return p->nRef==1; } +#endif /* SQLITE_DEBUG */ + /* ** Given an expression list, generate a KeyInfo structure that records ** the collating sequence for each expression in that expression list. @@ -99132,10 +100378,9 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N){ ** ** Space to hold the KeyInfo structure is obtain from malloc. The calling ** function is responsible for seeing that this structure is eventually -** freed. Add the KeyInfo structure to the P4 field of an opcode using -** P4_KEYINFO_HANDOFF is the usual way of dealing with this. +** freed. */ -static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){ +static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList, int nExtra){ int nExpr; KeyInfo *pInfo; struct ExprList_item *pItem; @@ -99143,8 +100388,9 @@ static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){ int i; nExpr = pList->nExpr; - pInfo = sqlite3KeyInfoAlloc(db, nExpr); + pInfo = sqlite3KeyInfoAlloc(db, nExpr+nExtra, 1); if( pInfo ){ + assert( sqlite3KeyInfoIsWriteable(pInfo) ); for(i=0, pItem=pList->a; ipExpr); @@ -99283,13 +100529,13 @@ static void generateSortTail( int ptab2 = pParse->nTab++; sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, pOrderBy->nExpr+2); addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); - codeOffset(v, p, addrContinue); + codeOffset(v, p->iOffset, addrContinue); sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut); sqlite3VdbeAddOp3(v, OP_Column, ptab2, pOrderBy->nExpr+1, regRow); sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE); }else{ addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); - codeOffset(v, p, addrContinue); + codeOffset(v, p->iOffset, addrContinue); sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr+1, regRow); } switch( eDest ){ @@ -99468,7 +100714,7 @@ static const char *columnTypeImpl( sNC.pParse = pNC->pParse; zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol, &estWidth); } - }else if( ALWAYS(pTab->pSchema) ){ + }else if( pTab->pSchema ){ /* A real table */ assert( !pS ); if( iCol<0 ) iCol = pTab->iPKey; @@ -99629,8 +100875,9 @@ static void generateColumnNames( sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT); } }else{ - sqlite3VdbeSetColName(v, i, COLNAME_NAME, - sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); + const char *z = pEList->a[i].zSpan; + z = z==0 ? sqlite3MPrintf(db, "column%d", i+1) : sqlite3DbStrDup(db, z); + sqlite3VdbeSetColName(v, i, COLNAME_NAME, z, SQLITE_DYNAMIC); } } generateColumnTypes(pParse, pTabList, pEList); @@ -99830,7 +101077,7 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ Vdbe *v = pParse->pVdbe; if( v==0 ){ - v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db); + v = pParse->pVdbe = sqlite3VdbeCreate(pParse); #ifndef SQLITE_OMIT_TRACE if( v ){ sqlite3VdbeAddOp0(v, OP_Trace); @@ -99852,8 +101099,13 @@ SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ ** ** This routine changes the values of iLimit and iOffset only if ** a limit or offset is defined by pLimit and pOffset. iLimit and -** iOffset should have been preset to appropriate default values -** (usually but not always -1) prior to calling this routine. +** iOffset should have been preset to appropriate default values (zero) +** prior to calling this routine. +** +** The iOffset register (if it exists) is initialized to the value +** of the OFFSET. The iLimit register is initialized to LIMIT. Register +** iOffset+1 is initialized to LIMIT+OFFSET. +** ** Only if pLimit!=0 or pOffset!=0 do the limit registers get ** redefined. The UNION ALL operator uses this property to force ** the reuse of the same limit and offset registers across multiple @@ -99877,7 +101129,7 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ if( p->pLimit ){ p->iLimit = iLimit = ++pParse->nMem; v = sqlite3GetVdbe(pParse); - if( NEVER(v==0) ) return; /* VDBE should have already been allocated */ + assert( v!=0 ); if( sqlite3ExprIsInteger(p->pLimit, &n) ){ sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit); VdbeComment((v, "LIMIT counter")); @@ -99932,9 +101184,204 @@ static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ } return pRet; } -#endif /* SQLITE_OMIT_COMPOUND_SELECT */ -/* Forward reference */ +/* +** The select statement passed as the second parameter is a compound SELECT +** with an ORDER BY clause. This function allocates and returns a KeyInfo +** structure suitable for implementing the ORDER BY. +** +** Space to hold the KeyInfo structure is obtained from malloc. The calling +** function is responsible for ensuring that this structure is eventually +** freed. +*/ +static KeyInfo *multiSelectOrderByKeyInfo(Parse *pParse, Select *p, int nExtra){ + ExprList *pOrderBy = p->pOrderBy; + int nOrderBy = p->pOrderBy->nExpr; + sqlite3 *db = pParse->db; + KeyInfo *pRet = sqlite3KeyInfoAlloc(db, nOrderBy+nExtra, 1); + if( pRet ){ + int i; + for(i=0; ia[i]; + Expr *pTerm = pItem->pExpr; + CollSeq *pColl; + + if( pTerm->flags & EP_Collate ){ + pColl = sqlite3ExprCollSeq(pParse, pTerm); + }else{ + pColl = multiSelectCollSeq(pParse, p, pItem->u.x.iOrderByCol-1); + if( pColl==0 ) pColl = db->pDfltColl; + pOrderBy->a[i].pExpr = + sqlite3ExprAddCollateString(pParse, pTerm, pColl->zName); + } + assert( sqlite3KeyInfoIsWriteable(pRet) ); + pRet->aColl[i] = pColl; + pRet->aSortOrder[i] = pOrderBy->a[i].sortOrder; + } + } + + return pRet; +} + +#ifndef SQLITE_OMIT_CTE +/* +** This routine generates VDBE code to compute the content of a WITH RECURSIVE +** query of the form: +** +** AS ( UNION [ALL] ) +** \___________/ \_______________/ +** p->pPrior p +** +** +** There is exactly one reference to the recursive-table in the FROM clause +** of recursive-query, marked with the SrcList->a[].isRecursive flag. +** +** The setup-query runs once to generate an initial set of rows that go +** into a Queue table. Rows are extracted from the Queue table one by +** one. Each row extracted from Queue is output to pDest. Then the single +** extracted row (now in the iCurrent table) becomes the content of the +** recursive-table for a recursive-query run. The output of the recursive-query +** is added back into the Queue table. Then another row is extracted from Queue +** and the iteration continues until the Queue table is empty. +** +** If the compound query operator is UNION then no duplicate rows are ever +** inserted into the Queue table. The iDistinct table keeps a copy of all rows +** that have ever been inserted into Queue and causes duplicates to be +** discarded. If the operator is UNION ALL, then duplicates are allowed. +** +** If the query has an ORDER BY, then entries in the Queue table are kept in +** ORDER BY order and the first entry is extracted for each cycle. Without +** an ORDER BY, the Queue table is just a FIFO. +** +** If a LIMIT clause is provided, then the iteration stops after LIMIT rows +** have been output to pDest. A LIMIT of zero means to output no rows and a +** negative LIMIT means to output all rows. If there is also an OFFSET clause +** with a positive value, then the first OFFSET outputs are discarded rather +** than being sent to pDest. The LIMIT count does not begin until after OFFSET +** rows have been skipped. +*/ +static void generateWithRecursiveQuery( + Parse *pParse, /* Parsing context */ + Select *p, /* The recursive SELECT to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + SrcList *pSrc = p->pSrc; /* The FROM clause of the recursive query */ + int nCol = p->pEList->nExpr; /* Number of columns in the recursive table */ + Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */ + Select *pSetup = p->pPrior; /* The setup query */ + int addrTop; /* Top of the loop */ + int addrCont, addrBreak; /* CONTINUE and BREAK addresses */ + int iCurrent = 0; /* The Current table */ + int regCurrent; /* Register holding Current table */ + int iQueue; /* The Queue table */ + int iDistinct = 0; /* To ensure unique results if UNION */ + int eDest = SRT_Table; /* How to write to Queue */ + SelectDest destQueue; /* SelectDest targetting the Queue table */ + int i; /* Loop counter */ + int rc; /* Result code */ + ExprList *pOrderBy; /* The ORDER BY clause */ + Expr *pLimit, *pOffset; /* Saved LIMIT and OFFSET */ + int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */ + + /* Obtain authorization to do a recursive query */ + if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return; + + /* Process the LIMIT and OFFSET clauses, if they exist */ + addrBreak = sqlite3VdbeMakeLabel(v); + computeLimitRegisters(pParse, p, addrBreak); + pLimit = p->pLimit; + pOffset = p->pOffset; + regLimit = p->iLimit; + regOffset = p->iOffset; + p->pLimit = p->pOffset = 0; + p->iLimit = p->iOffset = 0; + pOrderBy = p->pOrderBy; + + /* Locate the cursor number of the Current table */ + for(i=0; ALWAYS(inSrc); i++){ + if( pSrc->a[i].isRecursive ){ + iCurrent = pSrc->a[i].iCursor; + break; + } + } + + /* Allocate cursors numbers for Queue and Distinct. The cursor number for + ** the Distinct table must be exactly one greater than Queue in order + ** for the SRT_DistTable and SRT_DistQueue destinations to work. */ + iQueue = pParse->nTab++; + if( p->op==TK_UNION ){ + eDest = pOrderBy ? SRT_DistQueue : SRT_DistTable; + iDistinct = pParse->nTab++; + }else{ + eDest = pOrderBy ? SRT_Queue : SRT_Table; + } + sqlite3SelectDestInit(&destQueue, eDest, iQueue); + + /* Allocate cursors for Current, Queue, and Distinct. */ + regCurrent = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_OpenPseudo, iCurrent, regCurrent, nCol); + if( pOrderBy ){ + KeyInfo *pKeyInfo = multiSelectOrderByKeyInfo(pParse, p, 1); + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, iQueue, pOrderBy->nExpr+2, 0, + (char*)pKeyInfo, P4_KEYINFO); + destQueue.pOrderBy = pOrderBy; + }else{ + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iQueue, nCol); + } + VdbeComment((v, "Queue table")); + if( iDistinct ){ + p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iDistinct, 0); + p->selFlags |= SF_UsesEphemeral; + } + + /* Detach the ORDER BY clause from the compound SELECT */ + p->pOrderBy = 0; + + /* Store the results of the setup-query in Queue. */ + rc = sqlite3Select(pParse, pSetup, &destQueue); + if( rc ) goto end_of_recursive_query; + + /* Find the next row in the Queue and output that row */ + addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iQueue, addrBreak); + + /* Transfer the next row in Queue over to Current */ + sqlite3VdbeAddOp1(v, OP_NullRow, iCurrent); /* To reset column cache */ + if( pOrderBy ){ + sqlite3VdbeAddOp3(v, OP_Column, iQueue, pOrderBy->nExpr+1, regCurrent); + }else{ + sqlite3VdbeAddOp2(v, OP_RowData, iQueue, regCurrent); + } + sqlite3VdbeAddOp1(v, OP_Delete, iQueue); + + /* Output the single row in Current */ + addrCont = sqlite3VdbeMakeLabel(v); + codeOffset(v, regOffset, addrCont); + selectInnerLoop(pParse, p, p->pEList, iCurrent, + 0, 0, pDest, addrCont, addrBreak); + if( regLimit ) sqlite3VdbeAddOp3(v, OP_IfZero, regLimit, addrBreak, -1); + sqlite3VdbeResolveLabel(v, addrCont); + + /* Execute the recursive SELECT taking the single row in Current as + ** the value for the recursive-table. Store the results in the Queue. + */ + p->pPrior = 0; + sqlite3Select(pParse, p, &destQueue); + assert( p->pPrior==0 ); + p->pPrior = pSetup; + + /* Keep running the loop until the Queue is empty */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop); + sqlite3VdbeResolveLabel(v, addrBreak); + +end_of_recursive_query: + p->pOrderBy = pOrderBy; + p->pLimit = pLimit; + p->pOffset = pOffset; + return; +} +#endif /* SQLITE_OMIT_CTE */ + +/* Forward references */ static int multiSelectOrderBy( Parse *pParse, /* Parsing context */ Select *p, /* The right-most of SELECTs to be coded */ @@ -99942,7 +101389,6 @@ static int multiSelectOrderBy( ); -#ifndef SQLITE_OMIT_COMPOUND_SELECT /* ** This routine is called to process a compound query form from ** two or more separate queries using UNION, UNION ALL, EXCEPT, or @@ -99986,14 +101432,15 @@ static int multiSelect( Select *pDelete = 0; /* Chain of simple selects to delete */ sqlite3 *db; /* Database connection */ #ifndef SQLITE_OMIT_EXPLAIN - int iSub1; /* EQP id of left-hand query */ - int iSub2; /* EQP id of right-hand query */ + int iSub1 = 0; /* EQP id of left-hand query */ + int iSub2 = 0; /* EQP id of right-hand query */ #endif /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. */ assert( p && p->pPrior ); /* Calling function guarantees this much */ + assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION ); db = pParse->db; pPrior = p->pPrior; assert( pPrior->pRightmost!=pPrior ); @@ -100039,11 +101486,17 @@ static int multiSelect( goto multi_select_end; } +#ifndef SQLITE_OMIT_CTE + if( p->selFlags & SF_Recursive ){ + generateWithRecursiveQuery(pParse, p, &dest); + }else +#endif + /* Compound SELECTs that have an ORDER BY clause are handled separately. */ if( p->pOrderBy ){ return multiSelectOrderBy(pParse, p, pDest); - } + }else /* Generate code for the left and right SELECT statements. */ @@ -100178,7 +101631,7 @@ static int multiSelect( computeLimitRegisters(pParse, p, iBreak); sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); iStart = sqlite3VdbeCurrentAddr(v); - selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr, + selectInnerLoop(pParse, p, p->pEList, unionTab, 0, 0, &dest, iCont, iBreak); sqlite3VdbeResolveLabel(v, iCont); sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); @@ -100256,7 +101709,7 @@ static int multiSelect( iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1); sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); sqlite3ReleaseTempReg(pParse, r1); - selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr, + selectInnerLoop(pParse, p, p->pEList, tab1, 0, 0, &dest, iCont, iBreak); sqlite3VdbeResolveLabel(v, iCont); sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); @@ -100287,7 +101740,7 @@ static int multiSelect( assert( p->pRightmost==p ); nCol = p->pEList->nExpr; - pKeyInfo = sqlite3KeyInfoAlloc(db, nCol); + pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1); if( !pKeyInfo ){ rc = SQLITE_NOMEM; goto multi_select_end; @@ -100309,11 +101762,12 @@ static int multiSelect( break; } sqlite3VdbeChangeP2(v, addr, nCol); - sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO); + sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo), + P4_KEYINFO); pLoop->addrOpenEphm[i] = -1; } } - sqlite3DbFree(db, pKeyInfo); + sqlite3KeyInfoUnref(pKeyInfo); } multi_select_end: @@ -100352,7 +101806,6 @@ static int generateOutputSubroutine( int regReturn, /* The return address register */ int regPrev, /* Previous result register. No uniqueness if 0 */ KeyInfo *pKeyInfo, /* For comparing with previous entry */ - int p4type, /* The p4 type for pKeyInfo */ int iBreak /* Jump here if we hit the LIMIT */ ){ Vdbe *v = pParse->pVdbe; @@ -100368,7 +101821,7 @@ static int generateOutputSubroutine( int j1, j2; j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iSdst, regPrev+1, pIn->nSdst, - (char*)pKeyInfo, p4type); + (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2); sqlite3VdbeJumpHere(v, j1); sqlite3VdbeAddOp3(v, OP_Copy, pIn->iSdst, regPrev+1, pIn->nSdst-1); @@ -100378,7 +101831,7 @@ static int generateOutputSubroutine( /* Suppress the first OFFSET entries if there is an OFFSET clause */ - codeOffset(v, p, iContinue); + codeOffset(v, p->iOffset, iContinue); switch( pDest->eDest ){ /* Store the result as data using a unique key. @@ -100638,8 +102091,8 @@ static int multiSelectOrderBy( for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){ struct ExprList_item *pItem; for(j=0, pItem=pOrderBy->a; jiOrderByCol>0 ); - if( pItem->iOrderByCol==i ) break; + assert( pItem->u.x.iOrderByCol>0 ); + if( pItem->u.x.iOrderByCol==i ) break; } if( j==nOrderBy ){ Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); @@ -100647,7 +102100,7 @@ static int multiSelectOrderBy( pNew->flags |= EP_IntValue; pNew->u.iValue = i; pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); - if( pOrderBy ) pOrderBy->a[nOrderBy++].iOrderByCol = (u16)i; + if( pOrderBy ) pOrderBy->a[nOrderBy++].u.x.iOrderByCol = (u16)i; } } } @@ -100663,26 +102116,11 @@ static int multiSelectOrderBy( if( aPermute ){ struct ExprList_item *pItem; for(i=0, pItem=pOrderBy->a; iiOrderByCol>0 && pItem->iOrderByCol<=p->pEList->nExpr ); - aPermute[i] = pItem->iOrderByCol - 1; - } - pKeyMerge = sqlite3KeyInfoAlloc(db, nOrderBy); - if( pKeyMerge ){ - for(i=0; ia[i].pExpr; - if( pTerm->flags & EP_Collate ){ - pColl = sqlite3ExprCollSeq(pParse, pTerm); - }else{ - pColl = multiSelectCollSeq(pParse, p, aPermute[i]); - if( pColl==0 ) pColl = db->pDfltColl; - pOrderBy->a[i].pExpr = - sqlite3ExprAddCollateString(pParse, pTerm, pColl->zName); - } - pKeyMerge->aColl[i] = pColl; - pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder; - } + assert( pItem->u.x.iOrderByCol>0 + && pItem->u.x.iOrderByCol<=p->pEList->nExpr ); + aPermute[i] = pItem->u.x.iOrderByCol - 1; } + pKeyMerge = multiSelectOrderByKeyInfo(pParse, p, 1); }else{ pKeyMerge = 0; } @@ -100704,8 +102142,9 @@ static int multiSelectOrderBy( regPrev = pParse->nMem+1; pParse->nMem += nExpr+1; sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev); - pKeyDup = sqlite3KeyInfoAlloc(db, nExpr); + pKeyDup = sqlite3KeyInfoAlloc(db, nExpr, 1); if( pKeyDup ){ + assert( sqlite3KeyInfoIsWriteable(pKeyDup) ); for(i=0; iaColl[i] = multiSelectCollSeq(pParse, p, i); pKeyDup->aSortOrder[i] = 0; @@ -100787,7 +102226,7 @@ static int multiSelectOrderBy( VdbeNoopComment((v, "Output routine for A")); addrOutA = generateOutputSubroutine(pParse, p, &destA, pDest, regOutA, - regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd); + regPrev, pKeyDup, labelEnd); /* Generate a subroutine that outputs the current row of the B ** select as the next output row of the compound select. @@ -100796,8 +102235,9 @@ static int multiSelectOrderBy( VdbeNoopComment((v, "Output routine for B")); addrOutB = generateOutputSubroutine(pParse, p, &destB, pDest, regOutB, - regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd); + regPrev, pKeyDup, labelEnd); } + sqlite3KeyInfoUnref(pKeyDup); /* Generate a subroutine to run when the results from select A ** are exhausted and only data in select B remains. @@ -100876,7 +102316,7 @@ static int multiSelectOrderBy( sqlite3VdbeResolveLabel(v, labelCmpr); sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY); sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy, - (char*)pKeyMerge, P4_KEYINFO_HANDOFF); + (char*)pKeyMerge, P4_KEYINFO); sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE); sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); @@ -101103,6 +102543,14 @@ static void substSelect( ** (21) The subquery does not use LIMIT or the outer query is not ** DISTINCT. (See ticket [752e1646fc]). ** +** (22) The subquery is not a recursive CTE. +** +** (23) The parent is not a recursive CTE, or the sub-query is not a +** compound query. This restriction is because transforming the +** parent to a compound query confuses the code that handles +** recursive queries in multiSelect(). +** +** ** In this routine, the "p" parameter is a pointer to the outer query. ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates. @@ -101174,6 +102622,8 @@ static int flattenSubquery( if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){ return 0; /* Restriction (21) */ } + if( pSub->selFlags & SF_Recursive ) return 0; /* Restriction (22) */ + if( (p->selFlags & SF_Recursive) && pSub->pPrior ) return 0; /* (23) */ /* OBSOLETE COMMENT 1: ** Restriction 3: If the subquery is a join, make sure the subquery is @@ -101241,7 +102691,7 @@ static int flattenSubquery( if( p->pOrderBy ){ int ii; for(ii=0; iipOrderBy->nExpr; ii++){ - if( p->pOrderBy->a[ii].iOrderByCol==0 ) return 0; + if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0; } } } @@ -101655,6 +103105,197 @@ static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){ return WRC_Continue; } +#ifndef SQLITE_OMIT_CTE +/* +** Argument pWith (which may be NULL) points to a linked list of nested +** WITH contexts, from inner to outermost. If the table identified by +** FROM clause element pItem is really a common-table-expression (CTE) +** then return a pointer to the CTE definition for that table. Otherwise +** return NULL. +** +** If a non-NULL value is returned, set *ppContext to point to the With +** object that the returned CTE belongs to. +*/ +static struct Cte *searchWith( + With *pWith, /* Current outermost WITH clause */ + struct SrcList_item *pItem, /* FROM clause element to resolve */ + With **ppContext /* OUT: WITH clause return value belongs to */ +){ + const char *zName; + if( pItem->zDatabase==0 && (zName = pItem->zName)!=0 ){ + With *p; + for(p=pWith; p; p=p->pOuter){ + int i; + for(i=0; inCte; i++){ + if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){ + *ppContext = p; + return &p->a[i]; + } + } + } + } + return 0; +} + +/* The code generator maintains a stack of active WITH clauses +** with the inner-most WITH clause being at the top of the stack. +** +** This routine pushes the WITH clause passed as the second argument +** onto the top of the stack. If argument bFree is true, then this +** WITH clause will never be popped from the stack. In this case it +** should be freed along with the Parse object. In other cases, when +** bFree==0, the With object will be freed along with the SELECT +** statement with which it is associated. +*/ +SQLITE_PRIVATE void sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ + assert( bFree==0 || pParse->pWith==0 ); + if( pWith ){ + pWith->pOuter = pParse->pWith; + pParse->pWith = pWith; + pParse->bFreeWith = bFree; + } +} + +/* +** This function checks if argument pFrom refers to a CTE declared by +** a WITH clause on the stack currently maintained by the parser. And, +** if currently processing a CTE expression, if it is a recursive +** reference to the current CTE. +** +** If pFrom falls into either of the two categories above, pFrom->pTab +** and other fields are populated accordingly. The caller should check +** (pFrom->pTab!=0) to determine whether or not a successful match +** was found. +** +** Whether or not a match is found, SQLITE_OK is returned if no error +** occurs. If an error does occur, an error message is stored in the +** parser and some error code other than SQLITE_OK returned. +*/ +static int withExpand( + Walker *pWalker, + struct SrcList_item *pFrom +){ + Parse *pParse = pWalker->pParse; + sqlite3 *db = pParse->db; + struct Cte *pCte; /* Matched CTE (or NULL if no match) */ + With *pWith; /* WITH clause that pCte belongs to */ + + assert( pFrom->pTab==0 ); + + pCte = searchWith(pParse->pWith, pFrom, &pWith); + if( pCte ){ + Table *pTab; + ExprList *pEList; + Select *pSel; + Select *pLeft; /* Left-most SELECT statement */ + int bMayRecursive; /* True if compound joined by UNION [ALL] */ + With *pSavedWith; /* Initial value of pParse->pWith */ + + /* If pCte->zErr is non-NULL at this point, then this is an illegal + ** recursive reference to CTE pCte. Leave an error in pParse and return + ** early. If pCte->zErr is NULL, then this is not a recursive reference. + ** In this case, proceed. */ + if( pCte->zErr ){ + sqlite3ErrorMsg(pParse, pCte->zErr, pCte->zName); + return SQLITE_ERROR; + } + + assert( pFrom->pTab==0 ); + pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTab==0 ) return WRC_Abort; + pTab->nRef = 1; + pTab->zName = sqlite3DbStrDup(db, pCte->zName); + pTab->iPKey = -1; + pTab->nRowEst = 1048576; + pTab->tabFlags |= TF_Ephemeral; + pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0); + if( db->mallocFailed ) return SQLITE_NOMEM; + assert( pFrom->pSelect ); + + /* Check if this is a recursive CTE. */ + pSel = pFrom->pSelect; + bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION ); + if( bMayRecursive ){ + int i; + SrcList *pSrc = pFrom->pSelect->pSrc; + for(i=0; inSrc; i++){ + struct SrcList_item *pItem = &pSrc->a[i]; + if( pItem->zDatabase==0 + && pItem->zName!=0 + && 0==sqlite3StrICmp(pItem->zName, pCte->zName) + ){ + pItem->pTab = pTab; + pItem->isRecursive = 1; + pTab->nRef++; + pSel->selFlags |= SF_Recursive; + } + } + } + + /* Only one recursive reference is permitted. */ + if( pTab->nRef>2 ){ + sqlite3ErrorMsg( + pParse, "multiple references to recursive table: %s", pCte->zName + ); + return SQLITE_ERROR; + } + assert( pTab->nRef==1 || ((pSel->selFlags&SF_Recursive) && pTab->nRef==2 )); + + pCte->zErr = "circular reference: %s"; + pSavedWith = pParse->pWith; + pParse->pWith = pWith; + sqlite3WalkSelect(pWalker, bMayRecursive ? pSel->pPrior : pSel); + + for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior); + pEList = pLeft->pEList; + if( pCte->pCols ){ + if( pEList->nExpr!=pCte->pCols->nExpr ){ + sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns", + pCte->zName, pEList->nExpr, pCte->pCols->nExpr + ); + pParse->pWith = pSavedWith; + return SQLITE_ERROR; + } + pEList = pCte->pCols; + } + + selectColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol); + if( bMayRecursive ){ + if( pSel->selFlags & SF_Recursive ){ + pCte->zErr = "multiple recursive references: %s"; + }else{ + pCte->zErr = "recursive reference in a subquery: %s"; + } + sqlite3WalkSelect(pWalker, pSel); + } + pCte->zErr = 0; + pParse->pWith = pSavedWith; + } + + return SQLITE_OK; +} +#endif + +#ifndef SQLITE_OMIT_CTE +/* +** If the SELECT passed as the second argument has an associated WITH +** clause, pop it from the stack stored as part of the Parse object. +** +** This function is used as the xSelectCallback2() callback by +** sqlite3SelectExpand() when walking a SELECT tree to resolve table +** names and other FROM clause elements. +*/ +static void selectPopWith(Walker *pWalker, Select *p){ + Parse *pParse = pWalker->pParse; + if( p->pWith ){ + assert( pParse->pWith==p->pWith ); + pParse->pWith = p->pWith->pOuter; + } +} +#else +#define selectPopWith 0 +#endif + /* ** This routine is a Walker callback for "expanding" a SELECT statement. ** "Expanding" means to do the following: @@ -101698,6 +103339,7 @@ static int selectExpander(Walker *pWalker, Select *p){ } pTabList = p->pSrc; pEList = p->pEList; + sqlite3WithPush(pParse, p->pWith, 0); /* Make sure cursor numbers have been assigned to all entries in ** the FROM clause of the SELECT statement. @@ -101710,12 +103352,21 @@ static int selectExpander(Walker *pWalker, Select *p){ */ for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ Table *pTab; + assert( pFrom->isRecursive==0 || pFrom->pTab ); + if( pFrom->isRecursive ) continue; if( pFrom->pTab!=0 ){ /* This statement has already been prepared. There is no need ** to go further. */ assert( i==0 ); +#ifndef SQLITE_OMIT_CTE + selectPopWith(pWalker, p); +#endif return WRC_Prune; } +#ifndef SQLITE_OMIT_CTE + if( withExpand(pWalker, pFrom) ) return WRC_Abort; + if( pFrom->pTab ) {} else +#endif if( pFrom->zName==0 ){ #ifndef SQLITE_OMIT_SUBQUERY Select *pSel = pFrom->pSelect; @@ -101978,6 +103629,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ sqlite3WalkSelect(&w, pSelect); } w.xSelectCallback = selectExpander; + w.xSelectCallback2 = selectPopWith; sqlite3WalkSelect(&w, pSelect); } @@ -101996,7 +103648,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ ** at that point because identifiers had not yet been resolved. This ** routine is called after identifier resolution. */ -static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ +static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ Parse *pParse; int i; SrcList *pTabList; @@ -102012,13 +103664,13 @@ static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){ /* A sub-query in the FROM clause of a SELECT */ Select *pSel = pFrom->pSelect; - assert( pSel ); - while( pSel->pPrior ) pSel = pSel->pPrior; - selectAddColumnTypeAndCollation(pParse, pTab, pSel); + if( pSel ){ + while( pSel->pPrior ) pSel = pSel->pPrior; + selectAddColumnTypeAndCollation(pParse, pTab, pSel); + } } } } - return WRC_Continue; } #endif @@ -102034,10 +103686,9 @@ static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){ #ifndef SQLITE_OMIT_SUBQUERY Walker w; memset(&w, 0, sizeof(w)); - w.xSelectCallback = selectAddSubqueryTypeInfo; + w.xSelectCallback2 = selectAddSubqueryTypeInfo; w.xExprCallback = exprWalkNoop; w.pParse = pParse; - w.bSelectDepthFirst = 1; sqlite3WalkSelect(&w, pSelect); #endif } @@ -102084,14 +103735,23 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ Vdbe *v = pParse->pVdbe; int i; struct AggInfo_func *pFunc; - if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){ - return; - } + int nReg = pAggInfo->nFunc + pAggInfo->nColumn; + if( nReg==0 ) return; +#ifdef SQLITE_DEBUG + /* Verify that all AggInfo registers are within the range specified by + ** AggInfo.mnReg..AggInfo.mxReg */ + assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 ); for(i=0; inColumn; i++){ - sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem); + assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg + && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg ); } + for(i=0; inFunc; i++){ + assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg + && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg ); + } +#endif + sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg); for(pFunc=pAggInfo->aFunc, i=0; inFunc; i++, pFunc++){ - sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem); if( pFunc->iDistinct>=0 ){ Expr *pE = pFunc->pExpr; assert( !ExprHasProperty(pE, EP_xIsSelect) ); @@ -102100,9 +103760,9 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ "argument"); pFunc->iDistinct = -1; }else{ - KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList); + KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList, 0); sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0, - (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + (char*)pKeyInfo, P4_KEYINFO); } } } @@ -102137,7 +103797,6 @@ static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ struct AggInfo_col *pC; pAggInfo->directMode = 1; - sqlite3ExprCacheClear(pParse); for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ int nArg; int addrNext = 0; @@ -102147,7 +103806,7 @@ static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){ if( pList ){ nArg = pList->nExpr; regAgg = sqlite3GetTempRange(pParse, nArg); - sqlite3ExprCodeExprList(pParse, pList, regAgg, 1); + sqlite3ExprCodeExprList(pParse, pList, regAgg, SQLITE_ECEL_DUP); }else{ nArg = 0; regAgg = 0; @@ -102234,50 +103893,8 @@ static void explainSimpleCount( /* ** Generate code for the SELECT statement given in the p argument. ** -** The results are distributed in various ways depending on the -** contents of the SelectDest structure pointed to by argument pDest -** as follows: -** -** pDest->eDest Result -** ------------ ------------------------------------------- -** SRT_Output Generate a row of output (using the OP_ResultRow -** opcode) for each row in the result set. -** -** SRT_Mem Only valid if the result is a single column. -** Store the first column of the first result row -** in register pDest->iSDParm then abandon the rest -** of the query. This destination implies "LIMIT 1". -** -** SRT_Set The result must be a single column. Store each -** row of result as the key in table pDest->iSDParm. -** Apply the affinity pDest->affSdst before storing -** results. Used to implement "IN (SELECT ...)". -** -** SRT_Union Store results as a key in a temporary table -** identified by pDest->iSDParm. -** -** SRT_Except Remove results from the temporary table pDest->iSDParm. -** -** SRT_Table Store results in temporary table pDest->iSDParm. -** This is like SRT_EphemTab except that the table -** is assumed to already be open. -** -** SRT_EphemTab Create an temporary table pDest->iSDParm and store -** the result there. The cursor is left open after -** returning. This is like SRT_Table except that -** this destination uses OP_OpenEphemeral to create -** the table first. -** -** SRT_Coroutine Generate a co-routine that returns a new row of -** results each time it is invoked. The entry point -** of the co-routine is stored in register pDest->iSDParm. -** -** SRT_Exists Store a 1 in memory cell pDest->iSDParm if the result -** set is not empty. -** -** SRT_Discard Throw the results away. This is used by SELECT -** statements within triggers whose only purpose is -** the side-effects of functions. +** The results are returned according to the SelectDest structure. +** See comments in sqliteInt.h for further information. ** ** This routine returns the number of errors. If any errors are ** encountered, then an appropriate error message is left in @@ -102552,12 +104169,12 @@ SQLITE_PRIVATE int sqlite3Select( */ if( pOrderBy ){ KeyInfo *pKeyInfo; - pKeyInfo = keyInfoFromExprList(pParse, pOrderBy); + pKeyInfo = keyInfoFromExprList(pParse, pOrderBy, 0); pOrderBy->iECursor = pParse->nTab++; p->addrOpenEphm[2] = addrSortIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pOrderBy->iECursor, pOrderBy->nExpr+2, 0, - (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + (char*)pKeyInfo, P4_KEYINFO); }else{ addrSortIndex = -1; } @@ -102584,8 +104201,8 @@ SQLITE_PRIVATE int sqlite3Select( sDistinct.tabTnct = pParse->nTab++; sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, sDistinct.tabTnct, 0, 0, - (char*)keyInfoFromExprList(pParse, p->pEList), - P4_KEYINFO_HANDOFF); + (char*)keyInfoFromExprList(pParse, p->pEList, 0), + P4_KEYINFO); sqlite3VdbeChangeP5(v, BTREE_UNORDERED); sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED; }else{ @@ -102618,7 +104235,7 @@ SQLITE_PRIVATE int sqlite3Select( } /* Use the standard inner loop. */ - selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, &sDistinct, pDest, + selectInnerLoop(pParse, p, pEList, -1, pOrderBy, &sDistinct, pDest, sqlite3WhereContinueLabel(pWInfo), sqlite3WhereBreakLabel(pWInfo)); @@ -102648,10 +104265,10 @@ SQLITE_PRIVATE int sqlite3Select( struct ExprList_item *pItem; /* For looping over expression in a list */ for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){ - pItem->iAlias = 0; + pItem->u.x.iAlias = 0; } for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){ - pItem->iAlias = 0; + pItem->u.x.iAlias = 0; } if( p->nSelectRow>100 ) p->nSelectRow = 100; }else{ @@ -102670,6 +104287,7 @@ SQLITE_PRIVATE int sqlite3Select( sNC.pParse = pParse; sNC.pSrcList = pTabList; sNC.pAggInfo = &sAggInfo; + sAggInfo.mnReg = pParse->nMem+1; sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0; sAggInfo.pGroupBy = pGroupBy; sqlite3ExprAnalyzeAggList(&sNC, pEList); @@ -102684,6 +104302,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList); sNC.ncFlags &= ~NC_InAggFunc; } + sAggInfo.mxReg = pParse->nMem; if( db->mallocFailed ) goto select_end; /* Processing for aggregates with GROUP BY is very different and @@ -102706,10 +104325,10 @@ SQLITE_PRIVATE int sqlite3Select( ** will be converted into a Noop. */ sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = keyInfoFromExprList(pParse, pGroupBy); + pKeyInfo = keyInfoFromExprList(pParse, pGroupBy, 0); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, sAggInfo.sortingIdx, sAggInfo.nSortingColumn, - 0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF); + 0, (char*)pKeyInfo, P4_KEYINFO); /* Initialize memory locations used by GROUP BY aggregate processing */ @@ -102823,7 +104442,7 @@ SQLITE_PRIVATE int sqlite3Select( } } sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr, - (char*)pKeyInfo, P4_KEYINFO); + (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); j1 = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1); @@ -102888,7 +104507,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); finalizeAggFunctions(pParse, &sAggInfo); sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); - selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy, + selectInnerLoop(pParse, p, p->pEList, -1, pOrderBy, &sDistinct, pDest, addrOutputRow+1, addrSetAbort); sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); @@ -102933,11 +104552,12 @@ SQLITE_PRIVATE int sqlite3Select( ** ** (2011-04-15) Do not do a full scan of an unordered index. ** - ** (2013-10-03) Do not count the entires in a partial index. + ** (2013-10-03) Do not count the entries in a partial index. ** ** In practice the KeyInfo structure will not be used. It is only ** passed to keep OP_OpenRead happy. */ + if( !HasRowid(pTab) ) pBest = sqlite3PrimaryKeyIndex(pTab); for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ if( pIdx->bUnordered==0 && pIdx->szIdxRowszTabRow @@ -102949,13 +104569,13 @@ SQLITE_PRIVATE int sqlite3Select( } if( pBest ){ iRoot = pBest->tnum; - pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest); + pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pBest); } /* Open a read-only cursor, execute the OP_Count, close the cursor. */ - sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb); + sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, iRoot, iDb, 1); if( pKeyInfo ){ - sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF); + sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); } sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem); sqlite3VdbeAddOp1(v, OP_Close, iCsr); @@ -103030,7 +104650,7 @@ SQLITE_PRIVATE int sqlite3Select( pOrderBy = 0; sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); - selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, 0, + selectInnerLoop(pParse, p, p->pEList, -1, 0, 0, pDest, addrEnd, addrEnd); sqlite3ExprListDelete(db, pDel); } @@ -103774,25 +105394,21 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( sqlite3 *db, /* The database connection */ Token *pTableName, /* Name of the table into which we insert */ IdList *pColumn, /* List of columns in pTableName to insert into */ - ExprList *pEList, /* The VALUE clause: a list of values to be inserted */ Select *pSelect, /* A SELECT statement that supplies values */ u8 orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ ){ TriggerStep *pTriggerStep; - assert(pEList == 0 || pSelect == 0); - assert(pEList != 0 || pSelect != 0 || db->mallocFailed); + assert(pSelect != 0 || db->mallocFailed); pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName); if( pTriggerStep ){ pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); pTriggerStep->pIdList = pColumn; - pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); pTriggerStep->orconf = orconf; }else{ sqlite3IdListDelete(db, pColumn); } - sqlite3ExprListDelete(db, pEList); sqlite3SelectDelete(db, pSelect); return pTriggerStep; @@ -104130,7 +105746,6 @@ static int codeTriggerProgram( case TK_INSERT: { sqlite3Insert(pParse, targetSrcList(pParse, pStep), - sqlite3ExprListDup(db, pStep->pExprList, 0), sqlite3SelectDup(db, pStep->pSelect, 0), sqlite3IdListDup(db, pStep->pIdList), pParse->eOrconf @@ -104161,7 +105776,7 @@ static int codeTriggerProgram( return 0; } -#ifdef SQLITE_DEBUG +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS /* ** This function is used to add VdbeComment() annotations to a VDBE ** program. It is not used in production code, only for debugging. @@ -104301,6 +105916,7 @@ static TriggerPrg *codeRowTrigger( assert( !pSubParse->pAinc && !pSubParse->pZombieTab ); assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg ); + sqlite3ParserReset(pSubParse); sqlite3StackFree(db, pSubParse); return pPrg; @@ -104586,7 +106202,7 @@ SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){ sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM); } #ifndef SQLITE_OMIT_FLOATING_POINT - if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ + if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); } #endif @@ -104609,25 +106225,32 @@ SQLITE_PRIVATE void sqlite3Update( ){ int i, j; /* Loop counters */ Table *pTab; /* The table to be updated */ - int addr = 0; /* VDBE instruction address of the start of the loop */ + int addrTop = 0; /* VDBE instruction address of the start of the loop */ WhereInfo *pWInfo; /* Information about the WHERE clause */ Vdbe *v; /* The virtual database engine */ Index *pIdx; /* For looping over indices */ + Index *pPk; /* The PRIMARY KEY index for WITHOUT ROWID tables */ int nIdx; /* Number of indices that need updating */ - int iCur; /* VDBE Cursor number of pTab */ + int iBaseCur; /* Base cursor number */ + int iDataCur; /* Cursor for the canonical data btree */ + int iIdxCur; /* Cursor for the first index */ sqlite3 *db; /* The database structure */ int *aRegIdx = 0; /* One register assigned to each index to be updated */ int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the ** an expression for the i-th column of the table. ** aXRef[i]==-1 if the i-th column is not changed. */ - int chngRowid; /* True if the record number is being changed */ + u8 *aToOpen; /* 1 for tables and indices to be opened */ + u8 chngPk; /* PRIMARY KEY changed in a WITHOUT ROWID table */ + u8 chngRowid; /* Rowid changed in a normal table */ + u8 chngKey; /* Either chngPk or chngRowid */ Expr *pRowidExpr = 0; /* Expression defining the new record number */ - int openAll = 0; /* True if all indices need to be opened */ AuthContext sContext; /* The authorization context */ NameContext sNC; /* The name-context to resolve expressions in */ int iDb; /* Database containing the table being updated */ int okOnePass; /* True for one-pass algorithm without the FIFO */ int hasFK; /* True if foreign key processing is required */ + int labelBreak; /* Jump here to break out of UPDATE loop */ + int labelContinue; /* Jump here to continue next step of UPDATE loop */ #ifndef SQLITE_OMIT_TRIGGER int isView; /* True when updating a view (INSTEAD OF trigger) */ @@ -104635,6 +106258,9 @@ SQLITE_PRIVATE void sqlite3Update( int tmask; /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ #endif int newmask; /* Mask of NEW.* columns accessed by BEFORE triggers */ + int iEph = 0; /* Ephemeral table holding all primary key values */ + int nKey = 0; /* Number of elements in regKey for WITHOUT ROWID */ + int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ /* Register Allocations */ int regRowCount = 0; /* A count of rows changed */ @@ -104643,6 +106269,7 @@ SQLITE_PRIVATE void sqlite3Update( int regNew; /* Content of the NEW.* table in triggers */ int regOld = 0; /* Content of OLD.* table in triggers */ int regRowSet = 0; /* Rowset of rows to be updated */ + int regKey = 0; /* composite PRIMARY KEY value */ memset(&sContext, 0, sizeof(sContext)); db = pParse->db; @@ -104680,20 +106307,34 @@ SQLITE_PRIVATE void sqlite3Update( if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ goto update_cleanup; } - aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol ); - if( aXRef==0 ) goto update_cleanup; - for(i=0; inCol; i++) aXRef[i] = -1; /* Allocate a cursors for the main database table and for all indices. ** The index cursors might not be used, but if they are used they ** need to occur right after the database cursor. So go ahead and ** allocate enough space, just in case. */ - pTabList->a[0].iCursor = iCur = pParse->nTab++; - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + pTabList->a[0].iCursor = iBaseCur = iDataCur = pParse->nTab++; + iIdxCur = iDataCur+1; + pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ + if( pIdx->autoIndex==2 && pPk!=0 ){ + iDataCur = pParse->nTab; + pTabList->a[0].iCursor = iDataCur; + } pParse->nTab++; } + /* Allocate space for aXRef[], aRegIdx[], and aToOpen[]. + ** Initialize aXRef[] and aToOpen[] to their default values. + */ + aXRef = sqlite3DbMallocRaw(db, sizeof(int) * (pTab->nCol+nIdx) + nIdx+2 ); + if( aXRef==0 ) goto update_cleanup; + aRegIdx = aXRef+pTab->nCol; + aToOpen = (u8*)(aRegIdx+nIdx); + memset(aToOpen, 1, nIdx+1); + aToOpen[nIdx+1] = 0; + for(i=0; inCol; i++) aXRef[i] = -1; + /* Initialize the name-context */ memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; @@ -104705,7 +106346,7 @@ SQLITE_PRIVATE void sqlite3Update( ** column to be updated, make sure we have authorization to change ** that column. */ - chngRowid = 0; + chngRowid = chngPk = 0; for(i=0; inExpr; i++){ if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){ goto update_cleanup; @@ -104715,13 +106356,15 @@ SQLITE_PRIVATE void sqlite3Update( if( j==pTab->iPKey ){ chngRowid = 1; pRowidExpr = pChanges->a[i].pExpr; + }else if( pPk && (pTab->aCol[j].colFlags & COLFLAG_PRIMKEY)!=0 ){ + chngPk = 1; } aXRef[j] = i; break; } } if( j>=pTab->nCol ){ - if( sqlite3IsRowid(pChanges->a[i].zName) ){ + if( pPk==0 && sqlite3IsRowid(pChanges->a[i].zName) ){ j = -1; chngRowid = 1; pRowidExpr = pChanges->a[i].pExpr; @@ -104745,32 +106388,36 @@ SQLITE_PRIVATE void sqlite3Update( } #endif } + assert( (chngRowid & chngPk)==0 ); + assert( chngRowid==0 || chngRowid==1 ); + assert( chngPk==0 || chngPk==1 ); + chngKey = chngRowid + chngPk; - hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid); - - /* Allocate memory for the array aRegIdx[]. There is one entry in the - ** array for each index associated with table being updated. Fill in - ** the value with a register number for indices that are to be used - ** and with zero for unused indices. + /* The SET expressions are not actually used inside the WHERE loop. + ** So reset the colUsed mask + */ + pTabList->a[0].colUsed = 0; + + hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngKey); + + /* There is one entry in the aRegIdx[] array for each index on the table + ** being updated. Fill in aRegIdx[] with a register number that will hold + ** the key for accessing each index. */ - for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){} - if( nIdx>0 ){ - aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx ); - if( aRegIdx==0 ) goto update_cleanup; - } for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ int reg; - if( hasFK || chngRowid || pIdx->pPartIdxWhere ){ + if( chngKey || hasFK || pIdx->pPartIdxWhere || pIdx==pPk ){ reg = ++pParse->nMem; }else{ reg = 0; - for(i=0; inColumn; i++){ + for(i=0; inKeyCol; i++){ if( aXRef[pIdx->aiColumn[i]]>=0 ){ reg = ++pParse->nMem; break; } } } + if( reg==0 ) aToOpen[j+1] = 0; aRegIdx[j] = reg; } @@ -104794,11 +106441,11 @@ SQLITE_PRIVATE void sqlite3Update( /* Allocate required registers. */ regRowSet = ++pParse->nMem; regOldRowid = regNewRowid = ++pParse->nMem; - if( pTrigger || hasFK ){ + if( chngPk || pTrigger || hasFK ){ regOld = pParse->nMem + 1; pParse->nMem += pTab->nCol; } - if( chngRowid || pTrigger || hasFK ){ + if( chngKey || pTrigger || hasFK ){ regNewRowid = ++pParse->nMem; } regNew = pParse->nMem + 1; @@ -104814,7 +106461,7 @@ SQLITE_PRIVATE void sqlite3Update( */ #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iCur); + sqlite3MaterializeView(pParse, pTab, pWhere, iDataCur); } #endif @@ -104827,24 +106474,58 @@ SQLITE_PRIVATE void sqlite3Update( /* Begin the database scan */ - sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); - pWInfo = sqlite3WhereBegin( - pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED, 0 - ); - if( pWInfo==0 ) goto update_cleanup; - okOnePass = sqlite3WhereOkOnePass(pWInfo); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); + pWInfo = sqlite3WhereBegin( + pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED, iIdxCur + ); + if( pWInfo==0 ) goto update_cleanup; + okOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + + /* Remember the rowid of every item to be updated. + */ + sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regOldRowid); + if( !okOnePass ){ + sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); + } + + /* End the database scan loop. + */ + sqlite3WhereEnd(pWInfo); + }else{ + int iPk; /* First of nPk memory cells holding PRIMARY KEY value */ + i16 nPk; /* Number of components of the PRIMARY KEY */ + int addrOpen; /* Address of the OpenEphemeral instruction */ - /* Remember the rowid of every item to be updated. - */ - sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid); - if( !okOnePass ){ - sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); + assert( pPk!=0 ); + nPk = pPk->nKeyCol; + iPk = pParse->nMem+1; + pParse->nMem += nPk; + regKey = ++pParse->nMem; + iEph = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_Null, 0, iPk); + addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nPk); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0, 0, + WHERE_ONEPASS_DESIRED, iIdxCur); + if( pWInfo==0 ) goto update_cleanup; + okOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + for(i=0; iaiColumn[i], + iPk+i); + } + if( okOnePass ){ + sqlite3VdbeChangeToNoop(v, addrOpen); + nKey = nPk; + regKey = iPk; + }else{ + sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, regKey, + sqlite3IndexAffinityStr(v, pPk), P4_TRANSIENT); + sqlite3VdbeAddOp2(v, OP_IdxInsert, iEph, regKey); + } + sqlite3WhereEnd(pWInfo); } - /* End the database scan loop. - */ - sqlite3WhereEnd(pWInfo); - /* Initialize the count of updated rows */ if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){ @@ -104852,6 +106533,7 @@ SQLITE_PRIVATE void sqlite3Update( sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); } + labelBreak = sqlite3VdbeMakeLabel(v); if( !isView ){ /* ** Open every index that needs updating. Note that if any @@ -104859,68 +106541,72 @@ SQLITE_PRIVATE void sqlite3Update( ** action, then we need to open all indices because we might need ** to be deleting some records. */ - if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); if( onError==OE_Replace ){ - openAll = 1; + memset(aToOpen, 1, nIdx+1); }else{ - openAll = 0; for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ if( pIdx->onError==OE_Replace ){ - openAll = 1; + memset(aToOpen, 1, nIdx+1); break; } } } - for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - assert( aRegIdx ); - if( openAll || aRegIdx[i]>0 ){ - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx); - sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); - assert( pParse->nTab>iCur+i+1 ); - } + if( okOnePass ){ + if( aiCurOnePass[0]>=0 ) aToOpen[aiCurOnePass[0]-iBaseCur] = 0; + if( aiCurOnePass[1]>=0 ) aToOpen[aiCurOnePass[1]-iBaseCur] = 0; } + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, iBaseCur, aToOpen, + 0, 0); } /* Top of the update loop */ if( okOnePass ){ - int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid); - addr = sqlite3VdbeAddOp0(v, OP_Goto); - sqlite3VdbeJumpHere(v, a1); + if( aToOpen[iDataCur-iBaseCur] ){ + assert( pPk!=0 ); + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey, nKey); + } + labelContinue = labelBreak; + sqlite3VdbeAddOp2(v, OP_IsNull, pPk ? regKey : regOldRowid, labelBreak); + }else if( pPk ){ + labelContinue = sqlite3VdbeMakeLabel(v); + sqlite3VdbeAddOp2(v, OP_Rewind, iEph, labelBreak); + addrTop = sqlite3VdbeAddOp2(v, OP_RowKey, iEph, regKey); + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelContinue, regKey, 0); }else{ - addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid); + labelContinue = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, labelBreak, + regOldRowid); + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, labelContinue, regOldRowid); } - /* Make cursor iCur point to the record that is being updated. If - ** this record does not exist for some reason (deleted by a trigger, - ** for example, then jump to the next iteration of the RowSet loop. */ - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); - /* If the record number will change, set register regNewRowid to ** contain the new value. If the record number is not being modified, ** then regNewRowid is the same register as regOldRowid, which is ** already populated. */ - assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid ); + assert( chngKey || pTrigger || hasFK || regOldRowid==regNewRowid ); if( chngRowid ){ sqlite3ExprCode(pParse, pRowidExpr, regNewRowid); sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid); } - /* If there are triggers on this table, populate an array of registers - ** with the required old.* column data. */ - if( hasFK || pTrigger ){ + /* Compute the old pre-UPDATE content of the row being changed, if that + ** information is needed */ + if( chngPk || hasFK || pTrigger ){ u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0); oldmask |= sqlite3TriggerColmask(pParse, pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError ); for(i=0; inCol; i++){ - if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<aCol[i].colFlags & COLFLAG_PRIMKEY)!=0 + ){ + testcase( oldmask!=0xffffffff && i==31 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regOld+i); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, regOld+i); } } - if( chngRowid==0 ){ + if( chngRowid==0 && pPk==0 ){ sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid); } } @@ -104941,15 +106627,15 @@ SQLITE_PRIVATE void sqlite3Update( newmask = sqlite3TriggerColmask( pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError ); - sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1); + /*sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1);*/ for(i=0; inCol; i++){ if( i==pTab->iPKey ){ - /*sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);*/ + sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i); }else{ j = aXRef[i]; if( j>=0 ){ sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i); - }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<31 || (newmask & MASKBIT32(i)) ){ /* This branch loads the value of a column that will not be changed ** into a register. This is done if there are no BEFORE triggers, or ** if there are one or more BEFORE triggers that use this value via @@ -104957,8 +106643,9 @@ SQLITE_PRIVATE void sqlite3Update( */ testcase( i==31 ); testcase( i==32 ); - sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i); - sqlite3ColumnDefault(v, pTab, i, regNew+i); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i); } } } @@ -104970,7 +106657,7 @@ SQLITE_PRIVATE void sqlite3Update( sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol); sqlite3TableAffinityStr(v, pTab); sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, - TRIGGER_BEFORE, pTab, regOldRowid, onError, addr); + TRIGGER_BEFORE, pTab, regOldRowid, onError, labelContinue); /* The row-trigger may have deleted the row being updated. In this ** case, jump to the next row. No updates or AFTER triggers are @@ -104978,7 +106665,11 @@ SQLITE_PRIVATE void sqlite3Update( ** is deleted or renamed by a BEFORE trigger - is left undefined in the ** documentation. */ - sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid); + if( pPk ){ + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelContinue,regKey,nKey); + }else{ + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, labelContinue, regOldRowid); + } /* If it did not delete it, the row-trigger may still have modified ** some of the columns of the row being updated. Load the values for @@ -104987,46 +106678,56 @@ SQLITE_PRIVATE void sqlite3Update( */ for(i=0; inCol; i++){ if( aXRef[i]<0 && i!=pTab->iPKey ){ - sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i); - sqlite3ColumnDefault(v, pTab, i, regNew+i); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i); } } } if( !isView ){ - int j1; /* Address of jump instruction */ + int j1 = 0; /* Address of jump instruction */ + int bReplace = 0; /* True if REPLACE conflict resolution might happen */ /* Do constraint checks. */ - sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid, - aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0); + assert( regOldRowid>0 ); + sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, + regNewRowid, regOldRowid, chngKey, onError, labelContinue, &bReplace); /* Do FK constraint checks. */ if( hasFK ){ - sqlite3FkCheck(pParse, pTab, regOldRowid, 0, aXRef, chngRowid); + sqlite3FkCheck(pParse, pTab, regOldRowid, 0, aXRef, chngKey); } /* Delete the index entries associated with the current record. */ - j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid); - sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx); + if( bReplace || chngKey ){ + if( pPk ){ + j1 = sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, 0, regKey, nKey); + }else{ + j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, 0, regOldRowid); + } + } + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, aRegIdx); /* If changing the record number, delete the old record. */ - if( hasFK || chngRowid ){ - sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0); + if( hasFK || chngKey || pPk!=0 ){ + sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, 0); + } + if( bReplace || chngKey ){ + sqlite3VdbeJumpHere(v, j1); } - sqlite3VdbeJumpHere(v, j1); if( hasFK ){ - sqlite3FkCheck(pParse, pTab, 0, regNewRowid, aXRef, chngRowid); + sqlite3FkCheck(pParse, pTab, 0, regNewRowid, aXRef, chngKey); } /* Insert the new index entries and the new record. */ - sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0); + sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur, + regNewRowid, aRegIdx, 1, 0, 0); /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to ** handle rows (possibly in other tables) that refer via a foreign key ** to the row just updated. */ if( hasFK ){ - sqlite3FkActions(pParse, pTab, pChanges, regOldRowid, aXRef, chngRowid); + sqlite3FkActions(pParse, pTab, pChanges, regOldRowid, aXRef, chngKey); } } @@ -105037,22 +106738,29 @@ SQLITE_PRIVATE void sqlite3Update( } sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, - TRIGGER_AFTER, pTab, regOldRowid, onError, addr); + TRIGGER_AFTER, pTab, regOldRowid, onError, labelContinue); /* Repeat the above with the next record to be updated, until ** all record selected by the WHERE clause have been updated. */ - sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); - sqlite3VdbeJumpHere(v, addr); + if( okOnePass ){ + /* Nothing to do at end-of-loop for a single-pass */ + }else if( pPk ){ + sqlite3VdbeResolveLabel(v, labelContinue); + sqlite3VdbeAddOp2(v, OP_Next, iEph, addrTop); + }else{ + sqlite3VdbeAddOp2(v, OP_Goto, 0, labelContinue); + } + sqlite3VdbeResolveLabel(v, labelBreak); /* Close all tables */ for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ assert( aRegIdx ); - if( openAll || aRegIdx[i]>0 ){ - sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0); + if( aToOpen[i+1] ){ + sqlite3VdbeAddOp2(v, OP_Close, iIdxCur+i, 0); } } - sqlite3VdbeAddOp2(v, OP_Close, iCur, 0); + if( iDataCur0" + " AND coalesce(rootpage,1)>0" ); if( rc!=SQLITE_OK ) goto end_of_vacuum; rc = execExecSql(db, pzErrMsg, @@ -105445,7 +107152,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){ "|| ' SELECT * FROM main.' || quote(name) || ';'" "FROM main.sqlite_master " "WHERE type = 'table' AND name!='sqlite_sequence' " - " AND rootpage>0" + " AND coalesce(rootpage,1)>0" ); if( rc!=SQLITE_OK ) goto end_of_vacuum; @@ -106299,6 +108006,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ sqlite3VdbeFinalize(pParse->pVdbe); } sqlite3DeleteTable(db, pParse->pNewTable); + sqlite3ParserReset(pParse); sqlite3StackFree(db, pParse); } @@ -106676,7 +108384,24 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". */ - +/************** Include whereInt.h in the middle of where.c ******************/ +/************** Begin file whereInt.h ****************************************/ +/* +** 2013-11-12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains structure and macro definitions for the query +** planner logic in "where.c". These definitions are broken out into +** a separate source file for easier editing. +*/ /* ** Trace output macros @@ -106728,6 +108453,7 @@ struct WhereLevel { int iIdxCur; /* The VDBE cursor used to access pIdx */ int addrBrk; /* Jump here to break out of the loop */ int addrNxt; /* Jump here to start the next IN combination */ + int addrSkip; /* Jump here for next iteration of skip-scan */ int addrCont; /* Jump here to continue with the next loop cycle */ int addrFirst; /* First instruction of interior of the loop */ int addrBody; /* Beginning of the body of this loop */ @@ -106776,7 +108502,8 @@ struct WhereLoop { LogEst nOut; /* Estimated number of output rows */ union { struct { /* Information for internal btree tables */ - int nEq; /* Number of equality constraints */ + u16 nEq; /* Number of equality constraints */ + u16 nSkip; /* Number of initial index columns to skip */ Index *pIndex; /* Index used, or NULL */ } btree; struct { /* Information for virtual tables */ @@ -107068,6 +108795,7 @@ struct WhereInfo { int iContinue; /* Jump here to continue with next record */ int iBreak; /* Jump here to break out of the loop */ int savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */ + int aiCurOnePass[2]; /* OP_OpenWrite cursors for the ONEPASS opt */ WhereMaskSet sMaskSet; /* Map cursor numbers to bitmasks */ WhereClause sWC; /* Decomposition of the WHERE clause */ WhereLevel a[1]; /* Information about each nest loop in WHERE */ @@ -107116,6 +108844,10 @@ struct WhereInfo { #define WHERE_ONEROW 0x00001000 /* Selects no more than one row */ #define WHERE_MULTI_OR 0x00002000 /* OR using multiple indices */ #define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */ +#define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */ + +/************** End of whereInt.h ********************************************/ +/************** Continuing where we left off in where.c **********************/ /* ** Return the estimated number of output rows from a WHERE clause @@ -107160,8 +108892,19 @@ SQLITE_PRIVATE int sqlite3WhereBreakLabel(WhereInfo *pWInfo){ ** Return TRUE if an UPDATE or DELETE statement can operate directly on ** the rowids returned by a WHERE clause. Return FALSE if doing an ** UPDATE or DELETE might change subsequent WHERE clause results. +** +** If the ONEPASS optimization is used (if this routine returns true) +** then also write the indices of open cursors used by ONEPASS +** into aiCur[0] and aiCur[1]. iaCur[0] gets the cursor of the data +** table and iaCur[1] gets the cursor used by an auxiliary index. +** Either value may be -1, indicating that cursor is not used. +** Any cursors returned will have been opened for writing. +** +** aiCur[0] and aiCur[1] both get -1 if the where-clause logic is +** unable to use the ONEPASS optimization. */ -SQLITE_PRIVATE int sqlite3WhereOkOnePass(WhereInfo *pWInfo){ +SQLITE_PRIVATE int sqlite3WhereOkOnePass(WhereInfo *pWInfo, int *aiCur){ + memcpy(aiCur, pWInfo->aiCurOnePass, sizeof(int)*2); return pWInfo->okOnePass; } @@ -107537,7 +109280,10 @@ static WhereTerm *whereScanNext(WhereScan *pScan){ iColumn = pScan->aEquiv[pScan->iEquiv-1]; while( (pWC = pScan->pWC)!=0 ){ for(pTerm=pWC->a+k; knTerm; k++, pTerm++){ - if( pTerm->leftCursor==iCur && pTerm->u.leftColumn==iColumn ){ + if( pTerm->leftCursor==iCur + && pTerm->u.leftColumn==iColumn + && (pScan->iEquiv<=2 || !ExprHasProperty(pTerm->pExpr, EP_FromJoin)) + ){ if( (pTerm->eOperator & WO_EQUIV)!=0 && pScan->nEquivaEquiv) ){ @@ -107627,7 +109373,7 @@ static WhereTerm *whereScanInit( if( pIdx && iColumn>=0 ){ pScan->idxaff = pIdx->pTable->aCol[iColumn].affinity; for(j=0; pIdx->aiColumn[j]!=iColumn; j++){ - if( NEVER(j>=pIdx->nColumn) ) return 0; + if( NEVER(j>=pIdx->nKeyCol) ) return 0; } pScan->zCollName = pIdx->azColl[j]; }else{ @@ -107751,11 +109497,8 @@ static int isLikeOrGlob( } assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */ - pRight = pList->a[0].pExpr; + pRight = sqlite3ExprSkipCollate(pList->a[0].pExpr); op = pRight->op; - if( op==TK_REGISTER ){ - op = pRight->op2; - } if( op==TK_VARIABLE ){ Vdbe *pReprepare = pParse->pReprepare; int iCol = pRight->iColumn; @@ -108557,16 +110300,16 @@ static int isDistinctRedundant( */ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ if( pIdx->onError==OE_None ) continue; - for(i=0; inColumn; i++){ - int iCol = pIdx->aiColumn[i]; + for(i=0; inKeyCol; i++){ + i16 iCol = pIdx->aiColumn[i]; if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx) ){ int iIdxCol = findIndexCol(pParse, pDistinct, iBase, pIdx, i); - if( iIdxCol<0 || pTab->aCol[pIdx->aiColumn[i]].notNull==0 ){ + if( iIdxCol<0 || pTab->aCol[iCol].notNull==0 ){ break; } } } - if( i==pIdx->nColumn ){ + if( i==pIdx->nKeyCol ){ /* This index implies that the DISTINCT qualifier is redundant. */ return 1; } @@ -108622,6 +110365,7 @@ static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){ sqlite3DebugPrintf(" idxStr=%s\n", p->idxStr); sqlite3DebugPrintf(" orderByConsumed=%d\n", p->orderByConsumed); sqlite3DebugPrintf(" estimatedCost=%g\n", p->estimatedCost); + sqlite3DebugPrintf(" estimatedRows=%lld\n", p->estimatedRows); } #else #define TRACE_IDX_INPUTS(A) @@ -108664,15 +110408,13 @@ static void constructAutomaticIndex( Bitmask notReady, /* Mask of cursors that are not available */ WhereLevel *pLevel /* Write new index here */ ){ - int nColumn; /* Number of columns in the constructed index */ + int nKeyCol; /* Number of columns in the constructed index */ WhereTerm *pTerm; /* A single term of the WHERE clause */ WhereTerm *pWCEnd; /* End of pWC->a[] */ - int nByte; /* Byte of memory needed for pIdx */ Index *pIdx; /* Object describing the transient index */ Vdbe *v; /* Prepared statement under construction */ int addrInit; /* Address of the initialization bypass jump */ Table *pTable; /* The table being indexed */ - KeyInfo *pKeyinfo; /* Key information for the index */ int addrTop; /* Top of the index fill loop */ int regRecord; /* Register holding an index record */ int n; /* Column counter */ @@ -108680,6 +110422,7 @@ static void constructAutomaticIndex( int mxBitCol; /* Maximum column in pSrc->colUsed */ CollSeq *pColl; /* Collating sequence to on a column */ WhereLoop *pLoop; /* The Loop object */ + char *zNotUsed; /* Extra space on the end of pIdx */ Bitmask idxCols; /* Bitmap of columns used for indexing */ Bitmask extraCols; /* Bitmap of additional columns */ u8 sentWarning = 0; /* True if a warnning has been issued */ @@ -108692,7 +110435,7 @@ static void constructAutomaticIndex( /* Count the number of columns that will be added to the index ** and used to match WHERE clause constraints */ - nColumn = 0; + nKeyCol = 0; pTable = pSrc->pTab; pWCEnd = &pWC->a[pWC->nTerm]; pLoop = pLevel->pWLoop; @@ -108710,14 +110453,14 @@ static void constructAutomaticIndex( sentWarning = 1; } if( (idxCols & cMask)==0 ){ - if( whereLoopResize(pParse->db, pLoop, nColumn+1) ) return; - pLoop->aLTerm[nColumn++] = pTerm; + if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ) return; + pLoop->aLTerm[nKeyCol++] = pTerm; idxCols |= cMask; } } } - assert( nColumn>0 ); - pLoop->u.btree.nEq = pLoop->nLTerm = nColumn; + assert( nKeyCol>0 ); + pLoop->u.btree.nEq = pLoop->nLTerm = nKeyCol; pLoop->wsFlags = WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WHERE_INDEXED | WHERE_AUTO_INDEX; @@ -108734,26 +110477,18 @@ static void constructAutomaticIndex( testcase( pTable->nCol==BMS-1 ); testcase( pTable->nCol==BMS-2 ); for(i=0; icolUsed & MASKBIT(BMS-1) ){ - nColumn += pTable->nCol - BMS + 1; + nKeyCol += pTable->nCol - BMS + 1; } pLoop->wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY; /* Construct the Index object to describe this index */ - nByte = sizeof(Index); - nByte += nColumn*sizeof(int); /* Index.aiColumn */ - nByte += nColumn*sizeof(char*); /* Index.azColl */ - nByte += nColumn; /* Index.aSortOrder */ - pIdx = sqlite3DbMallocZero(pParse->db, nByte); + pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+1, 0, &zNotUsed); if( pIdx==0 ) return; pLoop->u.btree.pIndex = pIdx; - pIdx->azColl = (char**)&pIdx[1]; - pIdx->aiColumn = (int*)&pIdx->azColl[nColumn]; - pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn]; pIdx->zName = "auto-index"; - pIdx->nColumn = nColumn; pIdx->pTable = pTable; n = 0; idxCols = 0; @@ -108791,20 +110526,21 @@ static void constructAutomaticIndex( n++; } } - assert( n==nColumn ); + assert( n==nKeyCol ); + pIdx->aiColumn[n] = -1; + pIdx->azColl[n] = "BINARY"; /* Create the automatic index */ - pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx); assert( pLevel->iIdxCur>=0 ); pLevel->iIdxCur = pParse->nTab++; - sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0, - (char*)pKeyinfo, P4_KEYINFO_HANDOFF); + sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); VdbeComment((v, "for %s", pTable->zName)); /* Fill the automatic index with content */ addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); regRecord = sqlite3GetTempReg(pParse); - sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1, 0); + sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0); sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord); sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); @@ -108845,7 +110581,8 @@ static sqlite3_index_info *allocateIndexInfo( assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) ); testcase( pTerm->eOperator & WO_IN ); testcase( pTerm->eOperator & WO_ISNULL ); - if( pTerm->eOperator & (WO_ISNULL) ) continue; + testcase( pTerm->eOperator & WO_ALL ); + if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV))==0 ) continue; if( pTerm->wtFlags & TERM_VNULL ) continue; nTerm++; } @@ -108897,7 +110634,8 @@ static sqlite3_index_info *allocateIndexInfo( assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) ); testcase( pTerm->eOperator & WO_IN ); testcase( pTerm->eOperator & WO_ISNULL ); - if( pTerm->eOperator & (WO_ISNULL) ) continue; + testcase( pTerm->eOperator & WO_ALL ); + if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV))==0 ) continue; if( pTerm->wtFlags & TERM_VNULL ) continue; pIdxCons[j].iColumn = pTerm->u.leftColumn; pIdxCons[j].iTermOffset = i; @@ -108999,8 +110737,7 @@ static void whereKeyStats( #ifndef SQLITE_DEBUG UNUSED_PARAMETER( pParse ); #endif - assert( pRec!=0 || pParse->db->mallocFailed ); - if( pRec==0 ) return; + assert( pRec!=0 ); iCol = pRec->nField - 1; assert( pIdx->nSample>0 ); assert( pRec->nField>0 && iColnSampleCol ); @@ -109051,7 +110788,7 @@ static void whereKeyStats( iUpper = i>=pIdx->nSample ? pIdx->aiRowEst[0] : aSample[i].anLt[iCol]; iLower = aSample[i-1].anEq[iCol] + aSample[i-1].anLt[iCol]; } - aStat[1] = (pIdx->nColumn>iCol ? pIdx->aAvgEq[iCol] : 1); + aStat[1] = (pIdx->nKeyCol>iCol ? pIdx->aAvgEq[iCol] : 1); if( iLower>=iUpper ){ iGap = 0; }else{ @@ -109151,7 +110888,7 @@ static int whereRangeScanEst( tRowcnt iLower; tRowcnt iUpper; - if( nEq==p->nColumn ){ + if( nEq==p->nKeyCol ){ aff = SQLITE_AFF_INTEGER; }else{ aff = p->pTable->aCol[p->aiColumn[nEq]].affinity; @@ -109209,7 +110946,7 @@ static int whereRangeScanEst( nOut = nNew; } pLoop->nOut = (LogEst)nOut; - WHERETRACE(0x100, ("range scan regions: %u..%u est=%d\n", + WHERETRACE(0x10, ("range scan regions: %u..%u est=%d\n", (u32)iLower, (u32)iUpper, nOut)); return SQLITE_OK; } @@ -109269,7 +111006,7 @@ static int whereEqualScanEst( int bOk; assert( nEq>=1 ); - assert( nEq<=(p->nColumn+1) ); + assert( nEq<=(p->nKeyCol+1) ); assert( p->aSample!=0 ); assert( p->nSample>0 ); assert( pBuilder->nRecValidp->nColumn ){ + if( nEq>p->nKeyCol ){ *pnRow = 1; return SQLITE_OK; } @@ -109295,7 +111032,7 @@ static int whereEqualScanEst( pBuilder->nRecValid = nEq; whereKeyStats(pParse, p, pRec, 0, a); - WHERETRACE(0x100,("equality scan regions: %d\n", (int)a[1])); + WHERETRACE(0x10,("equality scan regions: %d\n", (int)a[1])); *pnRow = a[1]; return rc; @@ -109343,7 +111080,7 @@ static int whereInScanEst( if( rc==SQLITE_OK ){ if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0]; *pnRow = nRowEst; - WHERETRACE(0x100,("IN row estimate: est=%g\n", nRowEst)); + WHERETRACE(0x10,("IN row estimate: est=%g\n", nRowEst)); } assert( pBuilder->nRecValid==nRecValid ); return rc; @@ -109500,7 +111237,7 @@ static int codeEqualityTerm( }else{ pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg); } - pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next; + pIn->eEndLoopOp = bRev ? OP_PrevIfOpen : OP_NextIfOpen; sqlite3VdbeAddOp1(v, OP_IsNull, iReg); }else{ pLevel->u.in.nIn = 0; @@ -109513,7 +111250,7 @@ static int codeEqualityTerm( /* ** Generate code that will evaluate all == and IN constraints for an -** index. +** index scan. ** ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c). ** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10 @@ -109528,9 +111265,15 @@ static int codeEqualityTerm( ** The only thing it does is allocate the pLevel->iMem memory cell and ** compute the affinity string. ** -** This routine always allocates at least one memory cell and returns -** the index of that memory cell. The code that -** calls this routine will use that memory cell to store the termination +** The nExtraReg parameter is 0 or 1. It is 0 if all WHERE clause constraints +** are == or IN and are covered by the nEq. nExtraReg is 1 if there is +** an inequality constraint (such as the "c>=5 AND c<10" in the example) that +** occurs after the nEq quality constraints. +** +** This routine allocates a range of nEq+nExtraReg memory cells and returns +** the index of the first memory cell in that range. The code that +** calls this routine will use that memory range to store keys for +** start and termination conditions of the loop. ** key value of the loop. If one or more IN operators appear, then ** this routine allocates an additional nEq memory cells for internal ** use. @@ -109557,7 +111300,8 @@ static int codeAllEqualityTerms( int nExtraReg, /* Number of extra registers to allocate */ char **pzAff /* OUT: Set to point to affinity string */ ){ - int nEq; /* The number of == or IN constraints to code */ + u16 nEq; /* The number of == or IN constraints to code */ + u16 nSkip; /* Number of left-most columns to skip */ Vdbe *v = pParse->pVdbe; /* The vm under construction */ Index *pIdx; /* The index being used for this loop */ WhereTerm *pTerm; /* A single constraint term */ @@ -109571,6 +111315,7 @@ static int codeAllEqualityTerms( pLoop = pLevel->pWLoop; assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ); nEq = pLoop->u.btree.nEq; + nSkip = pLoop->u.btree.nSkip; pIdx = pLoop->u.btree.pIndex; assert( pIdx!=0 ); @@ -109585,14 +111330,29 @@ static int codeAllEqualityTerms( pParse->db->mallocFailed = 1; } + if( nSkip ){ + int iIdxCur = pLevel->iIdxCur; + sqlite3VdbeAddOp1(v, (bRev?OP_Last:OP_Rewind), iIdxCur); + VdbeComment((v, "begin skip-scan on %s", pIdx->zName)); + j = sqlite3VdbeAddOp0(v, OP_Goto); + pLevel->addrSkip = sqlite3VdbeAddOp4Int(v, (bRev?OP_SeekLt:OP_SeekGt), + iIdxCur, 0, regBase, nSkip); + sqlite3VdbeJumpHere(v, j); + for(j=0; jaiColumn[j]>=0 ); + VdbeComment((v, "%s", pIdx->pTable->aCol[pIdx->aiColumn[j]].zName)); + } + } + /* Evaluate the equality constraints */ assert( zAff==0 || (int)strlen(zAff)>=nEq ); - for(j=0; jaLTerm[j]; assert( pTerm!=0 ); - /* The following true for indices with redundant columns. + /* The following testcase is true for indices with redundant columns. ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */ testcase( (pTerm->wtFlags & TERM_CODED)!=0 ); testcase( pTerm->wtFlags & TERM_VIRTUAL ); @@ -109640,7 +111400,7 @@ static void explainAppendTerm( const char *zOp /* Name of the operator */ ){ if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5); - sqlite3StrAccumAppend(pStr, zColumn, -1); + sqlite3StrAccumAppendAll(pStr, zColumn); sqlite3StrAccumAppend(pStr, zOp, 1); sqlite3StrAccumAppend(pStr, "?", 1); } @@ -109666,10 +111426,11 @@ static void explainAppendTerm( */ static char *explainIndexRange(sqlite3 *db, WhereLoop *pLoop, Table *pTab){ Index *pIndex = pLoop->u.btree.pIndex; - int nEq = pLoop->u.btree.nEq; + u16 nEq = pLoop->u.btree.nEq; + u16 nSkip = pLoop->u.btree.nSkip; int i, j; Column *aCol = pTab->aCol; - int *aiColumn = pIndex->aiColumn; + i16 *aiColumn = pIndex->aiColumn; StrAccum txt; if( nEq==0 && (pLoop->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){ @@ -109679,17 +111440,24 @@ static char *explainIndexRange(sqlite3 *db, WhereLoop *pLoop, Table *pTab){ txt.db = db; sqlite3StrAccumAppend(&txt, " (", 2); for(i=0; inColumn ) ? "rowid" : aCol[aiColumn[i]].zName; - explainAppendTerm(&txt, i, z, "="); + char *z = (i==pIndex->nKeyCol ) ? "rowid" : aCol[aiColumn[i]].zName; + if( i>=nSkip ){ + explainAppendTerm(&txt, i, z, "="); + }else{ + if( i ) sqlite3StrAccumAppend(&txt, " AND ", 5); + sqlite3StrAccumAppend(&txt, "ANY(", 4); + sqlite3StrAccumAppendAll(&txt, z); + sqlite3StrAccumAppend(&txt, ")", 1); + } } j = i; if( pLoop->wsFlags&WHERE_BTM_LIMIT ){ - char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName; + char *z = (j==pIndex->nKeyCol ) ? "rowid" : aCol[aiColumn[j]].zName; explainAppendTerm(&txt, i++, z, ">"); } if( pLoop->wsFlags&WHERE_TOP_LIMIT ){ - char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName; + char *z = (j==pIndex->nKeyCol ) ? "rowid" : aCol[aiColumn[j]].zName; explainAppendTerm(&txt, i, z, "<"); } sqlite3StrAccumAppend(&txt, ")", 1); @@ -109710,7 +111478,10 @@ static void explainOneScan( int iFrom, /* Value for "from" column of output */ u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ ){ - if( pParse->explain==2 ){ +#ifndef SQLITE_DEBUG + if( pParse->explain==2 ) +#endif + { struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom]; Vdbe *v = pParse->pVdbe; /* VM being constructed */ sqlite3 *db = pParse->db; /* Database handle */ @@ -109816,7 +111587,7 @@ static Bitmask codeOneLoopStart( bRev = (pWInfo->revMask>>iLevel)&1; omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0 && (pWInfo->wctrlFlags & WHERE_FORCE_TABLE)==0; - VdbeNoopComment((v, "Begin Join Loop %d", iLevel)); + VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName)); /* Create labels for the "break" and "continue" instructions ** for the current loop. Jump to addrBrk to break out of a loop. @@ -110043,8 +111814,8 @@ static Bitmask codeOneLoopStart( OP_IdxGE, /* 1: (end_constraints && !bRev) */ OP_IdxLT /* 2: (end_constraints && bRev) */ }; - int nEq = pLoop->u.btree.nEq; /* Number of == or IN terms */ - int isMinQuery = 0; /* If this is an optimized SELECT min(x).. */ + u16 nEq = pLoop->u.btree.nEq; /* Number of == or IN terms */ + int isMinQuery = 0; /* If this is an optimized SELECT min(x).. */ int regBase; /* Base register holding constraint values */ int r1; /* Temp register */ WhereTerm *pRangeStart = 0; /* Inequality constraint at range start */ @@ -110058,10 +111829,11 @@ static Bitmask codeOneLoopStart( int nExtraReg = 0; /* Number of extra registers needed */ int op; /* Instruction opcode */ char *zStartAff; /* Affinity for start of range constraint */ - char *zEndAff; /* Affinity for end of range constraint */ + char cEndAff = 0; /* Affinity for end of range constraint */ pIdx = pLoop->u.btree.pIndex; iIdxCur = pLevel->iIdxCur; + assert( nEq>=pLoop->u.btree.nSkip ); /* If this loop satisfies a sort order (pOrderBy) request that ** was passed to this function to implement a "SELECT min(x) ..." @@ -110073,10 +111845,9 @@ static Bitmask codeOneLoopStart( */ if( (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)!=0 && (pWInfo->bOBSat!=0) - && (pIdx->nColumn>nEq) + && (pIdx->nKeyCol>nEq) ){ - /* assert( pOrderBy->nExpr==1 ); */ - /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */ + assert( pLoop->u.btree.nSkip==0 ); isMinQuery = 1; nExtraReg = 1; } @@ -110099,15 +111870,16 @@ static Bitmask codeOneLoopStart( ** starting at regBase. */ regBase = codeAllEqualityTerms(pParse,pLevel,bRev,nExtraReg,&zStartAff); - zEndAff = sqlite3DbStrDup(db, zStartAff); + assert( zStartAff==0 || sqlite3Strlen30(zStartAff)>=nEq ); + if( zStartAff ) cEndAff = zStartAff[nEq]; addrNxt = pLevel->addrNxt; /* If we are doing a reverse order scan on an ascending index, or ** a forward order scan on a descending index, interchange the ** start and end terms (pRangeStart and pRangeEnd). */ - if( (nEqnColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC)) - || (bRev && pIdx->nColumn==nEq) + if( (nEqnKeyCol && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC)) + || (bRev && pIdx->nKeyCol==nEq) ){ SWAP(WhereTerm *, pRangeEnd, pRangeStart); } @@ -110169,23 +111941,15 @@ static Bitmask codeOneLoopStart( if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){ sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt); } - if( zEndAff ){ - if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){ - /* Since the comparison is to be performed with no conversions - ** applied to the operands, set the affinity to apply to pRight to - ** SQLITE_AFF_NONE. */ - zEndAff[nEq] = SQLITE_AFF_NONE; - } - if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){ - zEndAff[nEq] = SQLITE_AFF_NONE; - } - } - codeApplyAffinity(pParse, regBase, nEq+1, zEndAff); + if( sqlite3CompareAffinity(pRight, cEndAff)!=SQLITE_AFF_NONE + && !sqlite3ExprNeedsNoAffinityChange(pRight, cEndAff) + ){ + codeApplyAffinity(pParse, regBase+nEq, 1, &cEndAff); + } nConstraint++; testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); } sqlite3DbFree(db, zStartAff); - sqlite3DbFree(db, zEndAff); /* Top of the loop body */ pLevel->p2 = sqlite3VdbeCurrentAddr(v); @@ -110207,8 +111971,13 @@ static Bitmask codeOneLoopStart( r1 = sqlite3GetTempReg(pParse); testcase( pLoop->wsFlags & WHERE_BTM_LIMIT ); testcase( pLoop->wsFlags & WHERE_TOP_LIMIT ); - if( (pLoop->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){ + if( (pLoop->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 + && (j = pIdx->aiColumn[nEq])>=0 + && pIdx->pTable->aCol[j].notNull==0 + && (nEq || (pLoop->wsFlags & WHERE_BTM_LIMIT)==0) + ){ sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1); + VdbeComment((v, "%s", pIdx->pTable->aCol[j].zName)); sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont); } sqlite3ReleaseTempReg(pParse, r1); @@ -110216,11 +111985,22 @@ static Bitmask codeOneLoopStart( /* Seek the table cursor, if required */ disableTerm(pLevel, pRangeStart); disableTerm(pLevel, pRangeEnd); - if( !omitTable ){ + if( omitTable ){ + /* pIdx is a covering index. No need to access the main table. */ + }else if( HasRowid(pIdx->pTable) ){ iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */ + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pIdx->pTable); + iRowidReg = sqlite3GetTempRange(pParse, pPk->nKeyCol); + for(j=0; jnKeyCol; j++){ + k = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[j]); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, iRowidReg+j); + } + sqlite3VdbeAddOp4Int(v, OP_NotFound, iCur, addrCont, + iRowidReg, pPk->nKeyCol); } /* Record the instruction used to terminate the loop. Disable @@ -110364,7 +112144,9 @@ static Bitmask codeOneLoopStart( Expr *pExpr = pWC->a[iTerm].pExpr; if( &pWC->a[iTerm] == pTerm ) continue; if( ExprHasProperty(pExpr, EP_FromJoin) ) continue; - if( pWC->a[iTerm].wtFlags & (TERM_ORINFO) ) continue; + testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO ); + testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL ); + if( pWC->a[iTerm].wtFlags & (TERM_ORINFO|TERM_VIRTUAL) ) continue; if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue; pExpr = sqlite3ExprDup(db, pExpr, 0); pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr); @@ -110460,10 +112242,16 @@ static Bitmask codeOneLoopStart( static const u8 aStep[] = { OP_Next, OP_Prev }; static const u8 aStart[] = { OP_Rewind, OP_Last }; assert( bRev==0 || bRev==1 ); - pLevel->op = aStep[bRev]; - pLevel->p1 = iCur; - pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk); - pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + if( pTabItem->isRecursive ){ + /* Tables marked isRecursive have only a single row that is stored in + ** a pseudo-cursor. No need to Rewind or Next such cursors. */ + pLevel->op = OP_Noop; + }else{ + pLevel->op = aStep[bRev]; + pLevel->p1 = iCur; + pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk); + pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + } } /* Insert code to test every subexpression that can be completely @@ -110512,7 +112300,7 @@ static Bitmask codeOneLoopStart( if( pAlt->wtFlags & (TERM_CODED) ) continue; testcase( pAlt->eOperator & WO_EQ ); testcase( pAlt->eOperator & WO_IN ); - VdbeNoopComment((v, "begin transitive constraint")); + VdbeModuleComment((v, "begin transitive constraint")); pEAlt = sqlite3StackAllocRaw(db, sizeof(*pEAlt)); if( pEAlt ){ *pEAlt = *pAlt->pExpr; @@ -110548,22 +112336,38 @@ static Bitmask codeOneLoopStart( return pLevel->notReady; } +#if defined(WHERETRACE_ENABLED) && defined(SQLITE_ENABLE_TREE_EXPLAIN) +/* +** Generate "Explanation" text for a WhereTerm. +*/ +static void whereExplainTerm(Vdbe *v, WhereTerm *pTerm){ + char zType[4]; + memcpy(zType, "...", 4); + if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V'; + if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E'; + if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L'; + sqlite3ExplainPrintf(v, "%s ", zType); + sqlite3ExplainExpr(v, pTerm->pExpr); +} +#endif /* WHERETRACE_ENABLED && SQLITE_ENABLE_TREE_EXPLAIN */ + + #ifdef WHERETRACE_ENABLED /* ** Print a WhereLoop object for debugging purposes */ -static void whereLoopPrint(WhereLoop *p, SrcList *pTabList){ - int nb = 1+(pTabList->nSrc+7)/8; - struct SrcList_item *pItem = pTabList->a + p->iTab; +static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){ + WhereInfo *pWInfo = pWC->pWInfo; + int nb = 1+(pWInfo->pTabList->nSrc+7)/8; + struct SrcList_item *pItem = pWInfo->pTabList->a + p->iTab; Table *pTab = pItem->pTab; sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId, p->iTab, nb, p->maskSelf, nb, p->prereq); sqlite3DebugPrintf(" %12s", pItem->zAlias ? pItem->zAlias : pTab->zName); if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){ - if( p->u.btree.pIndex ){ - const char *zName = p->u.btree.pIndex->zName; - if( zName==0 ) zName = "ipk"; + const char *zName; + if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){ if( strncmp(zName, "sqlite_autoindex_", 17)==0 ){ int i = sqlite3Strlen30(zName) - 1; while( zName[i]!='_' ) i--; @@ -110586,6 +112390,27 @@ static void whereLoopPrint(WhereLoop *p, SrcList *pTabList){ } sqlite3DebugPrintf(" f %04x N %d", p->wsFlags, p->nLTerm); sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut); +#ifdef SQLITE_ENABLE_TREE_EXPLAIN + /* If the 0x100 bit of wheretracing is set, then show all of the constraint + ** expressions in the WhereLoop.aLTerm[] array. + */ + if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){ /* WHERETRACE 0x100 */ + int i; + Vdbe *v = pWInfo->pParse->pVdbe; + sqlite3ExplainBegin(v); + for(i=0; inLTerm; i++){ + WhereTerm *pTerm = p->aLTerm[i]; + if( pTerm==0 ) continue; + sqlite3ExplainPrintf(v, " (%d) #%-2d ", i+1, (int)(pTerm-pWC->a)); + sqlite3ExplainPush(v); + whereExplainTerm(v, pTerm); + sqlite3ExplainPop(v); + sqlite3ExplainNL(v); + } + sqlite3ExplainFinish(v); + sqlite3DebugPrintf("%s", sqlite3VdbeExplanation(v)); + } +#endif } #endif @@ -110611,6 +112436,7 @@ static void whereLoopClearUnion(sqlite3 *db, WhereLoop *p){ p->u.vtab.idxStr = 0; }else if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 && p->u.btree.pIndex!=0 ){ sqlite3DbFree(db, p->u.btree.pIndex->zColAff); + sqlite3KeyInfoUnref(p->u.btree.pIndex->pKeyInfo); sqlite3DbFree(db, p->u.btree.pIndex); p->u.btree.pIndex = 0; } @@ -110725,10 +112551,10 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ #endif whereOrInsert(pBuilder->pOrSet, pTemplate->prereq, pTemplate->rRun, pTemplate->nOut); -#if WHERETRACE_ENABLED +#if WHERETRACE_ENABLED /* 0x8 */ if( sqlite3WhereTrace & 0x8 ){ sqlite3DebugPrintf(x?" or-%d: ":" or-X: ", n); - whereLoopPrint(pTemplate, pWInfo->pTabList); + whereLoopPrint(pTemplate, pBuilder->pWC); } #endif return SQLITE_OK; @@ -110798,14 +112624,14 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ ** with pTemplate[] if p[] exists, or if p==NULL then allocate a new ** WhereLoop and insert it. */ -#if WHERETRACE_ENABLED +#if WHERETRACE_ENABLED /* 0x8 */ if( sqlite3WhereTrace & 0x8 ){ if( p!=0 ){ sqlite3DebugPrintf("ins-del: "); - whereLoopPrint(p, pWInfo->pTabList); + whereLoopPrint(p, pBuilder->pWC); } sqlite3DebugPrintf("ins-new: "); - whereLoopPrint(pTemplate, pWInfo->pTabList); + whereLoopPrint(pTemplate, pBuilder->pWC); } #endif if( p==0 ){ @@ -110826,10 +112652,10 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ /* Jump here if the insert is a no-op */ whereLoopInsert_noop: -#if WHERETRACE_ENABLED +#if WHERETRACE_ENABLED /* 0x8 */ if( sqlite3WhereTrace & 0x8 ){ sqlite3DebugPrintf("ins-noop: "); - whereLoopPrint(pTemplate, pWInfo->pTabList); + whereLoopPrint(pTemplate, pBuilder->pWC); } #endif return SQLITE_OK; @@ -110858,6 +112684,7 @@ static void whereLoopOutputAdjust(WhereClause *pWC, WhereLoop *pLoop){ if( (pTerm->prereqAll & notAllowed)!=0 ) continue; for(j=pLoop->nLTerm-1; j>=0; j--){ pX = pLoop->aLTerm[j]; + if( pX==0 ) continue; if( pX==pTerm ) break; if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break; } @@ -110887,7 +112714,8 @@ static int whereLoopAddBtreeIndex( WhereScan scan; /* Iterator for WHERE terms */ Bitmask saved_prereq; /* Original value of pNew->prereq */ u16 saved_nLTerm; /* Original value of pNew->nLTerm */ - int saved_nEq; /* Original value of pNew->u.btree.nEq */ + u16 saved_nEq; /* Original value of pNew->u.btree.nEq */ + u16 saved_nSkip; /* Original value of pNew->u.btree.nSkip */ u32 saved_wsFlags; /* Original value of pNew->wsFlags */ LogEst saved_nOut; /* Original value of pNew->nOut */ int iCol; /* Index of the column in the table */ @@ -110910,8 +112738,8 @@ static int whereLoopAddBtreeIndex( } if( pProbe->bUnordered ) opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE); - assert( pNew->u.btree.nEq<=pProbe->nColumn ); - if( pNew->u.btree.nEq < pProbe->nColumn ){ + assert( pNew->u.btree.nEq<=pProbe->nKeyCol ); + if( pNew->u.btree.nEq < pProbe->nKeyCol ){ iCol = pProbe->aiColumn[pNew->u.btree.nEq]; nRowEst = sqlite3LogEst(pProbe->aiRowEst[pNew->u.btree.nEq+1]); if( nRowEst==0 && pProbe->onError==OE_None ) nRowEst = 1; @@ -110922,12 +112750,34 @@ static int whereLoopAddBtreeIndex( pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, iCol, opMask, pProbe); saved_nEq = pNew->u.btree.nEq; + saved_nSkip = pNew->u.btree.nSkip; saved_nLTerm = pNew->nLTerm; saved_wsFlags = pNew->wsFlags; saved_prereq = pNew->prereq; saved_nOut = pNew->nOut; pNew->rSetup = 0; rLogSize = estLog(sqlite3LogEst(pProbe->aiRowEst[0])); + + /* Consider using a skip-scan if there are no WHERE clause constraints + ** available for the left-most terms of the index, and if the average + ** number of repeats in the left-most terms is at least 18. The magic + ** number 18 was found by experimentation to be the payoff point where + ** skip-scan become faster than a full-scan. + */ + if( pTerm==0 + && saved_nEq==saved_nSkip + && saved_nEq+1nKeyCol + && pProbe->aiRowEst[saved_nEq+1]>=18 /* TUNING: Minimum for skip-scan */ + && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK + ){ + LogEst nIter; + pNew->u.btree.nEq++; + pNew->u.btree.nSkip++; + pNew->aLTerm[pNew->nLTerm++] = 0; + pNew->wsFlags |= WHERE_SKIPSCAN; + nIter = sqlite3LogEst(pProbe->aiRowEst[0]/pProbe->aiRowEst[saved_nEq+1]); + whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter); + } for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){ int nIn = 0; #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 @@ -110963,12 +112813,14 @@ static int whereLoopAddBtreeIndex( pNew->u.btree.nEq++; pNew->nOut = nRowEst + nInMul + nIn; }else if( pTerm->eOperator & (WO_EQ) ){ - assert( (pNew->wsFlags & (WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 - || nInMul==0 ); + assert( + (pNew->wsFlags & (WHERE_COLUMN_NULL|WHERE_COLUMN_IN|WHERE_SKIPSCAN))!=0 + || nInMul==0 + ); pNew->wsFlags |= WHERE_COLUMN_EQ; if( iCol<0 || (pProbe->onError!=OE_None && nInMul==0 - && pNew->u.btree.nEq==pProbe->nColumn-1) + && pNew->u.btree.nEq==pProbe->nKeyCol-1) ){ assert( (pNew->wsFlags & WHERE_COLUMN_IN)==0 || iCol<0 ); pNew->wsFlags |= WHERE_ONEROW; @@ -111034,7 +112886,7 @@ static int whereLoopAddBtreeIndex( whereLoopOutputAdjust(pBuilder->pWC, pNew); rc = whereLoopInsert(pBuilder, pNew); if( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 - && pNew->u.btree.nEq<(pProbe->nColumn + (pProbe->zName!=0)) + && pNew->u.btree.nEq<(pProbe->nKeyCol + (pProbe->zName!=0)) ){ whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nInMul+nIn); } @@ -111045,6 +112897,7 @@ static int whereLoopAddBtreeIndex( } pNew->prereq = saved_prereq; pNew->u.btree.nEq = saved_nEq; + pNew->u.btree.nSkip = saved_nSkip; pNew->wsFlags = saved_wsFlags; pNew->nOut = saved_nOut; pNew->nLTerm = saved_nLTerm; @@ -111073,7 +112926,7 @@ static int indexMightHelpWithOrderBy( Expr *pExpr = sqlite3ExprSkipCollate(pOB->a[ii].pExpr); if( pExpr->op!=TK_COLUMN ) return 0; if( pExpr->iTable==iCursor ){ - for(jj=0; jjnColumn; jj++){ + for(jj=0; jjnKeyCol; jj++){ if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1; } } @@ -111090,10 +112943,11 @@ static Bitmask columnsInIndex(Index *pIdx){ int j; for(j=pIdx->nColumn-1; j>=0; j--){ int x = pIdx->aiColumn[j]; - assert( x>=0 ); - testcase( x==BMS-1 ); - testcase( x==BMS-2 ); - if( x=0 ){ + testcase( x==BMS-1 ); + testcase( x==BMS-2 ); + if( xpIndex ){ /* An INDEXED BY clause specifies a particular index to use */ pProbe = pSrc->pIndex; + }else if( !HasRowid(pTab) ){ + pProbe = pTab->pIndex; }else{ /* There is no INDEXED BY clause. Create a fake Index object in local ** variable sPk to represent the rowid primary key index. Make this @@ -111153,7 +113009,7 @@ static int whereLoopAddBtree( ** indices to follow */ Index *pFirst; /* First of real indices on the table */ memset(&sPk, 0, sizeof(Index)); - sPk.nColumn = 1; + sPk.nKeyCol = 1; sPk.aiColumn = &aiColumnPk; sPk.aiRowEst = aiRowEstPk; sPk.onError = OE_Replace; @@ -111178,7 +113034,9 @@ static int whereLoopAddBtree( && pSrc->pIndex==0 && !pSrc->viaCoroutine && !pSrc->notIndexed + && HasRowid(pTab) && !pSrc->isCorrelated + && !pSrc->isRecursive ){ /* Generate auto-index WhereLoops */ WhereTerm *pTerm; @@ -111187,6 +113045,7 @@ static int whereLoopAddBtree( if( pTerm->prereqRight & pNew->maskSelf ) continue; if( termCanDriveIndex(pTerm, pSrc, 0) ){ pNew->u.btree.nEq = 1; + pNew->u.btree.nSkip = 0; pNew->u.btree.pIndex = 0; pNew->nLTerm = 1; pNew->aLTerm[0] = pTerm; @@ -111216,6 +113075,7 @@ static int whereLoopAddBtree( continue; /* Partial index inappropriate for this query */ } pNew->u.btree.nEq = 0; + pNew->u.btree.nSkip = 0; pNew->nLTerm = 0; pNew->iSortIdx = 0; pNew->rSetup = 0; @@ -111240,14 +113100,21 @@ static int whereLoopAddBtree( pNew->nOut = rSize; if( rc ) break; }else{ - Bitmask m = pSrc->colUsed & ~columnsInIndex(pProbe); - pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED; + Bitmask m; + if( pProbe->isCovering ){ + pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; + m = 0; + }else{ + m = pSrc->colUsed & ~columnsInIndex(pProbe); + pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED; + } /* Full scan via index */ if( b + || !HasRowid(pTab) || ( m==0 && pProbe->bUnordered==0 - && pProbe->szIdxRowszTabRow + && (pProbe->szIdxRowszTabRow) && (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 && sqlite3GlobalConfig.bUseCis && OptimizationEnabled(pWInfo->pParse->db, SQLITE_CoverIdxScan) @@ -111263,7 +113130,6 @@ static int whereLoopAddBtree( pNew->rRun = sqlite3LogEstAdd(rSize,rLogSize) + 1 + (15*pProbe->szIdxRow)/pTab->szTabRow; }else{ - assert( b!=0 ); /* TUNING: Cost of scanning a non-covering index is (N+1)*log2(N) ** which we will simplify to just N*log2(N) */ pNew->rRun = rSize + rLogSize; @@ -111295,7 +113161,8 @@ static int whereLoopAddBtree( ** pBuilder->pNew->iTab. That table is guaranteed to be a virtual table. */ static int whereLoopAddVirtual( - WhereLoopBuilder *pBuilder /* WHERE clause information */ + WhereLoopBuilder *pBuilder, /* WHERE clause information */ + Bitmask mExtra ){ WhereInfo *pWInfo; /* WHERE analysis context */ Parse *pParse; /* The parsing context */ @@ -111381,10 +113248,11 @@ static int whereLoopAddVirtual( pIdxInfo->needToFreeIdxStr = 0; pIdxInfo->orderByConsumed = 0; pIdxInfo->estimatedCost = SQLITE_BIG_DBL / (double)2; + pIdxInfo->estimatedRows = 25; rc = vtabBestIndex(pParse, pTab, pIdxInfo); if( rc ) goto whereLoopAddVtab_exit; pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; - pNew->prereq = 0; + pNew->prereq = mExtra; mxTerm = -1; assert( pNew->nLSlot>=nConstraint ); for(i=0; iaLTerm[i] = 0; @@ -111440,8 +113308,7 @@ static int whereLoopAddVirtual( && pIdxInfo->orderByConsumed); pNew->rSetup = 0; pNew->rRun = sqlite3LogEstFromDouble(pIdxInfo->estimatedCost); - /* TUNING: Every virtual table query returns 25 rows */ - pNew->nOut = 46; assert( 46==sqlite3LogEst(25) ); + pNew->nOut = sqlite3LogEst(pIdxInfo->estimatedRows); whereLoopInsert(pBuilder, pNew); if( pNew->u.vtab.needFree ){ sqlite3_free(pNew->u.vtab.idxStr); @@ -111479,6 +113346,7 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){ pNew = pBuilder->pNew; memset(&sSum, 0, sizeof(sSum)); pItem = pWInfo->pTabList->a + pNew->iTab; + if( !HasRowid(pItem->pTab) ) return SQLITE_OK; iCur = pItem->iCursor; for(pTerm=pWC->a; pTermpTab) ){ - rc = whereLoopAddVirtual(&sSubBuild); - for(i=0; ijointype; if( IsVirtual(pItem->pTab) ){ - rc = whereLoopAddVirtual(pBuilder); + rc = whereLoopAddVirtual(pBuilder, mExtra); }else{ rc = whereLoopAddBtree(pBuilder, mExtra); } @@ -111628,7 +113495,8 @@ static int wherePathSatisfiesOrderBy( u8 isOrderDistinct; /* All prior WhereLoops are order-distinct */ u8 distinctColumns; /* True if the loop has UNIQUE NOT NULL columns */ u8 isMatch; /* iColumn matches a term of the ORDER BY clause */ - u16 nColumn; /* Number of columns in pIndex */ + u16 nKeyCol; /* Number of key columns in pIndex */ + u16 nColumn; /* Total number of ordered columns in the index */ u16 nOrderBy; /* Number terms in the ORDER BY clause */ int iLoop; /* Index of WhereLoop in pPath being processed */ int i, j; /* Loop counters */ @@ -111720,11 +113588,15 @@ static int wherePathSatisfiesOrderBy( if( (pLoop->wsFlags & WHERE_ONEROW)==0 ){ if( pLoop->wsFlags & WHERE_IPK ){ pIndex = 0; - nColumn = 0; + nKeyCol = 0; + nColumn = 1; }else if( (pIndex = pLoop->u.btree.pIndex)==0 || pIndex->bUnordered ){ return 0; }else{ + nKeyCol = pIndex->nKeyCol; nColumn = pIndex->nColumn; + assert( nColumn==nKeyCol+1 || !HasRowid(pIndex->pTable) ); + assert( pIndex->aiColumn[nColumn-1]==(-1) || !HasRowid(pIndex->pTable)); isOrderDistinct = pIndex->onError!=OE_None; } @@ -111733,11 +113605,12 @@ static int wherePathSatisfiesOrderBy( */ rev = revSet = 0; distinctColumns = 0; - for(j=0; j<=nColumn; j++){ + for(j=0; ju.btree.nEq + && pLoop->u.btree.nSkip==0 && ((i = pLoop->aLTerm[j]->eOperator) & (WO_EQ|WO_ISNULL))!=0 ){ if( i & WO_ISNULL ){ @@ -111750,20 +113623,17 @@ static int wherePathSatisfiesOrderBy( /* Get the column number in the table (iColumn) and sort order ** (revIdx) for the j-th column of the index. */ - if( jaiColumn[j]; revIdx = pIndex->aSortOrder[j]; if( iColumn==pIndex->pTable->iPKey ) iColumn = -1; }else{ - /* The ROWID column at the end */ - assert( j==nColumn ); iColumn = -1; revIdx = 0; } /* An unconstrained column that might be NULL means that this - ** WhereLoop is not well-ordered + ** WhereLoop is not well-ordered */ if( isOrderDistinct && iColumn>=0 @@ -111814,7 +113684,7 @@ static int wherePathSatisfiesOrderBy( } }else{ /* No match found */ - if( j==0 || j=nTo ){ if( nTo>=mxChoice && rCost>=mxCost ){ -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf("Skip %s cost=%-3d,%3d order=%c\n", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, @@ -112005,7 +113875,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ jj = mxI; } pTo = &aTo[jj]; -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf("New %s cost=%-3d,%3d order=%c\n", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, @@ -112014,7 +113884,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ #endif }else{ if( pTo->rCost<=rCost && pTo->nRow<=nOut ){ -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( "Skip %s cost=%-3d,%3d order=%c", @@ -112030,7 +113900,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ } testcase( pTo->rCost==rCost+1 ); /* A new and better score for a previously created equivalent path */ -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( "Update %s cost=%-3d,%3d order=%c", @@ -112066,7 +113936,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ } } -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* >=2 */ if( sqlite3WhereTrace>=2 ){ sqlite3DebugPrintf("---- after round %d ----\n", iLoop); for(ii=0, pTo=aTo; iisWC; pLoop = pBuilder->pNew; pLoop->wsFlags = 0; + pLoop->u.btree.nSkip = 0; pTerm = findTerm(pWC, iCur, -1, 0, WO_EQ, 0); if( pTerm ){ pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW; @@ -112180,16 +114051,16 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ assert( ArraySize(pLoop->aLTermSpace)==4 ); if( pIdx->onError==OE_None || pIdx->pPartIdxWhere!=0 - || pIdx->nColumn>ArraySize(pLoop->aLTermSpace) + || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace) ) continue; - for(j=0; jnColumn; j++){ + for(j=0; jnKeyCol; j++){ pTerm = findTerm(pWC, iCur, pIdx->aiColumn[j], 0, WO_EQ, pIdx); if( pTerm==0 ) break; pLoop->aLTerm[j] = pTerm; } - if( j!=pIdx->nColumn ) continue; + if( j!=pIdx->nKeyCol ) continue; pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED; - if( (pItem->colUsed & ~columnsInIndex(pIdx))==0 ){ + if( pIdx->isCovering || (pItem->colUsed & ~columnsInIndex(pIdx))==0 ){ pLoop->wsFlags |= WHERE_IDX_ONLY; } pLoop->nLTerm = j; @@ -112297,6 +114168,14 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ ** if the WHERE_GROUPBY flag is set in wctrlFlags) of a SELECT statement ** if there is one. If there is no ORDER BY clause or if this routine ** is called from an UPDATE or DELETE statement, then pOrderBy is NULL. +** +** The iIdxCur parameter is the cursor number of an index. If +** WHERE_ONETABLE_ONLY is set, iIdxCur is the cursor number of an index +** to use for OR clause processing. The WHERE clause should use this +** specific cursor. If WHERE_ONEPASS_DESIRED is set, then iIdxCur is +** the first cursor in an array of cursors for all indices. iIdxCur should +** be used to compute the appropriate cursor depending on which index is +** used. */ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( Parse *pParse, /* The parser context */ @@ -112362,6 +114241,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( pWInfo = 0; goto whereBeginError; } + pWInfo->aiCurOnePass[0] = pWInfo->aiCurOnePass[1] = -1; pWInfo->nLevel = nTabList; pWInfo->pParse = pParse; pWInfo->pTabList = pTabList; @@ -112385,16 +114265,18 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( */ initMaskSet(pMaskSet); whereClauseInit(&pWInfo->sWC, pWInfo); - sqlite3ExprCodeConstants(pParse, pWhere); whereSplit(&pWInfo->sWC, pWhere, TK_AND); sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */ /* Special case: a WHERE clause that is constant. Evaluate the ** expression and either jump over all of the code or fall thru. */ - if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){ - sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL); - pWhere = 0; + for(ii=0; iinTerm; ii++){ + if( nTabList==0 || sqlite3ExprIsConstantNotJoin(sWLB.pWC->a[ii].pExpr) ){ + sqlite3ExprIfFalse(pParse, sWLB.pWC->a[ii].pExpr, pWInfo->iBreak, + SQLITE_JUMPIFNULL); + sWLB.pWC->a[ii].wtFlags |= TERM_CODED; + } } /* Special case: No FROM clause @@ -112475,12 +114357,29 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( /* Construct the WhereLoop objects */ WHERETRACE(0xffff,("*** Optimizer Start ***\n")); + /* Display all terms of the WHERE clause */ +#if defined(WHERETRACE_ENABLED) && defined(SQLITE_ENABLE_TREE_EXPLAIN) + if( sqlite3WhereTrace & 0x100 ){ + int i; + Vdbe *v = pParse->pVdbe; + sqlite3ExplainBegin(v); + for(i=0; inTerm; i++){ + sqlite3ExplainPrintf(v, "#%-2d ", i); + sqlite3ExplainPush(v); + whereExplainTerm(v, &sWLB.pWC->a[i]); + sqlite3ExplainPop(v); + sqlite3ExplainNL(v); + } + sqlite3ExplainFinish(v); + sqlite3DebugPrintf("%s", sqlite3VdbeExplanation(v)); + } +#endif if( nTabList!=1 || whereShortCut(&sWLB)==0 ){ rc = whereLoopAddAll(&sWLB); if( rc ) goto whereBeginError; /* Display all of the WhereLoop objects if wheretrace is enabled */ -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* !=0 */ if( sqlite3WhereTrace ){ WhereLoop *p; int i; @@ -112488,7 +114387,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( "ABCDEFGHIJKLMNOPQRSTUVWYXZ"; for(p=pWInfo->pLoops, i=0; p; p=p->pNextLoop, i++){ p->cId = zLabel[i%sizeof(zLabel)]; - whereLoopPrint(p, pTabList); + whereLoopPrint(p, sWLB.pWC); } } #endif @@ -112506,7 +114405,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( pParse->nErr || NEVER(db->mallocFailed) ){ goto whereBeginError; } -#ifdef WHERETRACE_ENABLED +#ifdef WHERETRACE_ENABLED /* !=0 */ if( sqlite3WhereTrace ){ int ii; sqlite3DebugPrintf("---- Solution nRow=%d", pWInfo->nRowOut); @@ -112529,7 +114428,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( } sqlite3DebugPrintf("\n"); for(ii=0; iinLevel; ii++){ - whereLoopPrint(pWInfo->a[ii].pWLoop, pTabList); + whereLoopPrint(pWInfo->a[ii].pWLoop, sWLB.pWC); } } #endif @@ -112576,7 +114475,9 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (pWInfo->a[0].pWLoop->wsFlags & WHERE_ONEROW)!=0 ){ pWInfo->okOnePass = 1; - pWInfo->a[0].pWLoop->wsFlags &= ~WHERE_IDX_ONLY; + if( HasRowid(pTabList->a[0].pTab) ){ + pWInfo->a[0].pWLoop->wsFlags &= ~WHERE_IDX_ONLY; + } } /* Open all tables in the pTabList and any indices selected for @@ -112606,11 +114507,16 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( #endif if( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 && (wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 ){ - int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead; + int op = OP_OpenRead; + if( pWInfo->okOnePass ){ + op = OP_OpenWrite; + pWInfo->aiCurOnePass[0] = pTabItem->iCursor; + }; sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op); + assert( pTabItem->iCursor==pLevel->iTabCur ); testcase( !pWInfo->okOnePass && pTab->nCol==BMS-1 ); testcase( !pWInfo->okOnePass && pTab->nCol==BMS ); - if( !pWInfo->okOnePass && pTab->nColokOnePass && pTab->nColcolUsed; int n = 0; for(; b; b=b>>1, n++){} @@ -112623,13 +114529,30 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( } if( pLoop->wsFlags & WHERE_INDEXED ){ Index *pIx = pLoop->u.btree.pIndex; - KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx); - /* FIXME: As an optimization use pTabItem->iCursor if WHERE_IDX_ONLY */ - int iIndexCur = pLevel->iIdxCur = iIdxCur ? iIdxCur : pParse->nTab++; + int iIndexCur; + int op = OP_OpenRead; + /* iIdxCur is always set if to a positive value if ONEPASS is possible */ + assert( iIdxCur!=0 || (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 ); + if( pWInfo->okOnePass ){ + Index *pJ = pTabItem->pTab->pIndex; + iIndexCur = iIdxCur; + assert( wctrlFlags & WHERE_ONEPASS_DESIRED ); + while( ALWAYS(pJ) && pJ!=pIx ){ + iIndexCur++; + pJ = pJ->pNext; + } + op = OP_OpenWrite; + pWInfo->aiCurOnePass[1] = iIndexCur; + }else if( iIdxCur && (wctrlFlags & WHERE_ONETABLE_ONLY)!=0 ){ + iIndexCur = iIdxCur; + }else{ + iIndexCur = pParse->nTab++; + } + pLevel->iIdxCur = iIndexCur; assert( pIx->pSchema==pTab->pSchema ); assert( iIndexCur>=0 ); - sqlite3VdbeAddOp4(v, OP_OpenRead, iIndexCur, pIx->tnum, iDb, - (char*)pKey, P4_KEYINFO_HANDOFF); + sqlite3VdbeAddOp3(v, op, iIndexCur, pIx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIx); VdbeComment((v, "%s", pIx->zName)); } sqlite3CodeVerifySchema(pParse, iDb); @@ -112659,6 +114582,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( } /* Done. */ + VdbeModuleComment((v, "Begin WHERE-core")); return pWInfo; /* Jump here if malloc fails */ @@ -112685,8 +114609,10 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ /* Generate loop termination code. */ + VdbeModuleComment((v, "End WHERE-core")); sqlite3ExprCacheClear(pParse); for(i=pWInfo->nLevel-1; i>=0; i--){ + int addr; pLevel = &pWInfo->a[i]; pLoop = pLevel->pWLoop; sqlite3VdbeResolveLabel(v, pLevel->addrCont); @@ -112706,8 +114632,13 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ sqlite3DbFree(db, pLevel->u.in.aInLoop); } sqlite3VdbeResolveLabel(v, pLevel->addrBrk); + if( pLevel->addrSkip ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrSkip); + VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName)); + sqlite3VdbeJumpHere(v, pLevel->addrSkip); + sqlite3VdbeJumpHere(v, pLevel->addrSkip-2); + } if( pLevel->iLeftJoin ){ - int addr; addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || (pLoop->wsFlags & WHERE_INDEXED)!=0 ); @@ -112724,6 +114655,8 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ } sqlite3VdbeJumpHere(v, addr); } + VdbeModuleComment((v, "End WHERE-loop%d: %s", i, + pWInfo->pTabList->a[pLevel->iFrom].pTab->zName)); } /* The "break" point is here, just past the end of the outer loop. @@ -112731,8 +114664,6 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ */ sqlite3VdbeResolveLabel(v, pWInfo->iBreak); - /* Close all of the cursors that were opened by sqlite3WhereBegin. - */ assert( pWInfo->nLevel<=pTabList->nSrc ); for(i=0, pLevel=pWInfo->a; inLevel; i++, pLevel++){ Index *pIdx = 0; @@ -112740,6 +114671,12 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ Table *pTab = pTabItem->pTab; assert( pTab!=0 ); pLoop = pLevel->pWLoop; + + /* Close all of the cursors that were opened by sqlite3WhereBegin. + ** Except, do not close cursors that will be reused by the OR optimization + ** (WHERE_OMIT_OPEN_CLOSE). And do not close the OP_OpenWrite cursors + ** created for the ONEPASS optimization. + */ if( (pTab->tabFlags & TF_Ephemeral)==0 && pTab->pSelect==0 && (pWInfo->wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 @@ -112748,7 +114685,10 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){ sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor); } - if( (ws & WHERE_INDEXED)!=0 && (ws & (WHERE_IPK|WHERE_AUTO_INDEX))==0 ){ + if( (ws & WHERE_INDEXED)!=0 + && (ws & (WHERE_IPK|WHERE_AUTO_INDEX))==0 + && pLevel->iIdxCur!=pWInfo->aiCurOnePass[1] + ){ sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur); } } @@ -112770,7 +114710,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ pIdx = pLevel->u.pCovidx; } if( pIdx && !db->mallocFailed ){ - int k, j, last; + int k, last; VdbeOp *pOp; last = sqlite3VdbeCurrentAddr(v); @@ -112779,14 +114719,18 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ for(; kp1!=pLevel->iTabCur ) continue; if( pOp->opcode==OP_Column ){ - for(j=0; jnColumn; j++){ - if( pOp->p2==pIdx->aiColumn[j] ){ - pOp->p2 = j; - pOp->p1 = pLevel->iIdxCur; - break; - } + int x = pOp->p2; + assert( pIdx->pTable==pTab ); + if( !HasRowid(pTab) ){ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + x = pPk->aiColumn[x]; } - assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || jnColumn ); + x = sqlite3ColumnOfIndex(pIdx, x); + if( x>=0 ){ + pOp->p2 = x; + pOp->p1 = pLevel->iIdxCur; + } + assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0 ); }else if( pOp->opcode==OP_Rowid ){ pOp->p1 = pLevel->iIdxCur; pOp->opcode = OP_IdxRowid; @@ -112863,14 +114807,6 @@ struct TrigEvent { int a; IdList * b; }; */ struct AttachKey { int type; Token key; }; -/* -** One or more VALUES claues -*/ -struct ValueList { - ExprList *pList; - Select *pSelect; -}; - /* This is a utility routine used to set the ExprSpan.zStart and ** ExprSpan.zEnd values of pOut so that the span covers the complete @@ -112994,28 +114930,28 @@ struct ValueList { ** defined, then do no error processing. */ #define YYCODETYPE unsigned char -#define YYNOCODE 251 +#define YYNOCODE 254 #define YYACTIONTYPE unsigned short int -#define YYWILDCARD 67 +#define YYWILDCARD 70 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; sqlite3ParserTOKENTYPE yy0; - struct LimitVal yy64; - Expr* yy122; - Select* yy159; - IdList* yy180; - struct {int value; int mask;} yy207; - u8 yy258; - u16 yy305; - struct LikeOp yy318; - TriggerStep* yy327; - ExprSpan yy342; - SrcList* yy347; - int yy392; - struct TrigEvent yy410; - ExprList* yy442; - struct ValueList yy487; + Select* yy3; + ExprList* yy14; + With* yy59; + SrcList* yy65; + struct LikeOp yy96; + Expr* yy132; + u8 yy186; + int yy328; + ExprSpan yy346; + struct TrigEvent yy378; + u16 yy381; + IdList* yy408; + struct {int value; int mask;} yy429; + TriggerStep* yy473; + struct LimitVal yy476; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -113024,7 +114960,7 @@ typedef union { #define sqlite3ParserARG_PDECL ,Parse *pParse #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse #define sqlite3ParserARG_STORE yypParser->pParse = pParse -#define YYNSTATE 628 +#define YYNSTATE 642 #define YYNRULE 327 #define YYFALLBACK 1 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) @@ -113095,474 +115031,463 @@ static const YYMINORTYPE yyzerominor = { 0 }; ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. */ -#define YY_ACTTAB_COUNT (1564) +#define YY_ACTTAB_COUNT (1497) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 310, 956, 184, 418, 2, 171, 625, 595, 56, 56, - /* 10 */ 56, 56, 49, 54, 54, 54, 54, 53, 53, 52, - /* 20 */ 52, 52, 51, 233, 621, 620, 299, 621, 620, 234, - /* 30 */ 588, 582, 56, 56, 56, 56, 19, 54, 54, 54, - /* 40 */ 54, 53, 53, 52, 52, 52, 51, 233, 606, 57, - /* 50 */ 58, 48, 580, 579, 581, 581, 55, 55, 56, 56, - /* 60 */ 56, 56, 542, 54, 54, 54, 54, 53, 53, 52, - /* 70 */ 52, 52, 51, 233, 310, 595, 326, 196, 195, 194, - /* 80 */ 33, 54, 54, 54, 54, 53, 53, 52, 52, 52, - /* 90 */ 51, 233, 618, 617, 165, 618, 617, 381, 378, 377, - /* 100 */ 408, 533, 577, 577, 588, 582, 304, 423, 376, 59, - /* 110 */ 53, 53, 52, 52, 52, 51, 233, 50, 47, 146, - /* 120 */ 575, 546, 65, 57, 58, 48, 580, 579, 581, 581, - /* 130 */ 55, 55, 56, 56, 56, 56, 213, 54, 54, 54, - /* 140 */ 54, 53, 53, 52, 52, 52, 51, 233, 310, 223, - /* 150 */ 540, 421, 170, 176, 138, 281, 384, 276, 383, 168, - /* 160 */ 490, 552, 410, 669, 621, 620, 272, 439, 410, 439, - /* 170 */ 551, 605, 67, 483, 508, 619, 600, 413, 588, 582, - /* 180 */ 601, 484, 619, 413, 619, 599, 91, 440, 441, 440, - /* 190 */ 336, 599, 73, 670, 222, 267, 481, 57, 58, 48, - /* 200 */ 580, 579, 581, 581, 55, 55, 56, 56, 56, 56, - /* 210 */ 671, 54, 54, 54, 54, 53, 53, 52, 52, 52, - /* 220 */ 51, 233, 310, 280, 232, 231, 1, 132, 200, 386, - /* 230 */ 621, 620, 618, 617, 279, 436, 290, 564, 175, 263, - /* 240 */ 410, 265, 438, 498, 437, 166, 442, 569, 337, 569, - /* 250 */ 201, 538, 588, 582, 600, 413, 165, 595, 601, 381, - /* 260 */ 378, 377, 598, 599, 92, 524, 619, 570, 570, 593, - /* 270 */ 376, 57, 58, 48, 580, 579, 581, 581, 55, 55, - /* 280 */ 56, 56, 56, 56, 598, 54, 54, 54, 54, 53, - /* 290 */ 53, 52, 52, 52, 51, 233, 310, 464, 618, 617, - /* 300 */ 591, 591, 591, 174, 273, 397, 410, 273, 410, 549, - /* 310 */ 398, 621, 620, 68, 327, 621, 620, 621, 620, 619, - /* 320 */ 547, 413, 619, 413, 472, 595, 588, 582, 473, 599, - /* 330 */ 92, 599, 92, 52, 52, 52, 51, 233, 514, 513, - /* 340 */ 206, 323, 364, 465, 221, 57, 58, 48, 580, 579, - /* 350 */ 581, 581, 55, 55, 56, 56, 56, 56, 530, 54, - /* 360 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, - /* 370 */ 310, 397, 410, 397, 598, 373, 387, 531, 348, 618, - /* 380 */ 617, 576, 202, 618, 617, 618, 617, 413, 621, 620, - /* 390 */ 145, 255, 347, 254, 578, 599, 74, 352, 45, 490, - /* 400 */ 588, 582, 235, 189, 465, 545, 167, 297, 187, 470, - /* 410 */ 480, 67, 62, 39, 619, 547, 598, 346, 574, 57, - /* 420 */ 58, 48, 580, 579, 581, 581, 55, 55, 56, 56, - /* 430 */ 56, 56, 6, 54, 54, 54, 54, 53, 53, 52, - /* 440 */ 52, 52, 51, 233, 310, 563, 559, 408, 529, 577, - /* 450 */ 577, 345, 255, 347, 254, 182, 618, 617, 504, 505, - /* 460 */ 315, 410, 558, 235, 166, 272, 410, 353, 565, 181, - /* 470 */ 408, 547, 577, 577, 588, 582, 413, 538, 557, 562, - /* 480 */ 518, 413, 619, 249, 599, 16, 7, 36, 468, 599, - /* 490 */ 92, 517, 619, 57, 58, 48, 580, 579, 581, 581, - /* 500 */ 55, 55, 56, 56, 56, 56, 542, 54, 54, 54, - /* 510 */ 54, 53, 53, 52, 52, 52, 51, 233, 310, 328, - /* 520 */ 573, 572, 526, 559, 561, 395, 872, 246, 410, 248, - /* 530 */ 171, 393, 595, 219, 408, 410, 577, 577, 503, 558, - /* 540 */ 365, 145, 511, 413, 408, 229, 577, 577, 588, 582, - /* 550 */ 413, 599, 92, 382, 270, 557, 166, 401, 599, 69, - /* 560 */ 502, 420, 946, 199, 946, 198, 547, 57, 58, 48, - /* 570 */ 580, 579, 581, 581, 55, 55, 56, 56, 56, 56, - /* 580 */ 569, 54, 54, 54, 54, 53, 53, 52, 52, 52, - /* 590 */ 51, 233, 310, 318, 420, 945, 509, 945, 309, 598, - /* 600 */ 595, 566, 491, 212, 173, 247, 424, 616, 615, 614, - /* 610 */ 324, 197, 143, 406, 573, 572, 490, 66, 50, 47, - /* 620 */ 146, 595, 588, 582, 232, 231, 560, 428, 67, 556, - /* 630 */ 15, 619, 186, 544, 304, 422, 35, 206, 433, 424, - /* 640 */ 553, 57, 58, 48, 580, 579, 581, 581, 55, 55, - /* 650 */ 56, 56, 56, 56, 205, 54, 54, 54, 54, 53, - /* 660 */ 53, 52, 52, 52, 51, 233, 310, 570, 570, 261, - /* 670 */ 269, 598, 12, 374, 569, 166, 410, 314, 410, 421, - /* 680 */ 410, 474, 474, 366, 619, 50, 47, 146, 598, 595, - /* 690 */ 256, 413, 166, 413, 352, 413, 588, 582, 32, 599, - /* 700 */ 94, 599, 97, 599, 95, 628, 626, 330, 142, 50, - /* 710 */ 47, 146, 334, 350, 359, 57, 58, 48, 580, 579, - /* 720 */ 581, 581, 55, 55, 56, 56, 56, 56, 410, 54, - /* 730 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, - /* 740 */ 310, 410, 389, 413, 410, 22, 566, 405, 212, 363, - /* 750 */ 390, 599, 104, 360, 410, 156, 413, 410, 604, 413, - /* 760 */ 538, 332, 570, 570, 599, 103, 494, 599, 105, 413, - /* 770 */ 588, 582, 413, 261, 550, 619, 11, 599, 106, 522, - /* 780 */ 599, 133, 169, 458, 457, 170, 35, 602, 619, 57, - /* 790 */ 58, 48, 580, 579, 581, 581, 55, 55, 56, 56, - /* 800 */ 56, 56, 410, 54, 54, 54, 54, 53, 53, 52, - /* 810 */ 52, 52, 51, 233, 310, 410, 260, 413, 410, 50, - /* 820 */ 47, 146, 358, 319, 356, 599, 134, 528, 353, 338, - /* 830 */ 413, 410, 357, 413, 358, 410, 358, 619, 599, 98, - /* 840 */ 129, 599, 102, 619, 588, 582, 413, 21, 235, 619, - /* 850 */ 413, 619, 211, 143, 599, 101, 30, 167, 599, 93, - /* 860 */ 351, 536, 203, 57, 58, 48, 580, 579, 581, 581, - /* 870 */ 55, 55, 56, 56, 56, 56, 410, 54, 54, 54, - /* 880 */ 54, 53, 53, 52, 52, 52, 51, 233, 310, 410, - /* 890 */ 527, 413, 410, 426, 215, 306, 598, 552, 141, 599, - /* 900 */ 100, 40, 410, 38, 413, 410, 551, 413, 410, 228, - /* 910 */ 220, 315, 599, 77, 501, 599, 96, 413, 588, 582, - /* 920 */ 413, 339, 253, 413, 218, 599, 137, 380, 599, 136, - /* 930 */ 28, 599, 135, 271, 716, 210, 482, 57, 58, 48, - /* 940 */ 580, 579, 581, 581, 55, 55, 56, 56, 56, 56, - /* 950 */ 410, 54, 54, 54, 54, 53, 53, 52, 52, 52, - /* 960 */ 51, 233, 310, 410, 273, 413, 410, 316, 147, 598, - /* 970 */ 273, 627, 2, 599, 76, 209, 410, 127, 413, 619, - /* 980 */ 126, 413, 410, 622, 235, 619, 599, 90, 375, 599, - /* 990 */ 89, 413, 588, 582, 27, 261, 351, 413, 619, 599, - /* 1000 */ 75, 322, 542, 542, 125, 599, 88, 321, 279, 598, - /* 1010 */ 619, 57, 46, 48, 580, 579, 581, 581, 55, 55, - /* 1020 */ 56, 56, 56, 56, 410, 54, 54, 54, 54, 53, - /* 1030 */ 53, 52, 52, 52, 51, 233, 310, 410, 451, 413, - /* 1040 */ 164, 285, 283, 273, 610, 425, 305, 599, 87, 371, - /* 1050 */ 410, 478, 413, 410, 609, 410, 608, 603, 619, 619, - /* 1060 */ 599, 99, 587, 586, 122, 413, 588, 582, 413, 619, - /* 1070 */ 413, 619, 619, 599, 86, 367, 599, 17, 599, 85, - /* 1080 */ 320, 185, 520, 519, 584, 583, 58, 48, 580, 579, - /* 1090 */ 581, 581, 55, 55, 56, 56, 56, 56, 410, 54, - /* 1100 */ 54, 54, 54, 53, 53, 52, 52, 52, 51, 233, - /* 1110 */ 310, 585, 410, 413, 410, 261, 261, 261, 409, 592, - /* 1120 */ 475, 599, 84, 170, 410, 467, 519, 413, 121, 413, - /* 1130 */ 619, 619, 619, 619, 619, 599, 83, 599, 72, 413, - /* 1140 */ 588, 582, 51, 233, 626, 330, 471, 599, 71, 258, - /* 1150 */ 159, 120, 14, 463, 157, 158, 117, 261, 449, 448, - /* 1160 */ 447, 48, 580, 579, 581, 581, 55, 55, 56, 56, - /* 1170 */ 56, 56, 619, 54, 54, 54, 54, 53, 53, 52, - /* 1180 */ 52, 52, 51, 233, 44, 404, 261, 3, 410, 460, - /* 1190 */ 261, 414, 620, 118, 399, 10, 25, 24, 555, 349, - /* 1200 */ 217, 619, 407, 413, 410, 619, 4, 44, 404, 619, - /* 1210 */ 3, 599, 82, 619, 414, 620, 456, 543, 115, 413, - /* 1220 */ 539, 402, 537, 275, 507, 407, 251, 599, 81, 216, - /* 1230 */ 274, 564, 619, 243, 454, 619, 154, 619, 619, 619, - /* 1240 */ 450, 417, 624, 110, 402, 619, 410, 236, 64, 123, - /* 1250 */ 488, 41, 42, 532, 564, 204, 410, 268, 43, 412, - /* 1260 */ 411, 413, 266, 593, 108, 619, 107, 435, 333, 599, - /* 1270 */ 80, 413, 619, 264, 41, 42, 444, 619, 410, 599, - /* 1280 */ 70, 43, 412, 411, 434, 262, 593, 149, 619, 598, - /* 1290 */ 257, 237, 188, 413, 591, 591, 591, 590, 589, 13, - /* 1300 */ 619, 599, 18, 329, 235, 619, 44, 404, 361, 3, - /* 1310 */ 419, 462, 340, 414, 620, 227, 124, 591, 591, 591, - /* 1320 */ 590, 589, 13, 619, 407, 410, 619, 410, 139, 34, - /* 1330 */ 404, 388, 3, 148, 623, 313, 414, 620, 312, 331, - /* 1340 */ 413, 461, 413, 402, 180, 354, 413, 407, 599, 79, - /* 1350 */ 599, 78, 250, 564, 599, 9, 619, 613, 612, 611, - /* 1360 */ 619, 8, 453, 443, 242, 416, 402, 619, 239, 235, - /* 1370 */ 179, 238, 429, 41, 42, 289, 564, 619, 619, 619, - /* 1380 */ 43, 412, 411, 619, 144, 593, 619, 619, 177, 61, - /* 1390 */ 619, 597, 392, 621, 620, 288, 41, 42, 415, 619, - /* 1400 */ 294, 30, 394, 43, 412, 411, 293, 619, 593, 31, - /* 1410 */ 619, 396, 292, 60, 230, 37, 591, 591, 591, 590, - /* 1420 */ 589, 13, 214, 554, 183, 291, 172, 302, 301, 300, - /* 1430 */ 178, 298, 596, 564, 452, 29, 286, 391, 541, 591, - /* 1440 */ 591, 591, 590, 589, 13, 284, 521, 535, 150, 534, - /* 1450 */ 241, 282, 385, 192, 191, 325, 516, 515, 277, 240, - /* 1460 */ 511, 524, 308, 512, 128, 593, 510, 225, 226, 487, - /* 1470 */ 486, 224, 152, 492, 465, 307, 485, 163, 153, 372, - /* 1480 */ 479, 151, 162, 259, 370, 161, 368, 208, 476, 477, - /* 1490 */ 26, 160, 469, 466, 362, 140, 591, 591, 591, 116, - /* 1500 */ 119, 455, 344, 155, 114, 343, 113, 112, 446, 111, - /* 1510 */ 131, 109, 432, 317, 130, 431, 23, 20, 430, 427, - /* 1520 */ 190, 63, 255, 342, 244, 607, 295, 287, 311, 594, - /* 1530 */ 278, 508, 496, 235, 493, 571, 497, 568, 495, 403, - /* 1540 */ 459, 379, 355, 245, 193, 303, 567, 296, 341, 5, - /* 1550 */ 445, 548, 506, 207, 525, 500, 335, 489, 252, 369, - /* 1560 */ 400, 499, 523, 233, + /* 0 */ 306, 212, 432, 955, 639, 191, 955, 295, 559, 88, + /* 10 */ 88, 88, 88, 81, 86, 86, 86, 86, 85, 85, + /* 20 */ 84, 84, 84, 83, 330, 185, 184, 183, 635, 635, + /* 30 */ 292, 606, 606, 88, 88, 88, 88, 683, 86, 86, + /* 40 */ 86, 86, 85, 85, 84, 84, 84, 83, 330, 16, + /* 50 */ 436, 597, 89, 90, 80, 600, 599, 601, 601, 87, + /* 60 */ 87, 88, 88, 88, 88, 684, 86, 86, 86, 86, + /* 70 */ 85, 85, 84, 84, 84, 83, 330, 306, 559, 84, + /* 80 */ 84, 84, 83, 330, 65, 86, 86, 86, 86, 85, + /* 90 */ 85, 84, 84, 84, 83, 330, 635, 635, 634, 633, + /* 100 */ 182, 682, 550, 379, 376, 375, 17, 322, 606, 606, + /* 110 */ 371, 198, 479, 91, 374, 82, 79, 165, 85, 85, + /* 120 */ 84, 84, 84, 83, 330, 598, 635, 635, 107, 89, + /* 130 */ 90, 80, 600, 599, 601, 601, 87, 87, 88, 88, + /* 140 */ 88, 88, 186, 86, 86, 86, 86, 85, 85, 84, + /* 150 */ 84, 84, 83, 330, 306, 594, 594, 142, 328, 327, + /* 160 */ 484, 249, 344, 238, 635, 635, 634, 633, 585, 448, + /* 170 */ 526, 525, 229, 388, 1, 394, 450, 584, 449, 635, + /* 180 */ 635, 635, 635, 319, 395, 606, 606, 199, 157, 273, + /* 190 */ 382, 268, 381, 187, 635, 635, 634, 633, 311, 555, + /* 200 */ 266, 593, 593, 266, 347, 588, 89, 90, 80, 600, + /* 210 */ 599, 601, 601, 87, 87, 88, 88, 88, 88, 478, + /* 220 */ 86, 86, 86, 86, 85, 85, 84, 84, 84, 83, + /* 230 */ 330, 306, 272, 536, 634, 633, 146, 610, 197, 310, + /* 240 */ 575, 182, 482, 271, 379, 376, 375, 506, 21, 634, + /* 250 */ 633, 634, 633, 635, 635, 374, 611, 574, 548, 440, + /* 260 */ 111, 563, 606, 606, 634, 633, 324, 479, 608, 608, + /* 270 */ 608, 300, 435, 573, 119, 407, 210, 162, 562, 883, + /* 280 */ 592, 592, 306, 89, 90, 80, 600, 599, 601, 601, + /* 290 */ 87, 87, 88, 88, 88, 88, 506, 86, 86, 86, + /* 300 */ 86, 85, 85, 84, 84, 84, 83, 330, 620, 111, + /* 310 */ 635, 635, 361, 606, 606, 358, 249, 349, 248, 433, + /* 320 */ 243, 479, 586, 634, 633, 195, 611, 93, 119, 221, + /* 330 */ 575, 497, 534, 534, 89, 90, 80, 600, 599, 601, + /* 340 */ 601, 87, 87, 88, 88, 88, 88, 574, 86, 86, + /* 350 */ 86, 86, 85, 85, 84, 84, 84, 83, 330, 306, + /* 360 */ 77, 429, 638, 573, 589, 530, 240, 230, 242, 105, + /* 370 */ 249, 349, 248, 515, 588, 208, 460, 529, 564, 173, + /* 380 */ 634, 633, 970, 144, 430, 2, 424, 228, 380, 557, + /* 390 */ 606, 606, 190, 153, 159, 158, 514, 51, 632, 631, + /* 400 */ 630, 71, 536, 432, 954, 196, 610, 954, 614, 45, + /* 410 */ 18, 89, 90, 80, 600, 599, 601, 601, 87, 87, + /* 420 */ 88, 88, 88, 88, 261, 86, 86, 86, 86, 85, + /* 430 */ 85, 84, 84, 84, 83, 330, 306, 608, 608, 608, + /* 440 */ 542, 424, 402, 385, 241, 506, 451, 320, 211, 543, + /* 450 */ 164, 436, 386, 293, 451, 587, 108, 496, 111, 334, + /* 460 */ 391, 591, 424, 614, 27, 452, 453, 606, 606, 72, + /* 470 */ 257, 70, 259, 452, 339, 342, 564, 582, 68, 415, + /* 480 */ 469, 328, 327, 62, 614, 45, 110, 393, 89, 90, + /* 490 */ 80, 600, 599, 601, 601, 87, 87, 88, 88, 88, + /* 500 */ 88, 152, 86, 86, 86, 86, 85, 85, 84, 84, + /* 510 */ 84, 83, 330, 306, 110, 499, 520, 538, 402, 389, + /* 520 */ 424, 110, 566, 500, 593, 593, 454, 82, 79, 165, + /* 530 */ 424, 591, 384, 564, 340, 615, 188, 162, 424, 350, + /* 540 */ 616, 424, 614, 44, 606, 606, 445, 582, 300, 434, + /* 550 */ 151, 19, 614, 9, 568, 580, 348, 615, 469, 567, + /* 560 */ 614, 26, 616, 614, 45, 89, 90, 80, 600, 599, + /* 570 */ 601, 601, 87, 87, 88, 88, 88, 88, 411, 86, + /* 580 */ 86, 86, 86, 85, 85, 84, 84, 84, 83, 330, + /* 590 */ 306, 579, 110, 578, 521, 282, 433, 398, 400, 255, + /* 600 */ 486, 82, 79, 165, 487, 164, 82, 79, 165, 488, + /* 610 */ 488, 364, 387, 424, 544, 544, 509, 350, 362, 155, + /* 620 */ 191, 606, 606, 559, 642, 640, 333, 82, 79, 165, + /* 630 */ 305, 564, 507, 312, 357, 614, 45, 329, 596, 595, + /* 640 */ 194, 337, 89, 90, 80, 600, 599, 601, 601, 87, + /* 650 */ 87, 88, 88, 88, 88, 424, 86, 86, 86, 86, + /* 660 */ 85, 85, 84, 84, 84, 83, 330, 306, 20, 323, + /* 670 */ 150, 263, 211, 543, 421, 596, 595, 614, 22, 424, + /* 680 */ 193, 424, 284, 424, 391, 424, 509, 424, 577, 424, + /* 690 */ 186, 335, 424, 559, 424, 313, 120, 546, 606, 606, + /* 700 */ 67, 614, 47, 614, 50, 614, 48, 614, 100, 614, + /* 710 */ 99, 614, 101, 576, 614, 102, 614, 109, 326, 89, + /* 720 */ 90, 80, 600, 599, 601, 601, 87, 87, 88, 88, + /* 730 */ 88, 88, 424, 86, 86, 86, 86, 85, 85, 84, + /* 740 */ 84, 84, 83, 330, 306, 424, 311, 424, 585, 54, + /* 750 */ 424, 516, 517, 590, 614, 112, 424, 584, 424, 572, + /* 760 */ 424, 195, 424, 571, 424, 67, 424, 614, 94, 614, + /* 770 */ 98, 424, 614, 97, 264, 606, 606, 195, 614, 46, + /* 780 */ 614, 96, 614, 30, 614, 49, 614, 115, 614, 114, + /* 790 */ 418, 229, 388, 614, 113, 306, 89, 90, 80, 600, + /* 800 */ 599, 601, 601, 87, 87, 88, 88, 88, 88, 424, + /* 810 */ 86, 86, 86, 86, 85, 85, 84, 84, 84, 83, + /* 820 */ 330, 119, 424, 590, 110, 372, 606, 606, 195, 53, + /* 830 */ 250, 614, 29, 195, 472, 438, 729, 190, 302, 498, + /* 840 */ 14, 523, 641, 2, 614, 43, 306, 89, 90, 80, + /* 850 */ 600, 599, 601, 601, 87, 87, 88, 88, 88, 88, + /* 860 */ 424, 86, 86, 86, 86, 85, 85, 84, 84, 84, + /* 870 */ 83, 330, 424, 613, 964, 964, 354, 606, 606, 420, + /* 880 */ 312, 64, 614, 42, 391, 355, 283, 437, 301, 255, + /* 890 */ 414, 410, 495, 492, 614, 28, 471, 306, 89, 90, + /* 900 */ 80, 600, 599, 601, 601, 87, 87, 88, 88, 88, + /* 910 */ 88, 424, 86, 86, 86, 86, 85, 85, 84, 84, + /* 920 */ 84, 83, 330, 424, 110, 110, 110, 110, 606, 606, + /* 930 */ 110, 254, 13, 614, 41, 532, 531, 283, 481, 531, + /* 940 */ 457, 284, 119, 561, 356, 614, 40, 284, 306, 89, + /* 950 */ 78, 80, 600, 599, 601, 601, 87, 87, 88, 88, + /* 960 */ 88, 88, 424, 86, 86, 86, 86, 85, 85, 84, + /* 970 */ 84, 84, 83, 330, 110, 424, 341, 220, 555, 606, + /* 980 */ 606, 351, 555, 318, 614, 95, 413, 255, 83, 330, + /* 990 */ 284, 284, 255, 640, 333, 356, 255, 614, 39, 306, + /* 1000 */ 356, 90, 80, 600, 599, 601, 601, 87, 87, 88, + /* 1010 */ 88, 88, 88, 424, 86, 86, 86, 86, 85, 85, + /* 1020 */ 84, 84, 84, 83, 330, 424, 317, 316, 141, 465, + /* 1030 */ 606, 606, 219, 619, 463, 614, 10, 417, 462, 255, + /* 1040 */ 189, 510, 553, 351, 207, 363, 161, 614, 38, 315, + /* 1050 */ 218, 255, 255, 80, 600, 599, 601, 601, 87, 87, + /* 1060 */ 88, 88, 88, 88, 424, 86, 86, 86, 86, 85, + /* 1070 */ 85, 84, 84, 84, 83, 330, 76, 419, 255, 3, + /* 1080 */ 878, 461, 424, 247, 331, 331, 614, 37, 217, 76, + /* 1090 */ 419, 390, 3, 216, 215, 422, 4, 331, 331, 424, + /* 1100 */ 547, 12, 424, 545, 614, 36, 424, 541, 422, 424, + /* 1110 */ 540, 424, 214, 424, 408, 424, 539, 403, 605, 605, + /* 1120 */ 237, 614, 25, 119, 614, 24, 588, 408, 614, 45, + /* 1130 */ 118, 614, 35, 614, 34, 614, 33, 614, 23, 588, + /* 1140 */ 60, 223, 603, 602, 513, 378, 73, 74, 140, 139, + /* 1150 */ 424, 110, 265, 75, 426, 425, 59, 424, 610, 73, + /* 1160 */ 74, 549, 402, 404, 424, 373, 75, 426, 425, 604, + /* 1170 */ 138, 610, 614, 11, 392, 76, 419, 181, 3, 614, + /* 1180 */ 32, 271, 369, 331, 331, 493, 614, 31, 149, 608, + /* 1190 */ 608, 608, 607, 15, 422, 365, 614, 8, 137, 489, + /* 1200 */ 136, 190, 608, 608, 608, 607, 15, 485, 176, 135, + /* 1210 */ 7, 252, 477, 408, 174, 133, 175, 474, 57, 56, + /* 1220 */ 132, 130, 119, 76, 419, 588, 3, 468, 245, 464, + /* 1230 */ 171, 331, 331, 125, 123, 456, 447, 122, 446, 104, + /* 1240 */ 336, 231, 422, 166, 154, 73, 74, 332, 116, 431, + /* 1250 */ 121, 309, 75, 426, 425, 222, 106, 610, 308, 637, + /* 1260 */ 204, 408, 629, 627, 628, 6, 200, 428, 427, 290, + /* 1270 */ 203, 622, 201, 588, 62, 63, 289, 66, 419, 399, + /* 1280 */ 3, 401, 288, 92, 143, 331, 331, 287, 608, 608, + /* 1290 */ 608, 607, 15, 73, 74, 227, 422, 325, 69, 416, + /* 1300 */ 75, 426, 425, 612, 412, 610, 192, 61, 569, 209, + /* 1310 */ 396, 226, 278, 225, 383, 408, 527, 558, 276, 533, + /* 1320 */ 552, 528, 321, 523, 370, 508, 180, 588, 494, 179, + /* 1330 */ 366, 117, 253, 269, 522, 503, 608, 608, 608, 607, + /* 1340 */ 15, 551, 502, 58, 274, 524, 178, 73, 74, 304, + /* 1350 */ 501, 368, 303, 206, 75, 426, 425, 491, 360, 610, + /* 1360 */ 213, 177, 483, 131, 345, 298, 297, 296, 202, 294, + /* 1370 */ 480, 490, 466, 134, 172, 129, 444, 346, 470, 128, + /* 1380 */ 314, 459, 103, 127, 126, 148, 124, 167, 443, 235, + /* 1390 */ 608, 608, 608, 607, 15, 442, 439, 623, 234, 299, + /* 1400 */ 145, 583, 291, 377, 581, 160, 119, 156, 270, 636, + /* 1410 */ 971, 169, 279, 626, 520, 625, 473, 624, 170, 621, + /* 1420 */ 618, 119, 168, 55, 409, 423, 537, 609, 286, 285, + /* 1430 */ 405, 570, 560, 556, 5, 52, 458, 554, 147, 267, + /* 1440 */ 519, 504, 518, 406, 262, 239, 260, 512, 343, 511, + /* 1450 */ 258, 353, 565, 256, 224, 251, 359, 277, 275, 476, + /* 1460 */ 475, 246, 352, 244, 467, 455, 236, 233, 232, 307, + /* 1470 */ 441, 281, 205, 163, 397, 280, 535, 505, 330, 617, + /* 1480 */ 971, 971, 971, 971, 367, 971, 971, 971, 971, 971, + /* 1490 */ 971, 971, 971, 971, 971, 971, 338, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 19, 142, 143, 144, 145, 24, 1, 26, 77, 78, - /* 10 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - /* 20 */ 89, 90, 91, 92, 26, 27, 15, 26, 27, 197, - /* 30 */ 49, 50, 77, 78, 79, 80, 204, 82, 83, 84, - /* 40 */ 85, 86, 87, 88, 89, 90, 91, 92, 23, 68, - /* 50 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 60 */ 79, 80, 166, 82, 83, 84, 85, 86, 87, 88, - /* 70 */ 89, 90, 91, 92, 19, 94, 19, 105, 106, 107, - /* 80 */ 25, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 90 */ 91, 92, 94, 95, 96, 94, 95, 99, 100, 101, - /* 100 */ 112, 205, 114, 115, 49, 50, 22, 23, 110, 54, - /* 110 */ 86, 87, 88, 89, 90, 91, 92, 221, 222, 223, - /* 120 */ 23, 120, 25, 68, 69, 70, 71, 72, 73, 74, - /* 130 */ 75, 76, 77, 78, 79, 80, 22, 82, 83, 84, - /* 140 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 92, - /* 150 */ 23, 67, 25, 96, 97, 98, 99, 100, 101, 102, - /* 160 */ 150, 32, 150, 118, 26, 27, 109, 150, 150, 150, - /* 170 */ 41, 161, 162, 180, 181, 165, 113, 165, 49, 50, - /* 180 */ 117, 188, 165, 165, 165, 173, 174, 170, 171, 170, - /* 190 */ 171, 173, 174, 118, 184, 16, 186, 68, 69, 70, - /* 200 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - /* 210 */ 118, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 220 */ 91, 92, 19, 98, 86, 87, 22, 24, 160, 88, - /* 230 */ 26, 27, 94, 95, 109, 97, 224, 66, 118, 60, - /* 240 */ 150, 62, 104, 23, 106, 25, 229, 230, 229, 230, - /* 250 */ 160, 150, 49, 50, 113, 165, 96, 26, 117, 99, - /* 260 */ 100, 101, 194, 173, 174, 94, 165, 129, 130, 98, - /* 270 */ 110, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 280 */ 77, 78, 79, 80, 194, 82, 83, 84, 85, 86, - /* 290 */ 87, 88, 89, 90, 91, 92, 19, 11, 94, 95, - /* 300 */ 129, 130, 131, 118, 150, 215, 150, 150, 150, 25, - /* 310 */ 220, 26, 27, 22, 213, 26, 27, 26, 27, 165, - /* 320 */ 25, 165, 165, 165, 30, 94, 49, 50, 34, 173, - /* 330 */ 174, 173, 174, 88, 89, 90, 91, 92, 7, 8, - /* 340 */ 160, 187, 48, 57, 187, 68, 69, 70, 71, 72, - /* 350 */ 73, 74, 75, 76, 77, 78, 79, 80, 23, 82, - /* 360 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - /* 370 */ 19, 215, 150, 215, 194, 19, 220, 88, 220, 94, - /* 380 */ 95, 23, 160, 94, 95, 94, 95, 165, 26, 27, - /* 390 */ 95, 105, 106, 107, 113, 173, 174, 217, 22, 150, - /* 400 */ 49, 50, 116, 119, 57, 120, 50, 158, 22, 21, - /* 410 */ 161, 162, 232, 136, 165, 120, 194, 237, 23, 68, - /* 420 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 430 */ 79, 80, 22, 82, 83, 84, 85, 86, 87, 88, - /* 440 */ 89, 90, 91, 92, 19, 23, 12, 112, 23, 114, - /* 450 */ 115, 63, 105, 106, 107, 23, 94, 95, 97, 98, - /* 460 */ 104, 150, 28, 116, 25, 109, 150, 150, 23, 23, - /* 470 */ 112, 25, 114, 115, 49, 50, 165, 150, 44, 11, - /* 480 */ 46, 165, 165, 16, 173, 174, 76, 136, 100, 173, - /* 490 */ 174, 57, 165, 68, 69, 70, 71, 72, 73, 74, - /* 500 */ 75, 76, 77, 78, 79, 80, 166, 82, 83, 84, - /* 510 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 169, - /* 520 */ 170, 171, 23, 12, 23, 214, 138, 60, 150, 62, - /* 530 */ 24, 215, 26, 216, 112, 150, 114, 115, 36, 28, - /* 540 */ 213, 95, 103, 165, 112, 205, 114, 115, 49, 50, - /* 550 */ 165, 173, 174, 51, 23, 44, 25, 46, 173, 174, - /* 560 */ 58, 22, 23, 22, 25, 160, 120, 68, 69, 70, - /* 570 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - /* 580 */ 230, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 590 */ 91, 92, 19, 215, 22, 23, 23, 25, 163, 194, - /* 600 */ 94, 166, 167, 168, 25, 138, 67, 7, 8, 9, - /* 610 */ 108, 206, 207, 169, 170, 171, 150, 22, 221, 222, - /* 620 */ 223, 26, 49, 50, 86, 87, 23, 161, 162, 23, - /* 630 */ 22, 165, 24, 120, 22, 23, 25, 160, 241, 67, - /* 640 */ 176, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 650 */ 77, 78, 79, 80, 160, 82, 83, 84, 85, 86, - /* 660 */ 87, 88, 89, 90, 91, 92, 19, 129, 130, 150, - /* 670 */ 23, 194, 35, 23, 230, 25, 150, 155, 150, 67, - /* 680 */ 150, 105, 106, 107, 165, 221, 222, 223, 194, 94, - /* 690 */ 23, 165, 25, 165, 217, 165, 49, 50, 25, 173, - /* 700 */ 174, 173, 174, 173, 174, 0, 1, 2, 118, 221, - /* 710 */ 222, 223, 193, 219, 237, 68, 69, 70, 71, 72, - /* 720 */ 73, 74, 75, 76, 77, 78, 79, 80, 150, 82, - /* 730 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - /* 740 */ 19, 150, 19, 165, 150, 24, 166, 167, 168, 227, - /* 750 */ 27, 173, 174, 231, 150, 25, 165, 150, 172, 165, - /* 760 */ 150, 242, 129, 130, 173, 174, 180, 173, 174, 165, - /* 770 */ 49, 50, 165, 150, 176, 165, 35, 173, 174, 165, - /* 780 */ 173, 174, 35, 23, 23, 25, 25, 173, 165, 68, - /* 790 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 800 */ 79, 80, 150, 82, 83, 84, 85, 86, 87, 88, - /* 810 */ 89, 90, 91, 92, 19, 150, 193, 165, 150, 221, - /* 820 */ 222, 223, 150, 213, 19, 173, 174, 23, 150, 97, - /* 830 */ 165, 150, 27, 165, 150, 150, 150, 165, 173, 174, - /* 840 */ 22, 173, 174, 165, 49, 50, 165, 52, 116, 165, - /* 850 */ 165, 165, 206, 207, 173, 174, 126, 50, 173, 174, - /* 860 */ 128, 27, 160, 68, 69, 70, 71, 72, 73, 74, - /* 870 */ 75, 76, 77, 78, 79, 80, 150, 82, 83, 84, - /* 880 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 150, - /* 890 */ 23, 165, 150, 23, 216, 25, 194, 32, 39, 173, - /* 900 */ 174, 135, 150, 137, 165, 150, 41, 165, 150, 52, - /* 910 */ 238, 104, 173, 174, 29, 173, 174, 165, 49, 50, - /* 920 */ 165, 219, 238, 165, 238, 173, 174, 52, 173, 174, - /* 930 */ 22, 173, 174, 23, 23, 160, 25, 68, 69, 70, - /* 940 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - /* 950 */ 150, 82, 83, 84, 85, 86, 87, 88, 89, 90, - /* 960 */ 91, 92, 19, 150, 150, 165, 150, 245, 246, 194, - /* 970 */ 150, 144, 145, 173, 174, 160, 150, 22, 165, 165, - /* 980 */ 22, 165, 150, 150, 116, 165, 173, 174, 52, 173, - /* 990 */ 174, 165, 49, 50, 22, 150, 128, 165, 165, 173, - /* 1000 */ 174, 187, 166, 166, 22, 173, 174, 187, 109, 194, - /* 1010 */ 165, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 1020 */ 77, 78, 79, 80, 150, 82, 83, 84, 85, 86, - /* 1030 */ 87, 88, 89, 90, 91, 92, 19, 150, 193, 165, - /* 1040 */ 102, 205, 205, 150, 150, 247, 248, 173, 174, 19, - /* 1050 */ 150, 20, 165, 150, 150, 150, 150, 150, 165, 165, - /* 1060 */ 173, 174, 49, 50, 104, 165, 49, 50, 165, 165, - /* 1070 */ 165, 165, 165, 173, 174, 43, 173, 174, 173, 174, - /* 1080 */ 187, 24, 190, 191, 71, 72, 69, 70, 71, 72, - /* 1090 */ 73, 74, 75, 76, 77, 78, 79, 80, 150, 82, - /* 1100 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - /* 1110 */ 19, 98, 150, 165, 150, 150, 150, 150, 150, 150, - /* 1120 */ 59, 173, 174, 25, 150, 190, 191, 165, 53, 165, - /* 1130 */ 165, 165, 165, 165, 165, 173, 174, 173, 174, 165, - /* 1140 */ 49, 50, 91, 92, 1, 2, 53, 173, 174, 138, - /* 1150 */ 104, 22, 5, 1, 35, 118, 127, 150, 193, 193, - /* 1160 */ 193, 70, 71, 72, 73, 74, 75, 76, 77, 78, - /* 1170 */ 79, 80, 165, 82, 83, 84, 85, 86, 87, 88, - /* 1180 */ 89, 90, 91, 92, 19, 20, 150, 22, 150, 27, - /* 1190 */ 150, 26, 27, 108, 150, 22, 76, 76, 150, 25, - /* 1200 */ 193, 165, 37, 165, 150, 165, 22, 19, 20, 165, - /* 1210 */ 22, 173, 174, 165, 26, 27, 23, 150, 119, 165, - /* 1220 */ 150, 56, 150, 150, 150, 37, 16, 173, 174, 193, - /* 1230 */ 150, 66, 165, 193, 1, 165, 121, 165, 165, 165, - /* 1240 */ 20, 146, 147, 119, 56, 165, 150, 152, 16, 154, - /* 1250 */ 150, 86, 87, 88, 66, 160, 150, 150, 93, 94, - /* 1260 */ 95, 165, 150, 98, 108, 165, 127, 23, 65, 173, - /* 1270 */ 174, 165, 165, 150, 86, 87, 128, 165, 150, 173, - /* 1280 */ 174, 93, 94, 95, 23, 150, 98, 15, 165, 194, - /* 1290 */ 150, 140, 22, 165, 129, 130, 131, 132, 133, 134, - /* 1300 */ 165, 173, 174, 3, 116, 165, 19, 20, 150, 22, - /* 1310 */ 4, 150, 217, 26, 27, 179, 179, 129, 130, 131, - /* 1320 */ 132, 133, 134, 165, 37, 150, 165, 150, 164, 19, - /* 1330 */ 20, 150, 22, 246, 149, 249, 26, 27, 249, 244, - /* 1340 */ 165, 150, 165, 56, 6, 150, 165, 37, 173, 174, - /* 1350 */ 173, 174, 150, 66, 173, 174, 165, 149, 149, 13, - /* 1360 */ 165, 25, 150, 150, 150, 149, 56, 165, 150, 116, - /* 1370 */ 151, 150, 150, 86, 87, 150, 66, 165, 165, 165, - /* 1380 */ 93, 94, 95, 165, 150, 98, 165, 165, 151, 22, - /* 1390 */ 165, 194, 150, 26, 27, 150, 86, 87, 159, 165, - /* 1400 */ 199, 126, 123, 93, 94, 95, 200, 165, 98, 124, - /* 1410 */ 165, 122, 201, 125, 225, 135, 129, 130, 131, 132, - /* 1420 */ 133, 134, 5, 157, 157, 202, 118, 10, 11, 12, - /* 1430 */ 13, 14, 203, 66, 17, 104, 210, 121, 211, 129, - /* 1440 */ 130, 131, 132, 133, 134, 210, 175, 211, 31, 211, - /* 1450 */ 33, 210, 104, 86, 87, 47, 175, 183, 175, 42, - /* 1460 */ 103, 94, 178, 177, 22, 98, 175, 92, 228, 175, - /* 1470 */ 175, 228, 55, 183, 57, 178, 175, 156, 61, 18, - /* 1480 */ 157, 64, 156, 235, 157, 156, 45, 157, 236, 157, - /* 1490 */ 135, 156, 199, 189, 157, 68, 129, 130, 131, 22, - /* 1500 */ 189, 199, 157, 156, 192, 18, 192, 192, 199, 192, - /* 1510 */ 218, 189, 40, 157, 218, 157, 240, 240, 157, 38, - /* 1520 */ 196, 243, 105, 106, 107, 153, 198, 209, 111, 166, - /* 1530 */ 176, 181, 166, 116, 166, 230, 176, 230, 176, 226, - /* 1540 */ 199, 177, 239, 209, 185, 148, 166, 195, 209, 196, - /* 1550 */ 199, 208, 182, 233, 173, 182, 139, 186, 239, 234, - /* 1560 */ 191, 182, 173, 92, + /* 0 */ 19, 22, 22, 23, 1, 24, 26, 15, 27, 80, + /* 10 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + /* 20 */ 91, 92, 93, 94, 95, 108, 109, 110, 27, 28, + /* 30 */ 23, 50, 51, 80, 81, 82, 83, 122, 85, 86, + /* 40 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 22, + /* 50 */ 70, 23, 71, 72, 73, 74, 75, 76, 77, 78, + /* 60 */ 79, 80, 81, 82, 83, 122, 85, 86, 87, 88, + /* 70 */ 89, 90, 91, 92, 93, 94, 95, 19, 97, 91, + /* 80 */ 92, 93, 94, 95, 26, 85, 86, 87, 88, 89, + /* 90 */ 90, 91, 92, 93, 94, 95, 27, 28, 97, 98, + /* 100 */ 99, 122, 211, 102, 103, 104, 79, 19, 50, 51, + /* 110 */ 19, 122, 59, 55, 113, 224, 225, 226, 89, 90, + /* 120 */ 91, 92, 93, 94, 95, 23, 27, 28, 26, 71, + /* 130 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + /* 140 */ 82, 83, 51, 85, 86, 87, 88, 89, 90, 91, + /* 150 */ 92, 93, 94, 95, 19, 132, 133, 58, 89, 90, + /* 160 */ 21, 108, 109, 110, 27, 28, 97, 98, 33, 100, + /* 170 */ 7, 8, 119, 120, 22, 19, 107, 42, 109, 27, + /* 180 */ 28, 27, 28, 95, 28, 50, 51, 99, 100, 101, + /* 190 */ 102, 103, 104, 105, 27, 28, 97, 98, 107, 152, + /* 200 */ 112, 132, 133, 112, 65, 69, 71, 72, 73, 74, + /* 210 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 11, + /* 220 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 230 */ 95, 19, 101, 97, 97, 98, 24, 101, 122, 157, + /* 240 */ 12, 99, 103, 112, 102, 103, 104, 152, 22, 97, + /* 250 */ 98, 97, 98, 27, 28, 113, 27, 29, 91, 164, + /* 260 */ 165, 124, 50, 51, 97, 98, 219, 59, 132, 133, + /* 270 */ 134, 22, 23, 45, 66, 47, 212, 213, 124, 140, + /* 280 */ 132, 133, 19, 71, 72, 73, 74, 75, 76, 77, + /* 290 */ 78, 79, 80, 81, 82, 83, 152, 85, 86, 87, + /* 300 */ 88, 89, 90, 91, 92, 93, 94, 95, 164, 165, + /* 310 */ 27, 28, 230, 50, 51, 233, 108, 109, 110, 70, + /* 320 */ 16, 59, 23, 97, 98, 26, 97, 22, 66, 185, + /* 330 */ 12, 187, 27, 28, 71, 72, 73, 74, 75, 76, + /* 340 */ 77, 78, 79, 80, 81, 82, 83, 29, 85, 86, + /* 350 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 19, + /* 360 */ 22, 148, 149, 45, 23, 47, 62, 154, 64, 156, + /* 370 */ 108, 109, 110, 37, 69, 23, 163, 59, 26, 26, + /* 380 */ 97, 98, 144, 145, 146, 147, 152, 200, 52, 23, + /* 390 */ 50, 51, 26, 22, 89, 90, 60, 210, 7, 8, + /* 400 */ 9, 138, 97, 22, 23, 26, 101, 26, 174, 175, + /* 410 */ 197, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 420 */ 80, 81, 82, 83, 16, 85, 86, 87, 88, 89, + /* 430 */ 90, 91, 92, 93, 94, 95, 19, 132, 133, 134, + /* 440 */ 23, 152, 208, 209, 140, 152, 152, 111, 195, 196, + /* 450 */ 98, 70, 163, 160, 152, 23, 22, 164, 165, 246, + /* 460 */ 207, 27, 152, 174, 175, 171, 172, 50, 51, 137, + /* 470 */ 62, 139, 64, 171, 172, 222, 124, 27, 138, 24, + /* 480 */ 163, 89, 90, 130, 174, 175, 197, 163, 71, 72, + /* 490 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + /* 500 */ 83, 22, 85, 86, 87, 88, 89, 90, 91, 92, + /* 510 */ 93, 94, 95, 19, 197, 181, 182, 23, 208, 209, + /* 520 */ 152, 197, 26, 189, 132, 133, 232, 224, 225, 226, + /* 530 */ 152, 97, 91, 26, 232, 116, 212, 213, 152, 222, + /* 540 */ 121, 152, 174, 175, 50, 51, 243, 97, 22, 23, + /* 550 */ 22, 234, 174, 175, 177, 23, 239, 116, 163, 177, + /* 560 */ 174, 175, 121, 174, 175, 71, 72, 73, 74, 75, + /* 570 */ 76, 77, 78, 79, 80, 81, 82, 83, 24, 85, + /* 580 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + /* 590 */ 19, 23, 197, 11, 23, 227, 70, 208, 220, 152, + /* 600 */ 31, 224, 225, 226, 35, 98, 224, 225, 226, 108, + /* 610 */ 109, 110, 115, 152, 117, 118, 27, 222, 49, 123, + /* 620 */ 24, 50, 51, 27, 0, 1, 2, 224, 225, 226, + /* 630 */ 166, 124, 168, 169, 239, 174, 175, 170, 171, 172, + /* 640 */ 22, 194, 71, 72, 73, 74, 75, 76, 77, 78, + /* 650 */ 79, 80, 81, 82, 83, 152, 85, 86, 87, 88, + /* 660 */ 89, 90, 91, 92, 93, 94, 95, 19, 22, 208, + /* 670 */ 24, 23, 195, 196, 170, 171, 172, 174, 175, 152, + /* 680 */ 26, 152, 152, 152, 207, 152, 97, 152, 23, 152, + /* 690 */ 51, 244, 152, 97, 152, 247, 248, 23, 50, 51, + /* 700 */ 26, 174, 175, 174, 175, 174, 175, 174, 175, 174, + /* 710 */ 175, 174, 175, 23, 174, 175, 174, 175, 188, 71, + /* 720 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + /* 730 */ 82, 83, 152, 85, 86, 87, 88, 89, 90, 91, + /* 740 */ 92, 93, 94, 95, 19, 152, 107, 152, 33, 24, + /* 750 */ 152, 100, 101, 27, 174, 175, 152, 42, 152, 23, + /* 760 */ 152, 26, 152, 23, 152, 26, 152, 174, 175, 174, + /* 770 */ 175, 152, 174, 175, 23, 50, 51, 26, 174, 175, + /* 780 */ 174, 175, 174, 175, 174, 175, 174, 175, 174, 175, + /* 790 */ 163, 119, 120, 174, 175, 19, 71, 72, 73, 74, + /* 800 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 152, + /* 810 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 820 */ 95, 66, 152, 97, 197, 23, 50, 51, 26, 53, + /* 830 */ 23, 174, 175, 26, 23, 23, 23, 26, 26, 26, + /* 840 */ 36, 106, 146, 147, 174, 175, 19, 71, 72, 73, + /* 850 */ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + /* 860 */ 152, 85, 86, 87, 88, 89, 90, 91, 92, 93, + /* 870 */ 94, 95, 152, 196, 119, 120, 19, 50, 51, 168, + /* 880 */ 169, 26, 174, 175, 207, 28, 152, 249, 250, 152, + /* 890 */ 163, 163, 163, 163, 174, 175, 163, 19, 71, 72, + /* 900 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + /* 910 */ 83, 152, 85, 86, 87, 88, 89, 90, 91, 92, + /* 920 */ 93, 94, 95, 152, 197, 197, 197, 197, 50, 51, + /* 930 */ 197, 194, 36, 174, 175, 191, 192, 152, 191, 192, + /* 940 */ 163, 152, 66, 124, 152, 174, 175, 152, 19, 71, + /* 950 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + /* 960 */ 82, 83, 152, 85, 86, 87, 88, 89, 90, 91, + /* 970 */ 92, 93, 94, 95, 197, 152, 100, 188, 152, 50, + /* 980 */ 51, 152, 152, 188, 174, 175, 252, 152, 94, 95, + /* 990 */ 152, 152, 152, 1, 2, 152, 152, 174, 175, 19, + /* 1000 */ 152, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 1010 */ 81, 82, 83, 152, 85, 86, 87, 88, 89, 90, + /* 1020 */ 91, 92, 93, 94, 95, 152, 188, 188, 22, 194, + /* 1030 */ 50, 51, 240, 173, 194, 174, 175, 252, 194, 152, + /* 1040 */ 36, 181, 28, 152, 23, 219, 122, 174, 175, 219, + /* 1050 */ 221, 152, 152, 73, 74, 75, 76, 77, 78, 79, + /* 1060 */ 80, 81, 82, 83, 152, 85, 86, 87, 88, 89, + /* 1070 */ 90, 91, 92, 93, 94, 95, 19, 20, 152, 22, + /* 1080 */ 23, 194, 152, 240, 27, 28, 174, 175, 240, 19, + /* 1090 */ 20, 26, 22, 194, 194, 38, 22, 27, 28, 152, + /* 1100 */ 23, 22, 152, 116, 174, 175, 152, 23, 38, 152, + /* 1110 */ 23, 152, 221, 152, 57, 152, 23, 163, 50, 51, + /* 1120 */ 194, 174, 175, 66, 174, 175, 69, 57, 174, 175, + /* 1130 */ 40, 174, 175, 174, 175, 174, 175, 174, 175, 69, + /* 1140 */ 22, 53, 74, 75, 30, 53, 89, 90, 22, 22, + /* 1150 */ 152, 197, 23, 96, 97, 98, 22, 152, 101, 89, + /* 1160 */ 90, 91, 208, 209, 152, 53, 96, 97, 98, 101, + /* 1170 */ 22, 101, 174, 175, 152, 19, 20, 105, 22, 174, + /* 1180 */ 175, 112, 19, 27, 28, 20, 174, 175, 24, 132, + /* 1190 */ 133, 134, 135, 136, 38, 44, 174, 175, 107, 61, + /* 1200 */ 54, 26, 132, 133, 134, 135, 136, 54, 107, 22, + /* 1210 */ 5, 140, 1, 57, 36, 111, 122, 28, 79, 79, + /* 1220 */ 131, 123, 66, 19, 20, 69, 22, 1, 16, 20, + /* 1230 */ 125, 27, 28, 123, 111, 120, 23, 131, 23, 16, + /* 1240 */ 68, 142, 38, 15, 22, 89, 90, 3, 167, 4, + /* 1250 */ 248, 251, 96, 97, 98, 180, 180, 101, 251, 151, + /* 1260 */ 6, 57, 151, 13, 151, 26, 25, 151, 161, 202, + /* 1270 */ 153, 162, 153, 69, 130, 128, 203, 19, 20, 127, + /* 1280 */ 22, 126, 204, 129, 22, 27, 28, 205, 132, 133, + /* 1290 */ 134, 135, 136, 89, 90, 231, 38, 95, 137, 179, + /* 1300 */ 96, 97, 98, 206, 179, 101, 122, 107, 159, 159, + /* 1310 */ 125, 231, 216, 228, 107, 57, 184, 217, 216, 176, + /* 1320 */ 217, 176, 48, 106, 18, 184, 158, 69, 159, 158, + /* 1330 */ 46, 71, 237, 176, 176, 176, 132, 133, 134, 135, + /* 1340 */ 136, 217, 176, 137, 216, 178, 158, 89, 90, 179, + /* 1350 */ 176, 159, 179, 159, 96, 97, 98, 159, 159, 101, + /* 1360 */ 5, 158, 202, 22, 18, 10, 11, 12, 13, 14, + /* 1370 */ 190, 238, 17, 190, 158, 193, 41, 159, 202, 193, + /* 1380 */ 159, 202, 245, 193, 193, 223, 190, 32, 159, 34, + /* 1390 */ 132, 133, 134, 135, 136, 159, 39, 155, 43, 150, + /* 1400 */ 223, 177, 201, 178, 177, 186, 66, 199, 177, 152, + /* 1410 */ 253, 56, 215, 152, 182, 152, 202, 152, 63, 152, + /* 1420 */ 152, 66, 67, 242, 229, 152, 174, 152, 152, 152, + /* 1430 */ 152, 152, 152, 152, 199, 242, 202, 152, 198, 152, + /* 1440 */ 152, 152, 183, 192, 152, 215, 152, 183, 215, 183, + /* 1450 */ 152, 241, 214, 152, 211, 152, 152, 211, 211, 152, + /* 1460 */ 152, 241, 152, 152, 152, 152, 152, 152, 152, 114, + /* 1470 */ 152, 152, 235, 152, 152, 152, 174, 187, 95, 174, + /* 1480 */ 253, 253, 253, 253, 236, 253, 253, 253, 253, 253, + /* 1490 */ 253, 253, 253, 253, 253, 253, 141, }; -#define YY_SHIFT_USE_DFLT (-70) -#define YY_SHIFT_COUNT (417) -#define YY_SHIFT_MIN (-69) -#define YY_SHIFT_MAX (1487) +#define YY_SHIFT_USE_DFLT (-86) +#define YY_SHIFT_COUNT (429) +#define YY_SHIFT_MIN (-85) +#define YY_SHIFT_MAX (1383) static const short yy_shift_ofst[] = { - /* 0 */ 1143, 1188, 1417, 1188, 1287, 1287, 138, 138, -2, -19, - /* 10 */ 1287, 1287, 1287, 1287, 347, 362, 129, 129, 795, 1165, - /* 20 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, - /* 30 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, - /* 40 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1310, 1287, - /* 50 */ 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, - /* 60 */ 1287, 1287, 286, 362, 362, 538, 538, 231, 1253, 55, - /* 70 */ 721, 647, 573, 499, 425, 351, 277, 203, 869, 869, - /* 80 */ 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, - /* 90 */ 869, 869, 869, 943, 869, 1017, 1091, 1091, -69, -45, - /* 100 */ -45, -45, -45, -45, -1, 24, 245, 362, 362, 362, - /* 110 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - /* 120 */ 362, 362, 362, 388, 356, 362, 362, 362, 362, 362, - /* 130 */ 732, 868, 231, 1051, 1471, -70, -70, -70, 1367, 57, - /* 140 */ 434, 434, 289, 291, 285, 1, 204, 572, 539, 362, - /* 150 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - /* 160 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - /* 170 */ 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - /* 180 */ 362, 506, 506, 506, 705, 1253, 1253, 1253, -70, -70, - /* 190 */ -70, 171, 171, 160, 502, 502, 502, 446, 432, 511, - /* 200 */ 422, 358, 335, -12, -12, -12, -12, 576, 294, -12, - /* 210 */ -12, 295, 595, 141, 600, 730, 723, 723, 805, 730, - /* 220 */ 805, 439, 911, 231, 865, 231, 865, 807, 865, 723, - /* 230 */ 766, 633, 633, 231, 284, 63, 608, 1481, 1308, 1308, - /* 240 */ 1472, 1472, 1308, 1477, 1427, 1275, 1487, 1487, 1487, 1487, - /* 250 */ 1308, 1461, 1275, 1477, 1427, 1427, 1275, 1308, 1461, 1355, - /* 260 */ 1441, 1308, 1308, 1461, 1308, 1461, 1308, 1461, 1442, 1348, - /* 270 */ 1348, 1348, 1408, 1375, 1375, 1442, 1348, 1357, 1348, 1408, - /* 280 */ 1348, 1348, 1316, 1331, 1316, 1331, 1316, 1331, 1308, 1308, - /* 290 */ 1280, 1288, 1289, 1285, 1279, 1275, 1253, 1336, 1346, 1346, - /* 300 */ 1338, 1338, 1338, 1338, -70, -70, -70, -70, -70, -70, - /* 310 */ 1013, 467, 612, 84, 179, -28, 870, 410, 761, 760, - /* 320 */ 667, 650, 531, 220, 361, 331, 125, 127, 97, 1306, - /* 330 */ 1300, 1270, 1151, 1272, 1203, 1232, 1261, 1244, 1148, 1174, - /* 340 */ 1139, 1156, 1124, 1220, 1115, 1210, 1233, 1099, 1193, 1184, - /* 350 */ 1174, 1173, 1029, 1121, 1120, 1085, 1162, 1119, 1037, 1152, - /* 360 */ 1147, 1129, 1046, 1011, 1093, 1098, 1075, 1061, 1032, 960, - /* 370 */ 1057, 1031, 1030, 899, 938, 982, 936, 972, 958, 910, - /* 380 */ 955, 875, 885, 908, 857, 859, 867, 804, 590, 834, - /* 390 */ 747, 818, 513, 611, 741, 673, 637, 611, 606, 603, - /* 400 */ 579, 501, 541, 468, 386, 445, 395, 376, 281, 185, - /* 410 */ 120, 92, 75, 45, 114, 25, 11, 5, + /* 0 */ 992, 1057, 1355, 1156, 1204, 1204, 1, 262, -19, 135, + /* 10 */ 135, 776, 1204, 1204, 1204, 1204, 69, 69, 53, 208, + /* 20 */ 283, 755, 58, 725, 648, 571, 494, 417, 340, 263, + /* 30 */ 212, 827, 827, 827, 827, 827, 827, 827, 827, 827, + /* 40 */ 827, 827, 827, 827, 827, 827, 878, 827, 929, 980, + /* 50 */ 980, 1070, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + /* 60 */ 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + /* 70 */ 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + /* 80 */ 1258, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + /* 90 */ 1204, 1204, 1204, 1204, -71, -47, -47, -47, -47, -47, + /* 100 */ 0, 29, -12, 283, 283, 139, 91, 392, 392, 894, + /* 110 */ 672, 726, 1383, -86, -86, -86, 88, 318, 318, 99, + /* 120 */ 381, -20, 283, 283, 283, 283, 283, 283, 283, 283, + /* 130 */ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, + /* 140 */ 283, 283, 283, 283, 624, 876, 726, 672, 1340, 1340, + /* 150 */ 1340, 1340, 1340, 1340, -86, -86, -86, 305, 136, 136, + /* 160 */ 142, 167, 226, 154, 137, 152, 283, 283, 283, 283, + /* 170 */ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, + /* 180 */ 283, 283, 283, 336, 336, 336, 283, 283, 352, 283, + /* 190 */ 283, 283, 283, 283, 228, 283, 283, 283, 283, 283, + /* 200 */ 283, 283, 283, 283, 283, 501, 569, 596, 596, 596, + /* 210 */ 507, 497, 441, 391, 353, 156, 156, 857, 353, 857, + /* 220 */ 735, 813, 639, 715, 156, 332, 715, 715, 496, 419, + /* 230 */ 646, 1357, 1184, 1184, 1335, 1335, 1184, 1341, 1260, 1144, + /* 240 */ 1346, 1346, 1346, 1346, 1184, 1306, 1144, 1341, 1260, 1260, + /* 250 */ 1144, 1184, 1306, 1206, 1284, 1184, 1184, 1306, 1184, 1306, + /* 260 */ 1184, 1306, 1262, 1207, 1207, 1207, 1274, 1262, 1207, 1217, + /* 270 */ 1207, 1274, 1207, 1207, 1185, 1200, 1185, 1200, 1185, 1200, + /* 280 */ 1184, 1184, 1161, 1262, 1202, 1202, 1262, 1154, 1155, 1147, + /* 290 */ 1152, 1144, 1241, 1239, 1250, 1250, 1254, 1254, 1254, 1254, + /* 300 */ -86, -86, -86, -86, -86, -86, 1068, 304, 526, 249, + /* 310 */ 408, -83, 434, 812, 27, 811, 807, 802, 751, 589, + /* 320 */ 651, 163, 131, 674, 366, 450, 299, 148, 23, 102, + /* 330 */ 229, -21, 1245, 1244, 1222, 1099, 1228, 1172, 1223, 1215, + /* 340 */ 1213, 1115, 1106, 1123, 1110, 1209, 1105, 1212, 1226, 1098, + /* 350 */ 1089, 1140, 1139, 1104, 1189, 1178, 1094, 1211, 1205, 1187, + /* 360 */ 1101, 1071, 1153, 1175, 1146, 1138, 1151, 1091, 1164, 1165, + /* 370 */ 1163, 1069, 1072, 1148, 1112, 1134, 1127, 1129, 1126, 1092, + /* 380 */ 1114, 1118, 1088, 1090, 1093, 1087, 1084, 987, 1079, 1077, + /* 390 */ 1074, 1065, 924, 1021, 1014, 1004, 1006, 819, 739, 896, + /* 400 */ 855, 804, 739, 740, 736, 690, 654, 665, 618, 582, + /* 410 */ 568, 528, 554, 379, 532, 479, 455, 379, 432, 371, + /* 420 */ 341, 28, 338, 116, -11, -57, -85, 7, -8, 3, }; -#define YY_REDUCE_USE_DFLT (-169) -#define YY_REDUCE_COUNT (309) -#define YY_REDUCE_MIN (-168) -#define YY_REDUCE_MAX (1397) +#define YY_REDUCE_USE_DFLT (-110) +#define YY_REDUCE_COUNT (305) +#define YY_REDUCE_MIN (-109) +#define YY_REDUCE_MAX (1323) static const short yy_reduce_ofst[] = { - /* 0 */ -141, 90, 1095, 222, 158, 156, 19, 17, 10, -104, - /* 10 */ 378, 316, 311, 12, 180, 249, 598, 464, 397, 1181, - /* 20 */ 1177, 1175, 1128, 1106, 1096, 1054, 1038, 974, 964, 962, - /* 30 */ 948, 905, 903, 900, 887, 874, 832, 826, 816, 813, - /* 40 */ 800, 758, 755, 752, 742, 739, 726, 685, 681, 668, - /* 50 */ 665, 652, 607, 604, 594, 591, 578, 530, 528, 526, - /* 60 */ 385, 18, 477, 466, 519, 444, 350, 435, 405, 488, - /* 70 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, - /* 80 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, - /* 90 */ 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, - /* 100 */ 488, 488, 488, 488, 488, 488, 488, 1040, 678, 1036, - /* 110 */ 1007, 967, 966, 965, 845, 686, 610, 684, 317, 672, - /* 120 */ 893, 327, 623, 522, -7, 820, 814, 157, 154, 101, - /* 130 */ 702, 494, 580, 488, 488, 488, 488, 488, 614, 586, - /* 140 */ 935, 892, 968, 1245, 1242, 1234, 1225, 798, 798, 1222, - /* 150 */ 1221, 1218, 1214, 1213, 1212, 1202, 1195, 1191, 1161, 1158, - /* 160 */ 1140, 1135, 1123, 1112, 1107, 1100, 1080, 1074, 1073, 1072, - /* 170 */ 1070, 1067, 1048, 1044, 969, 968, 907, 906, 904, 894, - /* 180 */ 833, 837, 836, 340, 827, 815, 775, 68, 722, 646, - /* 190 */ -168, 1389, 1381, 1371, 1379, 1373, 1370, 1343, 1352, 1369, - /* 200 */ 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1325, 1320, 1352, - /* 210 */ 1352, 1343, 1380, 1353, 1397, 1351, 1339, 1334, 1319, 1341, - /* 220 */ 1303, 1364, 1359, 1368, 1362, 1366, 1360, 1350, 1354, 1318, - /* 230 */ 1313, 1307, 1305, 1363, 1328, 1324, 1372, 1278, 1361, 1358, - /* 240 */ 1277, 1276, 1356, 1296, 1322, 1309, 1317, 1315, 1314, 1312, - /* 250 */ 1345, 1347, 1302, 1292, 1311, 1304, 1293, 1337, 1335, 1252, - /* 260 */ 1248, 1332, 1330, 1329, 1327, 1326, 1323, 1321, 1297, 1301, - /* 270 */ 1295, 1294, 1290, 1243, 1240, 1284, 1291, 1286, 1283, 1274, - /* 280 */ 1281, 1271, 1238, 1241, 1236, 1235, 1227, 1226, 1267, 1266, - /* 290 */ 1189, 1229, 1223, 1211, 1206, 1201, 1197, 1239, 1237, 1219, - /* 300 */ 1216, 1209, 1208, 1185, 1089, 1086, 1087, 1137, 1136, 1164, + /* 0 */ 238, 954, 213, 289, 310, 234, 144, 317, -109, 382, + /* 10 */ 377, 303, 461, 389, 378, 368, 302, 294, 253, 395, + /* 20 */ 293, 324, 403, 403, 403, 403, 403, 403, 403, 403, + /* 30 */ 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + /* 40 */ 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + /* 50 */ 403, 1022, 1012, 1005, 998, 963, 961, 959, 957, 950, + /* 60 */ 947, 930, 912, 873, 861, 823, 810, 771, 759, 720, + /* 70 */ 708, 670, 657, 619, 614, 612, 610, 608, 606, 604, + /* 80 */ 598, 595, 593, 580, 542, 540, 537, 535, 533, 531, + /* 90 */ 529, 527, 503, 386, 403, 403, 403, 403, 403, 403, + /* 100 */ 403, 403, 403, 95, 447, 82, 334, 504, 467, 403, + /* 110 */ 477, 464, 403, 403, 403, 403, 860, 747, 744, 785, + /* 120 */ 638, 638, 926, 891, 900, 899, 887, 844, 840, 835, + /* 130 */ 848, 830, 843, 829, 792, 839, 826, 737, 838, 795, + /* 140 */ 789, 47, 734, 530, 696, 777, 711, 677, 733, 730, + /* 150 */ 729, 728, 727, 627, 448, 64, 187, 1305, 1302, 1252, + /* 160 */ 1290, 1273, 1323, 1322, 1321, 1319, 1318, 1316, 1315, 1314, + /* 170 */ 1313, 1312, 1311, 1310, 1308, 1307, 1304, 1303, 1301, 1298, + /* 180 */ 1294, 1292, 1289, 1266, 1264, 1259, 1288, 1287, 1238, 1285, + /* 190 */ 1281, 1280, 1279, 1278, 1251, 1277, 1276, 1275, 1273, 1268, + /* 200 */ 1267, 1265, 1263, 1261, 1257, 1248, 1237, 1247, 1246, 1243, + /* 210 */ 1238, 1240, 1235, 1249, 1234, 1233, 1230, 1220, 1214, 1210, + /* 220 */ 1225, 1219, 1232, 1231, 1197, 1195, 1227, 1224, 1201, 1208, + /* 230 */ 1242, 1137, 1236, 1229, 1193, 1181, 1221, 1177, 1196, 1179, + /* 240 */ 1191, 1190, 1186, 1182, 1218, 1216, 1176, 1162, 1183, 1180, + /* 250 */ 1160, 1199, 1203, 1133, 1095, 1198, 1194, 1188, 1192, 1171, + /* 260 */ 1169, 1168, 1173, 1174, 1166, 1159, 1141, 1170, 1158, 1167, + /* 270 */ 1157, 1132, 1145, 1143, 1124, 1128, 1103, 1102, 1100, 1096, + /* 280 */ 1150, 1149, 1085, 1125, 1080, 1064, 1120, 1097, 1082, 1078, + /* 290 */ 1073, 1067, 1109, 1107, 1119, 1117, 1116, 1113, 1111, 1108, + /* 300 */ 1007, 1000, 1002, 1076, 1075, 1081, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 633, 867, 955, 955, 867, 867, 955, 955, 955, 757, - /* 10 */ 955, 955, 955, 865, 955, 955, 785, 785, 929, 955, - /* 20 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 30 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 40 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 50 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 60 */ 955, 955, 955, 955, 955, 955, 955, 672, 761, 791, - /* 70 */ 955, 955, 955, 955, 955, 955, 955, 955, 928, 930, - /* 80 */ 799, 798, 908, 772, 796, 789, 793, 868, 861, 862, - /* 90 */ 860, 864, 869, 955, 792, 828, 845, 827, 839, 844, - /* 100 */ 851, 843, 840, 830, 829, 831, 832, 955, 955, 955, - /* 110 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 120 */ 955, 955, 955, 659, 726, 955, 955, 955, 955, 955, - /* 130 */ 955, 955, 955, 833, 834, 848, 847, 846, 955, 664, - /* 140 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 150 */ 935, 933, 955, 880, 955, 955, 955, 955, 955, 955, - /* 160 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 170 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 180 */ 639, 757, 757, 757, 633, 955, 955, 955, 947, 761, - /* 190 */ 751, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 200 */ 955, 955, 955, 801, 740, 918, 920, 955, 901, 738, - /* 210 */ 661, 759, 674, 749, 641, 795, 774, 774, 913, 795, - /* 220 */ 913, 697, 720, 955, 785, 955, 785, 694, 785, 774, - /* 230 */ 863, 955, 955, 955, 758, 749, 955, 940, 765, 765, - /* 240 */ 932, 932, 765, 807, 730, 795, 737, 737, 737, 737, - /* 250 */ 765, 656, 795, 807, 730, 730, 795, 765, 656, 907, - /* 260 */ 905, 765, 765, 656, 765, 656, 765, 656, 873, 728, - /* 270 */ 728, 728, 712, 877, 877, 873, 728, 697, 728, 712, - /* 280 */ 728, 728, 778, 773, 778, 773, 778, 773, 765, 765, - /* 290 */ 955, 790, 779, 788, 786, 795, 955, 715, 649, 649, - /* 300 */ 638, 638, 638, 638, 952, 952, 947, 699, 699, 682, - /* 310 */ 955, 955, 955, 955, 955, 955, 955, 882, 955, 955, - /* 320 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 330 */ 634, 942, 955, 955, 939, 955, 955, 955, 955, 800, - /* 340 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 350 */ 917, 955, 955, 955, 955, 955, 955, 955, 911, 955, - /* 360 */ 955, 955, 955, 955, 955, 904, 903, 955, 955, 955, - /* 370 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 380 */ 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, - /* 390 */ 955, 955, 955, 787, 955, 780, 955, 866, 955, 955, - /* 400 */ 955, 955, 955, 955, 955, 955, 955, 955, 743, 816, - /* 410 */ 955, 815, 819, 814, 666, 955, 647, 955, 630, 635, - /* 420 */ 951, 954, 953, 950, 949, 948, 943, 941, 938, 937, - /* 430 */ 936, 934, 931, 927, 886, 884, 891, 890, 889, 888, - /* 440 */ 887, 885, 883, 881, 802, 797, 794, 926, 879, 739, - /* 450 */ 736, 735, 655, 944, 910, 919, 806, 805, 808, 916, - /* 460 */ 915, 914, 912, 909, 896, 804, 803, 731, 871, 870, - /* 470 */ 658, 900, 899, 898, 902, 906, 897, 767, 657, 654, - /* 480 */ 663, 718, 719, 727, 725, 724, 723, 722, 721, 717, - /* 490 */ 665, 673, 711, 696, 695, 876, 878, 875, 874, 704, - /* 500 */ 703, 709, 708, 707, 706, 705, 702, 701, 700, 693, - /* 510 */ 692, 698, 691, 714, 713, 710, 690, 734, 733, 732, - /* 520 */ 729, 689, 688, 687, 819, 686, 685, 825, 824, 812, - /* 530 */ 855, 754, 753, 752, 764, 763, 776, 775, 810, 809, - /* 540 */ 777, 762, 756, 755, 771, 770, 769, 768, 760, 750, - /* 550 */ 782, 784, 783, 781, 857, 766, 854, 925, 924, 923, - /* 560 */ 922, 921, 859, 858, 826, 823, 677, 678, 894, 893, - /* 570 */ 895, 892, 680, 679, 676, 675, 856, 745, 744, 852, - /* 580 */ 849, 841, 837, 853, 850, 842, 838, 836, 835, 821, - /* 590 */ 820, 818, 817, 813, 822, 668, 746, 742, 741, 811, - /* 600 */ 748, 747, 684, 683, 681, 662, 660, 653, 651, 650, - /* 610 */ 652, 648, 646, 645, 644, 643, 642, 671, 670, 669, - /* 620 */ 667, 666, 640, 637, 636, 632, 631, 629, + /* 0 */ 647, 964, 964, 964, 878, 878, 969, 964, 774, 802, + /* 10 */ 802, 938, 969, 969, 969, 876, 969, 969, 969, 964, + /* 20 */ 969, 778, 808, 969, 969, 969, 969, 969, 969, 969, + /* 30 */ 969, 937, 939, 816, 815, 918, 789, 813, 806, 810, + /* 40 */ 879, 872, 873, 871, 875, 880, 969, 809, 841, 856, + /* 50 */ 840, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 60 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 70 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 80 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 90 */ 969, 969, 969, 969, 850, 855, 862, 854, 851, 843, + /* 100 */ 842, 844, 845, 969, 969, 673, 739, 969, 969, 846, + /* 110 */ 969, 685, 847, 859, 858, 857, 680, 969, 969, 969, + /* 120 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 130 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 140 */ 969, 969, 969, 969, 647, 964, 969, 969, 964, 964, + /* 150 */ 964, 964, 964, 964, 956, 778, 768, 969, 969, 969, + /* 160 */ 969, 969, 969, 969, 969, 969, 969, 944, 942, 969, + /* 170 */ 891, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 180 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 190 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 200 */ 969, 969, 969, 969, 653, 969, 911, 774, 774, 774, + /* 210 */ 776, 754, 766, 655, 812, 791, 791, 923, 812, 923, + /* 220 */ 710, 733, 707, 802, 791, 874, 802, 802, 775, 766, + /* 230 */ 969, 949, 782, 782, 941, 941, 782, 821, 743, 812, + /* 240 */ 750, 750, 750, 750, 782, 670, 812, 821, 743, 743, + /* 250 */ 812, 782, 670, 917, 915, 782, 782, 670, 782, 670, + /* 260 */ 782, 670, 884, 741, 741, 741, 725, 884, 741, 710, + /* 270 */ 741, 725, 741, 741, 795, 790, 795, 790, 795, 790, + /* 280 */ 782, 782, 969, 884, 888, 888, 884, 807, 796, 805, + /* 290 */ 803, 812, 676, 728, 663, 663, 652, 652, 652, 652, + /* 300 */ 961, 961, 956, 712, 712, 695, 969, 969, 969, 969, + /* 310 */ 969, 969, 687, 969, 893, 969, 969, 969, 969, 969, + /* 320 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 330 */ 969, 828, 969, 648, 951, 969, 969, 948, 969, 969, + /* 340 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 350 */ 969, 969, 969, 969, 969, 969, 921, 969, 969, 969, + /* 360 */ 969, 969, 969, 914, 913, 969, 969, 969, 969, 969, + /* 370 */ 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, + /* 380 */ 969, 969, 969, 969, 969, 969, 969, 757, 969, 969, + /* 390 */ 969, 761, 969, 969, 969, 969, 969, 969, 804, 969, + /* 400 */ 797, 969, 877, 969, 969, 969, 969, 969, 969, 969, + /* 410 */ 969, 969, 969, 966, 969, 969, 969, 965, 969, 969, + /* 420 */ 969, 969, 969, 830, 969, 829, 833, 969, 661, 969, + /* 430 */ 644, 649, 960, 963, 962, 959, 958, 957, 952, 950, + /* 440 */ 947, 946, 945, 943, 940, 936, 897, 895, 902, 901, + /* 450 */ 900, 899, 898, 896, 894, 892, 818, 817, 814, 811, + /* 460 */ 753, 935, 890, 752, 749, 748, 669, 953, 920, 929, + /* 470 */ 928, 927, 822, 926, 925, 924, 922, 919, 906, 820, + /* 480 */ 819, 744, 882, 881, 672, 910, 909, 908, 912, 916, + /* 490 */ 907, 784, 751, 671, 668, 675, 679, 731, 732, 740, + /* 500 */ 738, 737, 736, 735, 734, 730, 681, 686, 724, 709, + /* 510 */ 708, 717, 716, 722, 721, 720, 719, 718, 715, 714, + /* 520 */ 713, 706, 705, 711, 704, 727, 726, 723, 703, 747, + /* 530 */ 746, 745, 742, 702, 701, 700, 833, 699, 698, 838, + /* 540 */ 837, 866, 826, 755, 759, 758, 762, 763, 771, 770, + /* 550 */ 769, 780, 781, 793, 792, 824, 823, 794, 779, 773, + /* 560 */ 772, 788, 787, 786, 785, 777, 767, 799, 798, 868, + /* 570 */ 783, 867, 865, 934, 933, 932, 931, 930, 870, 967, + /* 580 */ 968, 887, 889, 886, 801, 800, 885, 869, 839, 836, + /* 590 */ 690, 691, 905, 904, 903, 693, 692, 689, 688, 863, + /* 600 */ 860, 852, 864, 861, 853, 849, 848, 834, 832, 831, + /* 610 */ 827, 835, 760, 756, 825, 765, 764, 697, 696, 694, + /* 620 */ 678, 677, 674, 667, 665, 664, 666, 662, 660, 659, + /* 630 */ 658, 657, 656, 684, 683, 682, 654, 651, 650, 646, + /* 640 */ 645, 643, }; /* The next table maps tokens into fallback tokens. If a construct @@ -113579,71 +115504,74 @@ static const YYACTIONTYPE yy_default[] = { static const YYCODETYPE yyFallback[] = { 0, /* $ => nothing */ 0, /* SEMI => nothing */ - 26, /* EXPLAIN => ID */ - 26, /* QUERY => ID */ - 26, /* PLAN => ID */ - 26, /* BEGIN => ID */ + 27, /* EXPLAIN => ID */ + 27, /* QUERY => ID */ + 27, /* PLAN => ID */ + 27, /* BEGIN => ID */ 0, /* TRANSACTION => nothing */ - 26, /* DEFERRED => ID */ - 26, /* IMMEDIATE => ID */ - 26, /* EXCLUSIVE => ID */ + 27, /* DEFERRED => ID */ + 27, /* IMMEDIATE => ID */ + 27, /* EXCLUSIVE => ID */ 0, /* COMMIT => nothing */ - 26, /* END => ID */ - 26, /* ROLLBACK => ID */ - 26, /* SAVEPOINT => ID */ - 26, /* RELEASE => ID */ + 27, /* END => ID */ + 27, /* ROLLBACK => ID */ + 27, /* SAVEPOINT => ID */ + 27, /* RELEASE => ID */ 0, /* TO => nothing */ 0, /* TABLE => nothing */ 0, /* CREATE => nothing */ - 26, /* IF => ID */ + 27, /* IF => ID */ 0, /* NOT => nothing */ 0, /* EXISTS => nothing */ - 26, /* TEMP => ID */ + 27, /* TEMP => ID */ 0, /* LP => nothing */ 0, /* RP => nothing */ 0, /* AS => nothing */ + 27, /* WITHOUT => ID */ 0, /* COMMA => nothing */ 0, /* ID => nothing */ 0, /* INDEXED => nothing */ - 26, /* ABORT => ID */ - 26, /* ACTION => ID */ - 26, /* AFTER => ID */ - 26, /* ANALYZE => ID */ - 26, /* ASC => ID */ - 26, /* ATTACH => ID */ - 26, /* BEFORE => ID */ - 26, /* BY => ID */ - 26, /* CASCADE => ID */ - 26, /* CAST => ID */ - 26, /* COLUMNKW => ID */ - 26, /* CONFLICT => ID */ - 26, /* DATABASE => ID */ - 26, /* DESC => ID */ - 26, /* DETACH => ID */ - 26, /* EACH => ID */ - 26, /* FAIL => ID */ - 26, /* FOR => ID */ - 26, /* IGNORE => ID */ - 26, /* INITIALLY => ID */ - 26, /* INSTEAD => ID */ - 26, /* LIKE_KW => ID */ - 26, /* MATCH => ID */ - 26, /* NO => ID */ - 26, /* KEY => ID */ - 26, /* OF => ID */ - 26, /* OFFSET => ID */ - 26, /* PRAGMA => ID */ - 26, /* RAISE => ID */ - 26, /* REPLACE => ID */ - 26, /* RESTRICT => ID */ - 26, /* ROW => ID */ - 26, /* TRIGGER => ID */ - 26, /* VACUUM => ID */ - 26, /* VIEW => ID */ - 26, /* VIRTUAL => ID */ - 26, /* REINDEX => ID */ - 26, /* RENAME => ID */ - 26, /* CTIME_KW => ID */ + 27, /* ABORT => ID */ + 27, /* ACTION => ID */ + 27, /* AFTER => ID */ + 27, /* ANALYZE => ID */ + 27, /* ASC => ID */ + 27, /* ATTACH => ID */ + 27, /* BEFORE => ID */ + 27, /* BY => ID */ + 27, /* CASCADE => ID */ + 27, /* CAST => ID */ + 27, /* COLUMNKW => ID */ + 27, /* CONFLICT => ID */ + 27, /* DATABASE => ID */ + 27, /* DESC => ID */ + 27, /* DETACH => ID */ + 27, /* EACH => ID */ + 27, /* FAIL => ID */ + 27, /* FOR => ID */ + 27, /* IGNORE => ID */ + 27, /* INITIALLY => ID */ + 27, /* INSTEAD => ID */ + 27, /* LIKE_KW => ID */ + 27, /* MATCH => ID */ + 27, /* NO => ID */ + 27, /* KEY => ID */ + 27, /* OF => ID */ + 27, /* OFFSET => ID */ + 27, /* PRAGMA => ID */ + 27, /* RAISE => ID */ + 27, /* RECURSIVE => ID */ + 27, /* REPLACE => ID */ + 27, /* RESTRICT => ID */ + 27, /* ROW => ID */ + 27, /* TRIGGER => ID */ + 27, /* VACUUM => ID */ + 27, /* VIEW => ID */ + 27, /* VIRTUAL => ID */ + 27, /* WITH => ID */ + 27, /* REINDEX => ID */ + 27, /* RENAME => ID */ + 27, /* CTIME_KW => ID */ }; #endif /* YYFALLBACK */ @@ -113728,63 +115656,64 @@ static const char *const yyTokenName[] = { "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", "TABLE", "CREATE", "IF", "NOT", "EXISTS", "TEMP", "LP", "RP", - "AS", "COMMA", "ID", "INDEXED", - "ABORT", "ACTION", "AFTER", "ANALYZE", - "ASC", "ATTACH", "BEFORE", "BY", - "CASCADE", "CAST", "COLUMNKW", "CONFLICT", - "DATABASE", "DESC", "DETACH", "EACH", - "FAIL", "FOR", "IGNORE", "INITIALLY", - "INSTEAD", "LIKE_KW", "MATCH", "NO", - "KEY", "OF", "OFFSET", "PRAGMA", - "RAISE", "REPLACE", "RESTRICT", "ROW", - "TRIGGER", "VACUUM", "VIEW", "VIRTUAL", - "REINDEX", "RENAME", "CTIME_KW", "ANY", - "OR", "AND", "IS", "BETWEEN", - "IN", "ISNULL", "NOTNULL", "NE", - "EQ", "GT", "LE", "LT", - "GE", "ESCAPE", "BITAND", "BITOR", - "LSHIFT", "RSHIFT", "PLUS", "MINUS", - "STAR", "SLASH", "REM", "CONCAT", - "COLLATE", "BITNOT", "STRING", "JOIN_KW", - "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY", - "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR", - "ON", "INSERT", "DELETE", "UPDATE", - "SET", "DEFERRABLE", "FOREIGN", "DROP", - "UNION", "ALL", "EXCEPT", "INTERSECT", - "SELECT", "DISTINCT", "DOT", "FROM", + "AS", "WITHOUT", "COMMA", "ID", + "INDEXED", "ABORT", "ACTION", "AFTER", + "ANALYZE", "ASC", "ATTACH", "BEFORE", + "BY", "CASCADE", "CAST", "COLUMNKW", + "CONFLICT", "DATABASE", "DESC", "DETACH", + "EACH", "FAIL", "FOR", "IGNORE", + "INITIALLY", "INSTEAD", "LIKE_KW", "MATCH", + "NO", "KEY", "OF", "OFFSET", + "PRAGMA", "RAISE", "RECURSIVE", "REPLACE", + "RESTRICT", "ROW", "TRIGGER", "VACUUM", + "VIEW", "VIRTUAL", "WITH", "REINDEX", + "RENAME", "CTIME_KW", "ANY", "OR", + "AND", "IS", "BETWEEN", "IN", + "ISNULL", "NOTNULL", "NE", "EQ", + "GT", "LE", "LT", "GE", + "ESCAPE", "BITAND", "BITOR", "LSHIFT", + "RSHIFT", "PLUS", "MINUS", "STAR", + "SLASH", "REM", "CONCAT", "COLLATE", + "BITNOT", "STRING", "JOIN_KW", "CONSTRAINT", + "DEFAULT", "NULL", "PRIMARY", "UNIQUE", + "CHECK", "REFERENCES", "AUTOINCR", "ON", + "INSERT", "DELETE", "UPDATE", "SET", + "DEFERRABLE", "FOREIGN", "DROP", "UNION", + "ALL", "EXCEPT", "INTERSECT", "SELECT", + "VALUES", "DISTINCT", "DOT", "FROM", "JOIN", "USING", "ORDER", "GROUP", "HAVING", "LIMIT", "WHERE", "INTO", - "VALUES", "INTEGER", "FLOAT", "BLOB", - "REGISTER", "VARIABLE", "CASE", "WHEN", - "THEN", "ELSE", "INDEX", "ALTER", - "ADD", "error", "input", "cmdlist", - "ecmd", "explain", "cmdx", "cmd", - "transtype", "trans_opt", "nm", "savepoint_opt", - "create_table", "create_table_args", "createkw", "temp", - "ifnotexists", "dbnm", "columnlist", "conslist_opt", - "select", "column", "columnid", "type", - "carglist", "id", "ids", "typetoken", - "typename", "signed", "plus_num", "minus_num", - "ccons", "term", "expr", "onconf", - "sortorder", "autoinc", "idxlist_opt", "refargs", - "defer_subclause", "refarg", "refact", "init_deferred_pred_opt", - "conslist", "tconscomma", "tcons", "idxlist", - "defer_subclause_opt", "orconf", "resolvetype", "raisetype", - "ifexists", "fullname", "oneselect", "multiselect_op", - "distinct", "selcollist", "from", "where_opt", - "groupby_opt", "having_opt", "orderby_opt", "limit_opt", - "sclp", "as", "seltablist", "stl_prefix", - "joinop", "indexed_opt", "on_opt", "using_opt", - "joinop2", "inscollist", "sortlist", "nexprlist", - "setlist", "insert_cmd", "inscollist_opt", "valuelist", - "exprlist", "likeop", "between_op", "in_op", - "case_operand", "case_exprlist", "case_else", "uniqueflag", - "collate", "nmnum", "number", "trigger_decl", - "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause", - "when_clause", "trigger_cmd", "trnm", "tridxby", - "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt", - "create_vtab", "vtabarglist", "vtabarg", "vtabargtoken", - "lp", "anylist", + "INTEGER", "FLOAT", "BLOB", "VARIABLE", + "CASE", "WHEN", "THEN", "ELSE", + "INDEX", "ALTER", "ADD", "error", + "input", "cmdlist", "ecmd", "explain", + "cmdx", "cmd", "transtype", "trans_opt", + "nm", "savepoint_opt", "create_table", "create_table_args", + "createkw", "temp", "ifnotexists", "dbnm", + "columnlist", "conslist_opt", "table_options", "select", + "column", "columnid", "type", "carglist", + "typetoken", "typename", "signed", "plus_num", + "minus_num", "ccons", "term", "expr", + "onconf", "sortorder", "autoinc", "idxlist_opt", + "refargs", "defer_subclause", "refarg", "refact", + "init_deferred_pred_opt", "conslist", "tconscomma", "tcons", + "idxlist", "defer_subclause_opt", "orconf", "resolvetype", + "raisetype", "ifexists", "fullname", "selectnowith", + "oneselect", "with", "multiselect_op", "distinct", + "selcollist", "from", "where_opt", "groupby_opt", + "having_opt", "orderby_opt", "limit_opt", "values", + "nexprlist", "exprlist", "sclp", "as", + "seltablist", "stl_prefix", "joinop", "indexed_opt", + "on_opt", "using_opt", "joinop2", "idlist", + "sortlist", "setlist", "insert_cmd", "inscollist_opt", + "likeop", "between_op", "in_op", "case_operand", + "case_exprlist", "case_else", "uniqueflag", "collate", + "nmnum", "trigger_decl", "trigger_cmd_list", "trigger_time", + "trigger_event", "foreach_clause", "when_clause", "trigger_cmd", + "trnm", "tridxby", "database_kw_opt", "key_opt", + "add_column_fullname", "kwcolumn_opt", "create_vtab", "vtabarglist", + "vtabarg", "vtabargtoken", "lp", "anylist", + "wqlist", }; #endif /* NDEBUG */ @@ -113824,301 +115753,301 @@ static const char *const yyRuleName[] = { /* 29 */ "ifnotexists ::= IF NOT EXISTS", /* 30 */ "temp ::= TEMP", /* 31 */ "temp ::=", - /* 32 */ "create_table_args ::= LP columnlist conslist_opt RP", + /* 32 */ "create_table_args ::= LP columnlist conslist_opt RP table_options", /* 33 */ "create_table_args ::= AS select", - /* 34 */ "columnlist ::= columnlist COMMA column", - /* 35 */ "columnlist ::= column", - /* 36 */ "column ::= columnid type carglist", - /* 37 */ "columnid ::= nm", - /* 38 */ "id ::= ID", - /* 39 */ "id ::= INDEXED", - /* 40 */ "ids ::= ID|STRING", - /* 41 */ "nm ::= id", - /* 42 */ "nm ::= STRING", - /* 43 */ "nm ::= JOIN_KW", - /* 44 */ "type ::=", - /* 45 */ "type ::= typetoken", - /* 46 */ "typetoken ::= typename", - /* 47 */ "typetoken ::= typename LP signed RP", - /* 48 */ "typetoken ::= typename LP signed COMMA signed RP", - /* 49 */ "typename ::= ids", - /* 50 */ "typename ::= typename ids", - /* 51 */ "signed ::= plus_num", - /* 52 */ "signed ::= minus_num", - /* 53 */ "carglist ::= carglist ccons", - /* 54 */ "carglist ::=", - /* 55 */ "ccons ::= CONSTRAINT nm", - /* 56 */ "ccons ::= DEFAULT term", - /* 57 */ "ccons ::= DEFAULT LP expr RP", - /* 58 */ "ccons ::= DEFAULT PLUS term", - /* 59 */ "ccons ::= DEFAULT MINUS term", - /* 60 */ "ccons ::= DEFAULT id", - /* 61 */ "ccons ::= NULL onconf", - /* 62 */ "ccons ::= NOT NULL onconf", - /* 63 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", - /* 64 */ "ccons ::= UNIQUE onconf", - /* 65 */ "ccons ::= CHECK LP expr RP", - /* 66 */ "ccons ::= REFERENCES nm idxlist_opt refargs", - /* 67 */ "ccons ::= defer_subclause", - /* 68 */ "ccons ::= COLLATE ids", - /* 69 */ "autoinc ::=", - /* 70 */ "autoinc ::= AUTOINCR", - /* 71 */ "refargs ::=", - /* 72 */ "refargs ::= refargs refarg", - /* 73 */ "refarg ::= MATCH nm", - /* 74 */ "refarg ::= ON INSERT refact", - /* 75 */ "refarg ::= ON DELETE refact", - /* 76 */ "refarg ::= ON UPDATE refact", - /* 77 */ "refact ::= SET NULL", - /* 78 */ "refact ::= SET DEFAULT", - /* 79 */ "refact ::= CASCADE", - /* 80 */ "refact ::= RESTRICT", - /* 81 */ "refact ::= NO ACTION", - /* 82 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", - /* 83 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", - /* 84 */ "init_deferred_pred_opt ::=", - /* 85 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", - /* 86 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", - /* 87 */ "conslist_opt ::=", - /* 88 */ "conslist_opt ::= COMMA conslist", - /* 89 */ "conslist ::= conslist tconscomma tcons", - /* 90 */ "conslist ::= tcons", - /* 91 */ "tconscomma ::= COMMA", - /* 92 */ "tconscomma ::=", - /* 93 */ "tcons ::= CONSTRAINT nm", - /* 94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf", - /* 95 */ "tcons ::= UNIQUE LP idxlist RP onconf", - /* 96 */ "tcons ::= CHECK LP expr RP onconf", - /* 97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt", - /* 98 */ "defer_subclause_opt ::=", - /* 99 */ "defer_subclause_opt ::= defer_subclause", - /* 100 */ "onconf ::=", - /* 101 */ "onconf ::= ON CONFLICT resolvetype", - /* 102 */ "orconf ::=", - /* 103 */ "orconf ::= OR resolvetype", - /* 104 */ "resolvetype ::= raisetype", - /* 105 */ "resolvetype ::= IGNORE", - /* 106 */ "resolvetype ::= REPLACE", - /* 107 */ "cmd ::= DROP TABLE ifexists fullname", - /* 108 */ "ifexists ::= IF EXISTS", - /* 109 */ "ifexists ::=", - /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select", - /* 111 */ "cmd ::= DROP VIEW ifexists fullname", - /* 112 */ "cmd ::= select", - /* 113 */ "select ::= oneselect", - /* 114 */ "select ::= select multiselect_op oneselect", + /* 34 */ "table_options ::=", + /* 35 */ "table_options ::= WITHOUT nm", + /* 36 */ "columnlist ::= columnlist COMMA column", + /* 37 */ "columnlist ::= column", + /* 38 */ "column ::= columnid type carglist", + /* 39 */ "columnid ::= nm", + /* 40 */ "nm ::= ID|INDEXED", + /* 41 */ "nm ::= STRING", + /* 42 */ "nm ::= JOIN_KW", + /* 43 */ "type ::=", + /* 44 */ "type ::= typetoken", + /* 45 */ "typetoken ::= typename", + /* 46 */ "typetoken ::= typename LP signed RP", + /* 47 */ "typetoken ::= typename LP signed COMMA signed RP", + /* 48 */ "typename ::= ID|STRING", + /* 49 */ "typename ::= typename ID|STRING", + /* 50 */ "signed ::= plus_num", + /* 51 */ "signed ::= minus_num", + /* 52 */ "carglist ::= carglist ccons", + /* 53 */ "carglist ::=", + /* 54 */ "ccons ::= CONSTRAINT nm", + /* 55 */ "ccons ::= DEFAULT term", + /* 56 */ "ccons ::= DEFAULT LP expr RP", + /* 57 */ "ccons ::= DEFAULT PLUS term", + /* 58 */ "ccons ::= DEFAULT MINUS term", + /* 59 */ "ccons ::= DEFAULT ID|INDEXED", + /* 60 */ "ccons ::= NULL onconf", + /* 61 */ "ccons ::= NOT NULL onconf", + /* 62 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", + /* 63 */ "ccons ::= UNIQUE onconf", + /* 64 */ "ccons ::= CHECK LP expr RP", + /* 65 */ "ccons ::= REFERENCES nm idxlist_opt refargs", + /* 66 */ "ccons ::= defer_subclause", + /* 67 */ "ccons ::= COLLATE ID|STRING", + /* 68 */ "autoinc ::=", + /* 69 */ "autoinc ::= AUTOINCR", + /* 70 */ "refargs ::=", + /* 71 */ "refargs ::= refargs refarg", + /* 72 */ "refarg ::= MATCH nm", + /* 73 */ "refarg ::= ON INSERT refact", + /* 74 */ "refarg ::= ON DELETE refact", + /* 75 */ "refarg ::= ON UPDATE refact", + /* 76 */ "refact ::= SET NULL", + /* 77 */ "refact ::= SET DEFAULT", + /* 78 */ "refact ::= CASCADE", + /* 79 */ "refact ::= RESTRICT", + /* 80 */ "refact ::= NO ACTION", + /* 81 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", + /* 82 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", + /* 83 */ "init_deferred_pred_opt ::=", + /* 84 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", + /* 85 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", + /* 86 */ "conslist_opt ::=", + /* 87 */ "conslist_opt ::= COMMA conslist", + /* 88 */ "conslist ::= conslist tconscomma tcons", + /* 89 */ "conslist ::= tcons", + /* 90 */ "tconscomma ::= COMMA", + /* 91 */ "tconscomma ::=", + /* 92 */ "tcons ::= CONSTRAINT nm", + /* 93 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf", + /* 94 */ "tcons ::= UNIQUE LP idxlist RP onconf", + /* 95 */ "tcons ::= CHECK LP expr RP onconf", + /* 96 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt", + /* 97 */ "defer_subclause_opt ::=", + /* 98 */ "defer_subclause_opt ::= defer_subclause", + /* 99 */ "onconf ::=", + /* 100 */ "onconf ::= ON CONFLICT resolvetype", + /* 101 */ "orconf ::=", + /* 102 */ "orconf ::= OR resolvetype", + /* 103 */ "resolvetype ::= raisetype", + /* 104 */ "resolvetype ::= IGNORE", + /* 105 */ "resolvetype ::= REPLACE", + /* 106 */ "cmd ::= DROP TABLE ifexists fullname", + /* 107 */ "ifexists ::= IF EXISTS", + /* 108 */ "ifexists ::=", + /* 109 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select", + /* 110 */ "cmd ::= DROP VIEW ifexists fullname", + /* 111 */ "cmd ::= select", + /* 112 */ "select ::= with selectnowith", + /* 113 */ "selectnowith ::= oneselect", + /* 114 */ "selectnowith ::= selectnowith multiselect_op oneselect", /* 115 */ "multiselect_op ::= UNION", /* 116 */ "multiselect_op ::= UNION ALL", /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT", /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", - /* 119 */ "distinct ::= DISTINCT", - /* 120 */ "distinct ::= ALL", - /* 121 */ "distinct ::=", - /* 122 */ "sclp ::= selcollist COMMA", - /* 123 */ "sclp ::=", - /* 124 */ "selcollist ::= sclp expr as", - /* 125 */ "selcollist ::= sclp STAR", - /* 126 */ "selcollist ::= sclp nm DOT STAR", - /* 127 */ "as ::= AS nm", - /* 128 */ "as ::= ids", - /* 129 */ "as ::=", - /* 130 */ "from ::=", - /* 131 */ "from ::= FROM seltablist", - /* 132 */ "stl_prefix ::= seltablist joinop", - /* 133 */ "stl_prefix ::=", - /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", - /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", - /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", - /* 137 */ "dbnm ::=", - /* 138 */ "dbnm ::= DOT nm", - /* 139 */ "fullname ::= nm dbnm", - /* 140 */ "joinop ::= COMMA|JOIN", - /* 141 */ "joinop ::= JOIN_KW JOIN", - /* 142 */ "joinop ::= JOIN_KW nm JOIN", - /* 143 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 144 */ "on_opt ::= ON expr", - /* 145 */ "on_opt ::=", - /* 146 */ "indexed_opt ::=", - /* 147 */ "indexed_opt ::= INDEXED BY nm", - /* 148 */ "indexed_opt ::= NOT INDEXED", - /* 149 */ "using_opt ::= USING LP inscollist RP", - /* 150 */ "using_opt ::=", - /* 151 */ "orderby_opt ::=", - /* 152 */ "orderby_opt ::= ORDER BY sortlist", - /* 153 */ "sortlist ::= sortlist COMMA expr sortorder", - /* 154 */ "sortlist ::= expr sortorder", - /* 155 */ "sortorder ::= ASC", - /* 156 */ "sortorder ::= DESC", - /* 157 */ "sortorder ::=", - /* 158 */ "groupby_opt ::=", - /* 159 */ "groupby_opt ::= GROUP BY nexprlist", - /* 160 */ "having_opt ::=", - /* 161 */ "having_opt ::= HAVING expr", - /* 162 */ "limit_opt ::=", - /* 163 */ "limit_opt ::= LIMIT expr", - /* 164 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 165 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 166 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt", - /* 167 */ "where_opt ::=", - /* 168 */ "where_opt ::= WHERE expr", - /* 169 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt", - /* 170 */ "setlist ::= setlist COMMA nm EQ expr", - /* 171 */ "setlist ::= nm EQ expr", - /* 172 */ "cmd ::= insert_cmd INTO fullname inscollist_opt valuelist", - /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select", - /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES", - /* 175 */ "insert_cmd ::= INSERT orconf", - /* 176 */ "insert_cmd ::= REPLACE", - /* 177 */ "valuelist ::= VALUES LP nexprlist RP", - /* 178 */ "valuelist ::= valuelist COMMA LP exprlist RP", + /* 119 */ "oneselect ::= values", + /* 120 */ "values ::= VALUES LP nexprlist RP", + /* 121 */ "values ::= values COMMA LP exprlist RP", + /* 122 */ "distinct ::= DISTINCT", + /* 123 */ "distinct ::= ALL", + /* 124 */ "distinct ::=", + /* 125 */ "sclp ::= selcollist COMMA", + /* 126 */ "sclp ::=", + /* 127 */ "selcollist ::= sclp expr as", + /* 128 */ "selcollist ::= sclp STAR", + /* 129 */ "selcollist ::= sclp nm DOT STAR", + /* 130 */ "as ::= AS nm", + /* 131 */ "as ::= ID|STRING", + /* 132 */ "as ::=", + /* 133 */ "from ::=", + /* 134 */ "from ::= FROM seltablist", + /* 135 */ "stl_prefix ::= seltablist joinop", + /* 136 */ "stl_prefix ::=", + /* 137 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", + /* 138 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", + /* 139 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", + /* 140 */ "dbnm ::=", + /* 141 */ "dbnm ::= DOT nm", + /* 142 */ "fullname ::= nm dbnm", + /* 143 */ "joinop ::= COMMA|JOIN", + /* 144 */ "joinop ::= JOIN_KW JOIN", + /* 145 */ "joinop ::= JOIN_KW nm JOIN", + /* 146 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 147 */ "on_opt ::= ON expr", + /* 148 */ "on_opt ::=", + /* 149 */ "indexed_opt ::=", + /* 150 */ "indexed_opt ::= INDEXED BY nm", + /* 151 */ "indexed_opt ::= NOT INDEXED", + /* 152 */ "using_opt ::= USING LP idlist RP", + /* 153 */ "using_opt ::=", + /* 154 */ "orderby_opt ::=", + /* 155 */ "orderby_opt ::= ORDER BY sortlist", + /* 156 */ "sortlist ::= sortlist COMMA expr sortorder", + /* 157 */ "sortlist ::= expr sortorder", + /* 158 */ "sortorder ::= ASC", + /* 159 */ "sortorder ::= DESC", + /* 160 */ "sortorder ::=", + /* 161 */ "groupby_opt ::=", + /* 162 */ "groupby_opt ::= GROUP BY nexprlist", + /* 163 */ "having_opt ::=", + /* 164 */ "having_opt ::= HAVING expr", + /* 165 */ "limit_opt ::=", + /* 166 */ "limit_opt ::= LIMIT expr", + /* 167 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 168 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 169 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt", + /* 170 */ "where_opt ::=", + /* 171 */ "where_opt ::= WHERE expr", + /* 172 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt", + /* 173 */ "setlist ::= setlist COMMA nm EQ expr", + /* 174 */ "setlist ::= nm EQ expr", + /* 175 */ "cmd ::= with insert_cmd INTO fullname inscollist_opt select", + /* 176 */ "cmd ::= with insert_cmd INTO fullname inscollist_opt DEFAULT VALUES", + /* 177 */ "insert_cmd ::= INSERT orconf", + /* 178 */ "insert_cmd ::= REPLACE", /* 179 */ "inscollist_opt ::=", - /* 180 */ "inscollist_opt ::= LP inscollist RP", - /* 181 */ "inscollist ::= inscollist COMMA nm", - /* 182 */ "inscollist ::= nm", + /* 180 */ "inscollist_opt ::= LP idlist RP", + /* 181 */ "idlist ::= idlist COMMA nm", + /* 182 */ "idlist ::= nm", /* 183 */ "expr ::= term", /* 184 */ "expr ::= LP expr RP", /* 185 */ "term ::= NULL", - /* 186 */ "expr ::= id", + /* 186 */ "expr ::= ID|INDEXED", /* 187 */ "expr ::= JOIN_KW", /* 188 */ "expr ::= nm DOT nm", /* 189 */ "expr ::= nm DOT nm DOT nm", /* 190 */ "term ::= INTEGER|FLOAT|BLOB", /* 191 */ "term ::= STRING", - /* 192 */ "expr ::= REGISTER", - /* 193 */ "expr ::= VARIABLE", - /* 194 */ "expr ::= expr COLLATE ids", - /* 195 */ "expr ::= CAST LP expr AS typetoken RP", - /* 196 */ "expr ::= ID LP distinct exprlist RP", - /* 197 */ "expr ::= ID LP STAR RP", - /* 198 */ "term ::= CTIME_KW", - /* 199 */ "expr ::= expr AND expr", - /* 200 */ "expr ::= expr OR expr", - /* 201 */ "expr ::= expr LT|GT|GE|LE expr", - /* 202 */ "expr ::= expr EQ|NE expr", - /* 203 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 204 */ "expr ::= expr PLUS|MINUS expr", - /* 205 */ "expr ::= expr STAR|SLASH|REM expr", - /* 206 */ "expr ::= expr CONCAT expr", - /* 207 */ "likeop ::= LIKE_KW", - /* 208 */ "likeop ::= NOT LIKE_KW", - /* 209 */ "likeop ::= MATCH", - /* 210 */ "likeop ::= NOT MATCH", - /* 211 */ "expr ::= expr likeop expr", - /* 212 */ "expr ::= expr likeop expr ESCAPE expr", - /* 213 */ "expr ::= expr ISNULL|NOTNULL", - /* 214 */ "expr ::= expr NOT NULL", - /* 215 */ "expr ::= expr IS expr", - /* 216 */ "expr ::= expr IS NOT expr", - /* 217 */ "expr ::= NOT expr", - /* 218 */ "expr ::= BITNOT expr", - /* 219 */ "expr ::= MINUS expr", - /* 220 */ "expr ::= PLUS expr", - /* 221 */ "between_op ::= BETWEEN", - /* 222 */ "between_op ::= NOT BETWEEN", - /* 223 */ "expr ::= expr between_op expr AND expr", - /* 224 */ "in_op ::= IN", - /* 225 */ "in_op ::= NOT IN", - /* 226 */ "expr ::= expr in_op LP exprlist RP", - /* 227 */ "expr ::= LP select RP", - /* 228 */ "expr ::= expr in_op LP select RP", - /* 229 */ "expr ::= expr in_op nm dbnm", - /* 230 */ "expr ::= EXISTS LP select RP", - /* 231 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 232 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 233 */ "case_exprlist ::= WHEN expr THEN expr", - /* 234 */ "case_else ::= ELSE expr", - /* 235 */ "case_else ::=", - /* 236 */ "case_operand ::= expr", - /* 237 */ "case_operand ::=", - /* 238 */ "exprlist ::= nexprlist", - /* 239 */ "exprlist ::=", - /* 240 */ "nexprlist ::= nexprlist COMMA expr", - /* 241 */ "nexprlist ::= expr", - /* 242 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt", - /* 243 */ "uniqueflag ::= UNIQUE", - /* 244 */ "uniqueflag ::=", - /* 245 */ "idxlist_opt ::=", - /* 246 */ "idxlist_opt ::= LP idxlist RP", - /* 247 */ "idxlist ::= idxlist COMMA nm collate sortorder", - /* 248 */ "idxlist ::= nm collate sortorder", - /* 249 */ "collate ::=", - /* 250 */ "collate ::= COLLATE ids", - /* 251 */ "cmd ::= DROP INDEX ifexists fullname", - /* 252 */ "cmd ::= VACUUM", - /* 253 */ "cmd ::= VACUUM nm", - /* 254 */ "cmd ::= PRAGMA nm dbnm", - /* 255 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 256 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 257 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 258 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 259 */ "nmnum ::= plus_num", - /* 260 */ "nmnum ::= nm", - /* 261 */ "nmnum ::= ON", - /* 262 */ "nmnum ::= DELETE", - /* 263 */ "nmnum ::= DEFAULT", - /* 264 */ "plus_num ::= PLUS number", - /* 265 */ "plus_num ::= number", - /* 266 */ "minus_num ::= MINUS number", - /* 267 */ "number ::= INTEGER|FLOAT", - /* 268 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 269 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 270 */ "trigger_time ::= BEFORE", - /* 271 */ "trigger_time ::= AFTER", - /* 272 */ "trigger_time ::= INSTEAD OF", - /* 273 */ "trigger_time ::=", - /* 274 */ "trigger_event ::= DELETE|INSERT", - /* 275 */ "trigger_event ::= UPDATE", - /* 276 */ "trigger_event ::= UPDATE OF inscollist", - /* 277 */ "foreach_clause ::=", - /* 278 */ "foreach_clause ::= FOR EACH ROW", - /* 279 */ "when_clause ::=", - /* 280 */ "when_clause ::= WHEN expr", - /* 281 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 282 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 283 */ "trnm ::= nm", - /* 284 */ "trnm ::= nm DOT nm", - /* 285 */ "tridxby ::=", - /* 286 */ "tridxby ::= INDEXED BY nm", - /* 287 */ "tridxby ::= NOT INDEXED", - /* 288 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", - /* 289 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt valuelist", - /* 290 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select", - /* 291 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", - /* 292 */ "trigger_cmd ::= select", - /* 293 */ "expr ::= RAISE LP IGNORE RP", - /* 294 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 295 */ "raisetype ::= ROLLBACK", - /* 296 */ "raisetype ::= ABORT", - /* 297 */ "raisetype ::= FAIL", - /* 298 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 299 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 300 */ "cmd ::= DETACH database_kw_opt expr", - /* 301 */ "key_opt ::=", - /* 302 */ "key_opt ::= KEY expr", - /* 303 */ "database_kw_opt ::= DATABASE", - /* 304 */ "database_kw_opt ::=", - /* 305 */ "cmd ::= REINDEX", - /* 306 */ "cmd ::= REINDEX nm dbnm", - /* 307 */ "cmd ::= ANALYZE", - /* 308 */ "cmd ::= ANALYZE nm dbnm", - /* 309 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 310 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column", - /* 311 */ "add_column_fullname ::= fullname", - /* 312 */ "kwcolumn_opt ::=", - /* 313 */ "kwcolumn_opt ::= COLUMNKW", - /* 314 */ "cmd ::= create_vtab", - /* 315 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 316 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 317 */ "vtabarglist ::= vtabarg", - /* 318 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 319 */ "vtabarg ::=", - /* 320 */ "vtabarg ::= vtabarg vtabargtoken", - /* 321 */ "vtabargtoken ::= ANY", - /* 322 */ "vtabargtoken ::= lp anylist RP", - /* 323 */ "lp ::= LP", - /* 324 */ "anylist ::=", - /* 325 */ "anylist ::= anylist LP anylist RP", - /* 326 */ "anylist ::= anylist ANY", + /* 192 */ "expr ::= VARIABLE", + /* 193 */ "expr ::= expr COLLATE ID|STRING", + /* 194 */ "expr ::= CAST LP expr AS typetoken RP", + /* 195 */ "expr ::= ID|INDEXED LP distinct exprlist RP", + /* 196 */ "expr ::= ID|INDEXED LP STAR RP", + /* 197 */ "term ::= CTIME_KW", + /* 198 */ "expr ::= expr AND expr", + /* 199 */ "expr ::= expr OR expr", + /* 200 */ "expr ::= expr LT|GT|GE|LE expr", + /* 201 */ "expr ::= expr EQ|NE expr", + /* 202 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 203 */ "expr ::= expr PLUS|MINUS expr", + /* 204 */ "expr ::= expr STAR|SLASH|REM expr", + /* 205 */ "expr ::= expr CONCAT expr", + /* 206 */ "likeop ::= LIKE_KW|MATCH", + /* 207 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 208 */ "expr ::= expr likeop expr", + /* 209 */ "expr ::= expr likeop expr ESCAPE expr", + /* 210 */ "expr ::= expr ISNULL|NOTNULL", + /* 211 */ "expr ::= expr NOT NULL", + /* 212 */ "expr ::= expr IS expr", + /* 213 */ "expr ::= expr IS NOT expr", + /* 214 */ "expr ::= NOT expr", + /* 215 */ "expr ::= BITNOT expr", + /* 216 */ "expr ::= MINUS expr", + /* 217 */ "expr ::= PLUS expr", + /* 218 */ "between_op ::= BETWEEN", + /* 219 */ "between_op ::= NOT BETWEEN", + /* 220 */ "expr ::= expr between_op expr AND expr", + /* 221 */ "in_op ::= IN", + /* 222 */ "in_op ::= NOT IN", + /* 223 */ "expr ::= expr in_op LP exprlist RP", + /* 224 */ "expr ::= LP select RP", + /* 225 */ "expr ::= expr in_op LP select RP", + /* 226 */ "expr ::= expr in_op nm dbnm", + /* 227 */ "expr ::= EXISTS LP select RP", + /* 228 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 229 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 230 */ "case_exprlist ::= WHEN expr THEN expr", + /* 231 */ "case_else ::= ELSE expr", + /* 232 */ "case_else ::=", + /* 233 */ "case_operand ::= expr", + /* 234 */ "case_operand ::=", + /* 235 */ "exprlist ::= nexprlist", + /* 236 */ "exprlist ::=", + /* 237 */ "nexprlist ::= nexprlist COMMA expr", + /* 238 */ "nexprlist ::= expr", + /* 239 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt", + /* 240 */ "uniqueflag ::= UNIQUE", + /* 241 */ "uniqueflag ::=", + /* 242 */ "idxlist_opt ::=", + /* 243 */ "idxlist_opt ::= LP idxlist RP", + /* 244 */ "idxlist ::= idxlist COMMA nm collate sortorder", + /* 245 */ "idxlist ::= nm collate sortorder", + /* 246 */ "collate ::=", + /* 247 */ "collate ::= COLLATE ID|STRING", + /* 248 */ "cmd ::= DROP INDEX ifexists fullname", + /* 249 */ "cmd ::= VACUUM", + /* 250 */ "cmd ::= VACUUM nm", + /* 251 */ "cmd ::= PRAGMA nm dbnm", + /* 252 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 253 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 254 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 255 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 256 */ "nmnum ::= plus_num", + /* 257 */ "nmnum ::= nm", + /* 258 */ "nmnum ::= ON", + /* 259 */ "nmnum ::= DELETE", + /* 260 */ "nmnum ::= DEFAULT", + /* 261 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 262 */ "plus_num ::= INTEGER|FLOAT", + /* 263 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 264 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 265 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 266 */ "trigger_time ::= BEFORE", + /* 267 */ "trigger_time ::= AFTER", + /* 268 */ "trigger_time ::= INSTEAD OF", + /* 269 */ "trigger_time ::=", + /* 270 */ "trigger_event ::= DELETE|INSERT", + /* 271 */ "trigger_event ::= UPDATE", + /* 272 */ "trigger_event ::= UPDATE OF idlist", + /* 273 */ "foreach_clause ::=", + /* 274 */ "foreach_clause ::= FOR EACH ROW", + /* 275 */ "when_clause ::=", + /* 276 */ "when_clause ::= WHEN expr", + /* 277 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 278 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 279 */ "trnm ::= nm", + /* 280 */ "trnm ::= nm DOT nm", + /* 281 */ "tridxby ::=", + /* 282 */ "tridxby ::= INDEXED BY nm", + /* 283 */ "tridxby ::= NOT INDEXED", + /* 284 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", + /* 285 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select", + /* 286 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", + /* 287 */ "trigger_cmd ::= select", + /* 288 */ "expr ::= RAISE LP IGNORE RP", + /* 289 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 290 */ "raisetype ::= ROLLBACK", + /* 291 */ "raisetype ::= ABORT", + /* 292 */ "raisetype ::= FAIL", + /* 293 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 294 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 295 */ "cmd ::= DETACH database_kw_opt expr", + /* 296 */ "key_opt ::=", + /* 297 */ "key_opt ::= KEY expr", + /* 298 */ "database_kw_opt ::= DATABASE", + /* 299 */ "database_kw_opt ::=", + /* 300 */ "cmd ::= REINDEX", + /* 301 */ "cmd ::= REINDEX nm dbnm", + /* 302 */ "cmd ::= ANALYZE", + /* 303 */ "cmd ::= ANALYZE nm dbnm", + /* 304 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 305 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column", + /* 306 */ "add_column_fullname ::= fullname", + /* 307 */ "kwcolumn_opt ::=", + /* 308 */ "kwcolumn_opt ::= COLUMNKW", + /* 309 */ "cmd ::= create_vtab", + /* 310 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 311 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 312 */ "vtabarglist ::= vtabarg", + /* 313 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 314 */ "vtabarg ::=", + /* 315 */ "vtabarg ::= vtabarg vtabargtoken", + /* 316 */ "vtabargtoken ::= ANY", + /* 317 */ "vtabargtoken ::= lp anylist RP", + /* 318 */ "lp ::= LP", + /* 319 */ "anylist ::=", + /* 320 */ "anylist ::= anylist LP anylist RP", + /* 321 */ "anylist ::= anylist ANY", + /* 322 */ "with ::=", + /* 323 */ "with ::= WITH wqlist", + /* 324 */ "with ::= WITH RECURSIVE wqlist", + /* 325 */ "wqlist ::= nm idxlist_opt AS LP select RP", + /* 326 */ "wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP", }; #endif /* NDEBUG */ @@ -114197,76 +116126,76 @@ static void yy_destructor( ** which appear on the RHS of the rule, but which are not used ** inside the C code. */ - case 160: /* select */ - case 194: /* oneselect */ + case 163: /* select */ + case 195: /* selectnowith */ + case 196: /* oneselect */ + case 207: /* values */ { -sqlite3SelectDelete(pParse->db, (yypminor->yy159)); +sqlite3SelectDelete(pParse->db, (yypminor->yy3)); } break; - case 173: /* term */ - case 174: /* expr */ + case 174: /* term */ + case 175: /* expr */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy342).pExpr); +sqlite3ExprDelete(pParse->db, (yypminor->yy346).pExpr); } break; - case 178: /* idxlist_opt */ - case 187: /* idxlist */ - case 197: /* selcollist */ - case 200: /* groupby_opt */ - case 202: /* orderby_opt */ - case 204: /* sclp */ - case 214: /* sortlist */ - case 215: /* nexprlist */ - case 216: /* setlist */ - case 220: /* exprlist */ - case 225: /* case_exprlist */ + case 179: /* idxlist_opt */ + case 188: /* idxlist */ + case 200: /* selcollist */ + case 203: /* groupby_opt */ + case 205: /* orderby_opt */ + case 208: /* nexprlist */ + case 209: /* exprlist */ + case 210: /* sclp */ + case 220: /* sortlist */ + case 221: /* setlist */ + case 228: /* case_exprlist */ { -sqlite3ExprListDelete(pParse->db, (yypminor->yy442)); +sqlite3ExprListDelete(pParse->db, (yypminor->yy14)); } break; - case 193: /* fullname */ - case 198: /* from */ - case 206: /* seltablist */ - case 207: /* stl_prefix */ + case 194: /* fullname */ + case 201: /* from */ + case 212: /* seltablist */ + case 213: /* stl_prefix */ { -sqlite3SrcListDelete(pParse->db, (yypminor->yy347)); +sqlite3SrcListDelete(pParse->db, (yypminor->yy65)); } break; - case 199: /* where_opt */ - case 201: /* having_opt */ - case 210: /* on_opt */ - case 224: /* case_operand */ - case 226: /* case_else */ - case 236: /* when_clause */ - case 241: /* key_opt */ + case 197: /* with */ + case 252: /* wqlist */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy122)); +sqlite3WithDelete(pParse->db, (yypminor->yy59)); } break; - case 211: /* using_opt */ - case 213: /* inscollist */ - case 218: /* inscollist_opt */ + case 202: /* where_opt */ + case 204: /* having_opt */ + case 216: /* on_opt */ + case 227: /* case_operand */ + case 229: /* case_else */ + case 238: /* when_clause */ + case 243: /* key_opt */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy180)); +sqlite3ExprDelete(pParse->db, (yypminor->yy132)); } break; - case 219: /* valuelist */ + case 217: /* using_opt */ + case 219: /* idlist */ + case 223: /* inscollist_opt */ { - - sqlite3ExprListDelete(pParse->db, (yypminor->yy487).pList); - sqlite3SelectDelete(pParse->db, (yypminor->yy487).pSelect); - +sqlite3IdListDelete(pParse->db, (yypminor->yy408)); } break; - case 232: /* trigger_cmd_list */ - case 237: /* trigger_cmd */ + case 234: /* trigger_cmd_list */ + case 239: /* trigger_cmd */ { -sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy327)); +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy473)); } break; - case 234: /* trigger_event */ + case 236: /* trigger_event */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy410).b); +sqlite3IdListDelete(pParse->db, (yypminor->yy378).b); } break; default: break; /* If no destructor action specified: do nothing */ @@ -114511,333 +116440,333 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { - { 142, 1 }, - { 143, 2 }, - { 143, 1 }, { 144, 1 }, - { 144, 3 }, - { 145, 0 }, + { 145, 2 }, { 145, 1 }, - { 145, 3 }, { 146, 1 }, - { 147, 3 }, - { 149, 0 }, - { 149, 1 }, - { 149, 2 }, - { 148, 0 }, - { 148, 1 }, - { 148, 1 }, - { 148, 1 }, - { 147, 2 }, - { 147, 2 }, - { 147, 2 }, - { 151, 1 }, - { 151, 0 }, - { 147, 2 }, - { 147, 3 }, - { 147, 5 }, - { 147, 2 }, - { 152, 6 }, - { 154, 1 }, - { 156, 0 }, - { 156, 3 }, - { 155, 1 }, - { 155, 0 }, - { 153, 4 }, - { 153, 2 }, - { 158, 3 }, - { 158, 1 }, - { 161, 3 }, - { 162, 1 }, - { 165, 1 }, - { 165, 1 }, - { 166, 1 }, - { 150, 1 }, - { 150, 1 }, - { 150, 1 }, - { 163, 0 }, - { 163, 1 }, - { 167, 1 }, - { 167, 4 }, - { 167, 6 }, - { 168, 1 }, - { 168, 2 }, - { 169, 1 }, - { 169, 1 }, - { 164, 2 }, - { 164, 0 }, - { 172, 2 }, - { 172, 2 }, - { 172, 4 }, - { 172, 3 }, - { 172, 3 }, - { 172, 2 }, - { 172, 2 }, - { 172, 3 }, - { 172, 5 }, - { 172, 2 }, - { 172, 4 }, - { 172, 4 }, - { 172, 1 }, - { 172, 2 }, - { 177, 0 }, - { 177, 1 }, - { 179, 0 }, - { 179, 2 }, - { 181, 2 }, - { 181, 3 }, - { 181, 3 }, - { 181, 3 }, - { 182, 2 }, - { 182, 2 }, - { 182, 1 }, - { 182, 1 }, - { 182, 2 }, - { 180, 3 }, - { 180, 2 }, - { 183, 0 }, - { 183, 2 }, - { 183, 2 }, - { 159, 0 }, - { 159, 2 }, - { 184, 3 }, - { 184, 1 }, - { 185, 1 }, - { 185, 0 }, - { 186, 2 }, - { 186, 7 }, - { 186, 5 }, - { 186, 5 }, - { 186, 10 }, - { 188, 0 }, - { 188, 1 }, - { 175, 0 }, - { 175, 3 }, - { 189, 0 }, - { 189, 2 }, - { 190, 1 }, - { 190, 1 }, - { 190, 1 }, - { 147, 4 }, - { 192, 2 }, - { 192, 0 }, - { 147, 8 }, - { 147, 4 }, + { 146, 3 }, + { 147, 0 }, { 147, 1 }, - { 160, 1 }, - { 160, 3 }, - { 195, 1 }, - { 195, 2 }, - { 195, 1 }, - { 194, 9 }, - { 196, 1 }, - { 196, 1 }, - { 196, 0 }, - { 204, 2 }, - { 204, 0 }, - { 197, 3 }, - { 197, 2 }, - { 197, 4 }, - { 205, 2 }, - { 205, 1 }, - { 205, 0 }, - { 198, 0 }, - { 198, 2 }, - { 207, 2 }, - { 207, 0 }, - { 206, 7 }, - { 206, 7 }, - { 206, 7 }, + { 147, 3 }, + { 148, 1 }, + { 149, 3 }, + { 151, 0 }, + { 151, 1 }, + { 151, 2 }, + { 150, 0 }, + { 150, 1 }, + { 150, 1 }, + { 150, 1 }, + { 149, 2 }, + { 149, 2 }, + { 149, 2 }, + { 153, 1 }, + { 153, 0 }, + { 149, 2 }, + { 149, 3 }, + { 149, 5 }, + { 149, 2 }, + { 154, 6 }, + { 156, 1 }, + { 158, 0 }, + { 158, 3 }, + { 157, 1 }, { 157, 0 }, - { 157, 2 }, + { 155, 5 }, + { 155, 2 }, + { 162, 0 }, + { 162, 2 }, + { 160, 3 }, + { 160, 1 }, + { 164, 3 }, + { 165, 1 }, + { 152, 1 }, + { 152, 1 }, + { 152, 1 }, + { 166, 0 }, + { 166, 1 }, + { 168, 1 }, + { 168, 4 }, + { 168, 6 }, + { 169, 1 }, + { 169, 2 }, + { 170, 1 }, + { 170, 1 }, + { 167, 2 }, + { 167, 0 }, + { 173, 2 }, + { 173, 2 }, + { 173, 4 }, + { 173, 3 }, + { 173, 3 }, + { 173, 2 }, + { 173, 2 }, + { 173, 3 }, + { 173, 5 }, + { 173, 2 }, + { 173, 4 }, + { 173, 4 }, + { 173, 1 }, + { 173, 2 }, + { 178, 0 }, + { 178, 1 }, + { 180, 0 }, + { 180, 2 }, + { 182, 2 }, + { 182, 3 }, + { 182, 3 }, + { 182, 3 }, + { 183, 2 }, + { 183, 2 }, + { 183, 1 }, + { 183, 1 }, + { 183, 2 }, + { 181, 3 }, + { 181, 2 }, + { 184, 0 }, + { 184, 2 }, + { 184, 2 }, + { 161, 0 }, + { 161, 2 }, + { 185, 3 }, + { 185, 1 }, + { 186, 1 }, + { 186, 0 }, + { 187, 2 }, + { 187, 7 }, + { 187, 5 }, + { 187, 5 }, + { 187, 10 }, + { 189, 0 }, + { 189, 1 }, + { 176, 0 }, + { 176, 3 }, + { 190, 0 }, + { 190, 2 }, + { 191, 1 }, + { 191, 1 }, + { 191, 1 }, + { 149, 4 }, { 193, 2 }, - { 208, 1 }, - { 208, 2 }, - { 208, 3 }, - { 208, 4 }, + { 193, 0 }, + { 149, 8 }, + { 149, 4 }, + { 149, 1 }, + { 163, 2 }, + { 195, 1 }, + { 195, 3 }, + { 198, 1 }, + { 198, 2 }, + { 198, 1 }, + { 196, 9 }, + { 196, 1 }, + { 207, 4 }, + { 207, 5 }, + { 199, 1 }, + { 199, 1 }, + { 199, 0 }, { 210, 2 }, { 210, 0 }, - { 209, 0 }, - { 209, 3 }, - { 209, 2 }, - { 211, 4 }, - { 211, 0 }, - { 202, 0 }, - { 202, 3 }, - { 214, 4 }, - { 214, 2 }, - { 176, 1 }, - { 176, 1 }, - { 176, 0 }, - { 200, 0 }, { 200, 3 }, + { 200, 2 }, + { 200, 4 }, + { 211, 2 }, + { 211, 1 }, + { 211, 0 }, { 201, 0 }, { 201, 2 }, - { 203, 0 }, - { 203, 2 }, - { 203, 4 }, - { 203, 4 }, - { 147, 5 }, - { 199, 0 }, - { 199, 2 }, - { 147, 7 }, - { 216, 5 }, - { 216, 3 }, - { 147, 5 }, - { 147, 5 }, - { 147, 6 }, - { 217, 2 }, - { 217, 1 }, - { 219, 4 }, - { 219, 5 }, - { 218, 0 }, - { 218, 3 }, - { 213, 3 }, - { 213, 1 }, - { 174, 1 }, - { 174, 3 }, - { 173, 1 }, - { 174, 1 }, - { 174, 1 }, - { 174, 3 }, - { 174, 5 }, - { 173, 1 }, - { 173, 1 }, - { 174, 1 }, - { 174, 1 }, - { 174, 3 }, - { 174, 6 }, - { 174, 5 }, - { 174, 4 }, - { 173, 1 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 174, 3 }, - { 221, 1 }, - { 221, 2 }, - { 221, 1 }, - { 221, 2 }, - { 174, 3 }, - { 174, 5 }, - { 174, 2 }, - { 174, 3 }, - { 174, 3 }, - { 174, 4 }, - { 174, 2 }, - { 174, 2 }, - { 174, 2 }, - { 174, 2 }, - { 222, 1 }, - { 222, 2 }, - { 174, 5 }, - { 223, 1 }, - { 223, 2 }, - { 174, 5 }, - { 174, 3 }, - { 174, 5 }, - { 174, 4 }, - { 174, 4 }, - { 174, 5 }, - { 225, 5 }, - { 225, 4 }, - { 226, 2 }, - { 226, 0 }, - { 224, 1 }, - { 224, 0 }, - { 220, 1 }, - { 220, 0 }, + { 213, 2 }, + { 213, 0 }, + { 212, 7 }, + { 212, 7 }, + { 212, 7 }, + { 159, 0 }, + { 159, 2 }, + { 194, 2 }, + { 214, 1 }, + { 214, 2 }, + { 214, 3 }, + { 214, 4 }, + { 216, 2 }, + { 216, 0 }, + { 215, 0 }, { 215, 3 }, - { 215, 1 }, - { 147, 12 }, + { 215, 2 }, + { 217, 4 }, + { 217, 0 }, + { 205, 0 }, + { 205, 3 }, + { 220, 4 }, + { 220, 2 }, + { 177, 1 }, + { 177, 1 }, + { 177, 0 }, + { 203, 0 }, + { 203, 3 }, + { 204, 0 }, + { 204, 2 }, + { 206, 0 }, + { 206, 2 }, + { 206, 4 }, + { 206, 4 }, + { 149, 6 }, + { 202, 0 }, + { 202, 2 }, + { 149, 8 }, + { 221, 5 }, + { 221, 3 }, + { 149, 6 }, + { 149, 7 }, + { 222, 2 }, + { 222, 1 }, + { 223, 0 }, + { 223, 3 }, + { 219, 3 }, + { 219, 1 }, + { 175, 1 }, + { 175, 3 }, + { 174, 1 }, + { 175, 1 }, + { 175, 1 }, + { 175, 3 }, + { 175, 5 }, + { 174, 1 }, + { 174, 1 }, + { 175, 1 }, + { 175, 3 }, + { 175, 6 }, + { 175, 5 }, + { 175, 4 }, + { 174, 1 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 175, 3 }, + { 224, 1 }, + { 224, 2 }, + { 175, 3 }, + { 175, 5 }, + { 175, 2 }, + { 175, 3 }, + { 175, 3 }, + { 175, 4 }, + { 175, 2 }, + { 175, 2 }, + { 175, 2 }, + { 175, 2 }, + { 225, 1 }, + { 225, 2 }, + { 175, 5 }, + { 226, 1 }, + { 226, 2 }, + { 175, 5 }, + { 175, 3 }, + { 175, 5 }, + { 175, 4 }, + { 175, 4 }, + { 175, 5 }, + { 228, 5 }, + { 228, 4 }, + { 229, 2 }, + { 229, 0 }, { 227, 1 }, { 227, 0 }, - { 178, 0 }, - { 178, 3 }, - { 187, 5 }, - { 187, 3 }, - { 228, 0 }, - { 228, 2 }, - { 147, 4 }, - { 147, 1 }, - { 147, 2 }, - { 147, 3 }, - { 147, 5 }, - { 147, 6 }, - { 147, 5 }, - { 147, 6 }, - { 229, 1 }, - { 229, 1 }, - { 229, 1 }, - { 229, 1 }, - { 229, 1 }, - { 170, 2 }, - { 170, 1 }, - { 171, 2 }, + { 209, 1 }, + { 209, 0 }, + { 208, 3 }, + { 208, 1 }, + { 149, 12 }, { 230, 1 }, - { 147, 5 }, - { 231, 11 }, - { 233, 1 }, - { 233, 1 }, - { 233, 2 }, - { 233, 0 }, - { 234, 1 }, - { 234, 1 }, - { 234, 3 }, + { 230, 0 }, + { 179, 0 }, + { 179, 3 }, + { 188, 5 }, + { 188, 3 }, + { 231, 0 }, + { 231, 2 }, + { 149, 4 }, + { 149, 1 }, + { 149, 2 }, + { 149, 3 }, + { 149, 5 }, + { 149, 6 }, + { 149, 5 }, + { 149, 6 }, + { 232, 1 }, + { 232, 1 }, + { 232, 1 }, + { 232, 1 }, + { 232, 1 }, + { 171, 2 }, + { 171, 1 }, + { 172, 2 }, + { 149, 5 }, + { 233, 11 }, + { 235, 1 }, + { 235, 1 }, + { 235, 2 }, { 235, 0 }, - { 235, 3 }, - { 236, 0 }, - { 236, 2 }, - { 232, 3 }, - { 232, 2 }, - { 238, 1 }, - { 238, 3 }, - { 239, 0 }, - { 239, 3 }, - { 239, 2 }, - { 237, 7 }, - { 237, 5 }, - { 237, 5 }, - { 237, 5 }, - { 237, 1 }, - { 174, 4 }, - { 174, 6 }, - { 191, 1 }, - { 191, 1 }, - { 191, 1 }, - { 147, 4 }, - { 147, 6 }, - { 147, 3 }, - { 241, 0 }, - { 241, 2 }, + { 236, 1 }, + { 236, 1 }, + { 236, 3 }, + { 237, 0 }, + { 237, 3 }, + { 238, 0 }, + { 238, 2 }, + { 234, 3 }, + { 234, 2 }, { 240, 1 }, - { 240, 0 }, - { 147, 1 }, - { 147, 3 }, - { 147, 1 }, - { 147, 3 }, - { 147, 6 }, - { 147, 6 }, - { 242, 1 }, + { 240, 3 }, + { 241, 0 }, + { 241, 3 }, + { 241, 2 }, + { 239, 7 }, + { 239, 5 }, + { 239, 5 }, + { 239, 1 }, + { 175, 4 }, + { 175, 6 }, + { 192, 1 }, + { 192, 1 }, + { 192, 1 }, + { 149, 4 }, + { 149, 6 }, + { 149, 3 }, { 243, 0 }, - { 243, 1 }, - { 147, 1 }, - { 147, 4 }, - { 244, 8 }, + { 243, 2 }, + { 242, 1 }, + { 242, 0 }, + { 149, 1 }, + { 149, 3 }, + { 149, 1 }, + { 149, 3 }, + { 149, 6 }, + { 149, 6 }, + { 244, 1 }, + { 245, 0 }, { 245, 1 }, - { 245, 3 }, - { 246, 0 }, - { 246, 2 }, + { 149, 1 }, + { 149, 4 }, + { 246, 8 }, { 247, 1 }, { 247, 3 }, - { 248, 1 }, - { 249, 0 }, - { 249, 4 }, - { 249, 2 }, + { 248, 0 }, + { 248, 2 }, + { 249, 1 }, + { 249, 3 }, + { 250, 1 }, + { 251, 0 }, + { 251, 4 }, + { 251, 2 }, + { 197, 0 }, + { 197, 2 }, + { 197, 3 }, + { 252, 6 }, + { 252, 8 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -114905,17 +116834,17 @@ static void yy_reduce( { sqlite3FinishCoding(pParse); } break; case 9: /* cmd ::= BEGIN transtype trans_opt */ -{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy392);} +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy328);} break; case 13: /* transtype ::= */ -{yygotominor.yy392 = TK_DEFERRED;} +{yygotominor.yy328 = TK_DEFERRED;} break; case 14: /* transtype ::= DEFERRED */ case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15); case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16); case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115); case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117); -{yygotominor.yy392 = yymsp[0].major;} +{yygotominor.yy328 = yymsp[0].major;} break; case 17: /* cmd ::= COMMIT trans_opt */ case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18); @@ -114941,7 +116870,7 @@ static void yy_reduce( break; case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { - sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy392,0,0,yymsp[-2].minor.yy392); + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy328,0,0,yymsp[-2].minor.yy328); } break; case 27: /* createkw ::= CREATE */ @@ -114952,533 +116881,548 @@ static void yy_reduce( break; case 28: /* ifnotexists ::= */ case 31: /* temp ::= */ yytestcase(yyruleno==31); - case 69: /* autoinc ::= */ yytestcase(yyruleno==69); - case 82: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==82); - case 84: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==84); - case 86: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==86); - case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98); - case 109: /* ifexists ::= */ yytestcase(yyruleno==109); - case 221: /* between_op ::= BETWEEN */ yytestcase(yyruleno==221); - case 224: /* in_op ::= IN */ yytestcase(yyruleno==224); -{yygotominor.yy392 = 0;} + case 68: /* autoinc ::= */ yytestcase(yyruleno==68); + case 81: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==81); + case 83: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==83); + case 85: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==85); + case 97: /* defer_subclause_opt ::= */ yytestcase(yyruleno==97); + case 108: /* ifexists ::= */ yytestcase(yyruleno==108); + case 218: /* between_op ::= BETWEEN */ yytestcase(yyruleno==218); + case 221: /* in_op ::= IN */ yytestcase(yyruleno==221); +{yygotominor.yy328 = 0;} break; case 29: /* ifnotexists ::= IF NOT EXISTS */ case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30); - case 70: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==70); - case 85: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==85); - case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108); - case 222: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==222); - case 225: /* in_op ::= NOT IN */ yytestcase(yyruleno==225); -{yygotominor.yy392 = 1;} + case 69: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==69); + case 84: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==84); + case 107: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==107); + case 219: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==219); + case 222: /* in_op ::= NOT IN */ yytestcase(yyruleno==222); +{yygotominor.yy328 = 1;} break; - case 32: /* create_table_args ::= LP columnlist conslist_opt RP */ + case 32: /* create_table_args ::= LP columnlist conslist_opt RP table_options */ { - sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0); + sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy186,0); } break; case 33: /* create_table_args ::= AS select */ { - sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy159); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy159); + sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy3); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy3); } break; - case 36: /* column ::= columnid type carglist */ + case 34: /* table_options ::= */ +{yygotominor.yy186 = 0;} + break; + case 35: /* table_options ::= WITHOUT nm */ +{ + if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ + yygotominor.yy186 = TF_WithoutRowid; + }else{ + yygotominor.yy186 = 0; + sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); + } +} + break; + case 38: /* column ::= columnid type carglist */ { yygotominor.yy0.z = yymsp[-2].minor.yy0.z; yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n; } break; - case 37: /* columnid ::= nm */ + case 39: /* columnid ::= nm */ { sqlite3AddColumn(pParse,&yymsp[0].minor.yy0); yygotominor.yy0 = yymsp[0].minor.yy0; pParse->constraintName.n = 0; } break; - case 38: /* id ::= ID */ - case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39); - case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40); - case 41: /* nm ::= id */ yytestcase(yyruleno==41); - case 42: /* nm ::= STRING */ yytestcase(yyruleno==42); - case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43); - case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46); - case 49: /* typename ::= ids */ yytestcase(yyruleno==49); - case 127: /* as ::= AS nm */ yytestcase(yyruleno==127); - case 128: /* as ::= ids */ yytestcase(yyruleno==128); - case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138); - case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147); - case 250: /* collate ::= COLLATE ids */ yytestcase(yyruleno==250); - case 259: /* nmnum ::= plus_num */ yytestcase(yyruleno==259); - case 260: /* nmnum ::= nm */ yytestcase(yyruleno==260); - case 261: /* nmnum ::= ON */ yytestcase(yyruleno==261); - case 262: /* nmnum ::= DELETE */ yytestcase(yyruleno==262); - case 263: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==263); - case 264: /* plus_num ::= PLUS number */ yytestcase(yyruleno==264); - case 265: /* plus_num ::= number */ yytestcase(yyruleno==265); - case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266); - case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267); - case 283: /* trnm ::= nm */ yytestcase(yyruleno==283); + case 40: /* nm ::= ID|INDEXED */ + case 41: /* nm ::= STRING */ yytestcase(yyruleno==41); + case 42: /* nm ::= JOIN_KW */ yytestcase(yyruleno==42); + case 45: /* typetoken ::= typename */ yytestcase(yyruleno==45); + case 48: /* typename ::= ID|STRING */ yytestcase(yyruleno==48); + case 130: /* as ::= AS nm */ yytestcase(yyruleno==130); + case 131: /* as ::= ID|STRING */ yytestcase(yyruleno==131); + case 141: /* dbnm ::= DOT nm */ yytestcase(yyruleno==141); + case 150: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==150); + case 247: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==247); + case 256: /* nmnum ::= plus_num */ yytestcase(yyruleno==256); + case 257: /* nmnum ::= nm */ yytestcase(yyruleno==257); + case 258: /* nmnum ::= ON */ yytestcase(yyruleno==258); + case 259: /* nmnum ::= DELETE */ yytestcase(yyruleno==259); + case 260: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==260); + case 261: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==261); + case 262: /* plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==262); + case 263: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==263); + case 279: /* trnm ::= nm */ yytestcase(yyruleno==279); {yygotominor.yy0 = yymsp[0].minor.yy0;} break; - case 45: /* type ::= typetoken */ + case 44: /* type ::= typetoken */ {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);} break; - case 47: /* typetoken ::= typename LP signed RP */ + case 46: /* typetoken ::= typename LP signed RP */ { yygotominor.yy0.z = yymsp[-3].minor.yy0.z; yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); } break; - case 48: /* typetoken ::= typename LP signed COMMA signed RP */ + case 47: /* typetoken ::= typename LP signed COMMA signed RP */ { yygotominor.yy0.z = yymsp[-5].minor.yy0.z; yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); } break; - case 50: /* typename ::= typename ids */ + case 49: /* typename ::= typename ID|STRING */ {yygotominor.yy0.z=yymsp[-1].minor.yy0.z; yygotominor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} break; - case 55: /* ccons ::= CONSTRAINT nm */ - case 93: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93); + case 54: /* ccons ::= CONSTRAINT nm */ + case 92: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==92); {pParse->constraintName = yymsp[0].minor.yy0;} break; - case 56: /* ccons ::= DEFAULT term */ - case 58: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==58); -{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy342);} + case 55: /* ccons ::= DEFAULT term */ + case 57: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==57); +{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy346);} break; - case 57: /* ccons ::= DEFAULT LP expr RP */ -{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy342);} + case 56: /* ccons ::= DEFAULT LP expr RP */ +{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy346);} break; - case 59: /* ccons ::= DEFAULT MINUS term */ + case 58: /* ccons ::= DEFAULT MINUS term */ { ExprSpan v; - v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy342.pExpr, 0, 0); + v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy346.pExpr, 0, 0); v.zStart = yymsp[-1].minor.yy0.z; - v.zEnd = yymsp[0].minor.yy342.zEnd; + v.zEnd = yymsp[0].minor.yy346.zEnd; sqlite3AddDefaultValue(pParse,&v); } break; - case 60: /* ccons ::= DEFAULT id */ + case 59: /* ccons ::= DEFAULT ID|INDEXED */ { ExprSpan v; spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0); sqlite3AddDefaultValue(pParse,&v); } break; - case 62: /* ccons ::= NOT NULL onconf */ -{sqlite3AddNotNull(pParse, yymsp[0].minor.yy392);} + case 61: /* ccons ::= NOT NULL onconf */ +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy328);} break; - case 63: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ -{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy392,yymsp[0].minor.yy392,yymsp[-2].minor.yy392);} + case 62: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy328,yymsp[0].minor.yy328,yymsp[-2].minor.yy328);} break; - case 64: /* ccons ::= UNIQUE onconf */ -{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy392,0,0,0,0);} + case 63: /* ccons ::= UNIQUE onconf */ +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy328,0,0,0,0);} break; - case 65: /* ccons ::= CHECK LP expr RP */ -{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy342.pExpr);} + case 64: /* ccons ::= CHECK LP expr RP */ +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy346.pExpr);} break; - case 66: /* ccons ::= REFERENCES nm idxlist_opt refargs */ -{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy442,yymsp[0].minor.yy392);} + case 65: /* ccons ::= REFERENCES nm idxlist_opt refargs */ +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy14,yymsp[0].minor.yy328);} break; - case 67: /* ccons ::= defer_subclause */ -{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy392);} + case 66: /* ccons ::= defer_subclause */ +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy328);} break; - case 68: /* ccons ::= COLLATE ids */ + case 67: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; - case 71: /* refargs ::= */ -{ yygotominor.yy392 = OE_None*0x0101; /* EV: R-19803-45884 */} + case 70: /* refargs ::= */ +{ yygotominor.yy328 = OE_None*0x0101; /* EV: R-19803-45884 */} break; - case 72: /* refargs ::= refargs refarg */ -{ yygotominor.yy392 = (yymsp[-1].minor.yy392 & ~yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; } + case 71: /* refargs ::= refargs refarg */ +{ yygotominor.yy328 = (yymsp[-1].minor.yy328 & ~yymsp[0].minor.yy429.mask) | yymsp[0].minor.yy429.value; } break; - case 73: /* refarg ::= MATCH nm */ - case 74: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==74); -{ yygotominor.yy207.value = 0; yygotominor.yy207.mask = 0x000000; } + case 72: /* refarg ::= MATCH nm */ + case 73: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==73); +{ yygotominor.yy429.value = 0; yygotominor.yy429.mask = 0x000000; } break; - case 75: /* refarg ::= ON DELETE refact */ -{ yygotominor.yy207.value = yymsp[0].minor.yy392; yygotominor.yy207.mask = 0x0000ff; } + case 74: /* refarg ::= ON DELETE refact */ +{ yygotominor.yy429.value = yymsp[0].minor.yy328; yygotominor.yy429.mask = 0x0000ff; } break; - case 76: /* refarg ::= ON UPDATE refact */ -{ yygotominor.yy207.value = yymsp[0].minor.yy392<<8; yygotominor.yy207.mask = 0x00ff00; } + case 75: /* refarg ::= ON UPDATE refact */ +{ yygotominor.yy429.value = yymsp[0].minor.yy328<<8; yygotominor.yy429.mask = 0x00ff00; } break; - case 77: /* refact ::= SET NULL */ -{ yygotominor.yy392 = OE_SetNull; /* EV: R-33326-45252 */} + case 76: /* refact ::= SET NULL */ +{ yygotominor.yy328 = OE_SetNull; /* EV: R-33326-45252 */} break; - case 78: /* refact ::= SET DEFAULT */ -{ yygotominor.yy392 = OE_SetDflt; /* EV: R-33326-45252 */} + case 77: /* refact ::= SET DEFAULT */ +{ yygotominor.yy328 = OE_SetDflt; /* EV: R-33326-45252 */} break; - case 79: /* refact ::= CASCADE */ -{ yygotominor.yy392 = OE_Cascade; /* EV: R-33326-45252 */} + case 78: /* refact ::= CASCADE */ +{ yygotominor.yy328 = OE_Cascade; /* EV: R-33326-45252 */} break; - case 80: /* refact ::= RESTRICT */ -{ yygotominor.yy392 = OE_Restrict; /* EV: R-33326-45252 */} + case 79: /* refact ::= RESTRICT */ +{ yygotominor.yy328 = OE_Restrict; /* EV: R-33326-45252 */} break; - case 81: /* refact ::= NO ACTION */ -{ yygotominor.yy392 = OE_None; /* EV: R-33326-45252 */} + case 80: /* refact ::= NO ACTION */ +{ yygotominor.yy328 = OE_None; /* EV: R-33326-45252 */} break; - case 83: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ - case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99); - case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101); - case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104); -{yygotominor.yy392 = yymsp[0].minor.yy392;} + case 82: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + case 98: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==98); + case 100: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==100); + case 103: /* resolvetype ::= raisetype */ yytestcase(yyruleno==103); +{yygotominor.yy328 = yymsp[0].minor.yy328;} break; - case 87: /* conslist_opt ::= */ + case 86: /* conslist_opt ::= */ {yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;} break; - case 88: /* conslist_opt ::= COMMA conslist */ + case 87: /* conslist_opt ::= COMMA conslist */ {yygotominor.yy0 = yymsp[-1].minor.yy0;} break; - case 91: /* tconscomma ::= COMMA */ + case 90: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; - case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */ -{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy442,yymsp[0].minor.yy392,yymsp[-2].minor.yy392,0);} + case 93: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */ +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy14,yymsp[0].minor.yy328,yymsp[-2].minor.yy328,0);} break; - case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */ -{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy442,yymsp[0].minor.yy392,0,0,0,0);} + case 94: /* tcons ::= UNIQUE LP idxlist RP onconf */ +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy14,yymsp[0].minor.yy328,0,0,0,0);} break; - case 96: /* tcons ::= CHECK LP expr RP onconf */ -{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy342.pExpr);} + case 95: /* tcons ::= CHECK LP expr RP onconf */ +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy346.pExpr);} break; - case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */ + case 96: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */ { - sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy442, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy442, yymsp[-1].minor.yy392); - sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy392); + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy14, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy14, yymsp[-1].minor.yy328); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy328); } break; - case 100: /* onconf ::= */ -{yygotominor.yy392 = OE_Default;} + case 99: /* onconf ::= */ +{yygotominor.yy328 = OE_Default;} break; - case 102: /* orconf ::= */ -{yygotominor.yy258 = OE_Default;} + case 101: /* orconf ::= */ +{yygotominor.yy186 = OE_Default;} break; - case 103: /* orconf ::= OR resolvetype */ -{yygotominor.yy258 = (u8)yymsp[0].minor.yy392;} + case 102: /* orconf ::= OR resolvetype */ +{yygotominor.yy186 = (u8)yymsp[0].minor.yy328;} break; - case 105: /* resolvetype ::= IGNORE */ -{yygotominor.yy392 = OE_Ignore;} + case 104: /* resolvetype ::= IGNORE */ +{yygotominor.yy328 = OE_Ignore;} break; - case 106: /* resolvetype ::= REPLACE */ -{yygotominor.yy392 = OE_Replace;} + case 105: /* resolvetype ::= REPLACE */ +{yygotominor.yy328 = OE_Replace;} break; - case 107: /* cmd ::= DROP TABLE ifexists fullname */ + case 106: /* cmd ::= DROP TABLE ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy347, 0, yymsp[-1].minor.yy392); + sqlite3DropTable(pParse, yymsp[0].minor.yy65, 0, yymsp[-1].minor.yy328); } break; - case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */ + case 109: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */ { - sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy159, yymsp[-6].minor.yy392, yymsp[-4].minor.yy392); + sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy3, yymsp[-6].minor.yy328, yymsp[-4].minor.yy328); } break; - case 111: /* cmd ::= DROP VIEW ifexists fullname */ + case 110: /* cmd ::= DROP VIEW ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy347, 1, yymsp[-1].minor.yy392); + sqlite3DropTable(pParse, yymsp[0].minor.yy65, 1, yymsp[-1].minor.yy328); } break; - case 112: /* cmd ::= select */ + case 111: /* cmd ::= select */ { - SelectDest dest = {SRT_Output, 0, 0, 0, 0}; - sqlite3Select(pParse, yymsp[0].minor.yy159, &dest); + SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0}; + sqlite3Select(pParse, yymsp[0].minor.yy3, &dest); sqlite3ExplainBegin(pParse->pVdbe); - sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy159); + sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy3); sqlite3ExplainFinish(pParse->pVdbe); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy159); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy3); } break; - case 113: /* select ::= oneselect */ -{yygotominor.yy159 = yymsp[0].minor.yy159;} - break; - case 114: /* select ::= select multiselect_op oneselect */ -{ - if( yymsp[0].minor.yy159 ){ - yymsp[0].minor.yy159->op = (u8)yymsp[-1].minor.yy392; - yymsp[0].minor.yy159->pPrior = yymsp[-2].minor.yy159; - if( yymsp[-1].minor.yy392!=TK_ALL ) pParse->hasCompound = 1; + case 112: /* select ::= with selectnowith */ +{ + if( yymsp[0].minor.yy3 ){ + yymsp[0].minor.yy3->pWith = yymsp[-1].minor.yy59; }else{ - sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy159); + sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy59); } - yygotominor.yy159 = yymsp[0].minor.yy159; + yygotominor.yy3 = yymsp[0].minor.yy3; +} + break; + case 113: /* selectnowith ::= oneselect */ + case 119: /* oneselect ::= values */ yytestcase(yyruleno==119); +{yygotominor.yy3 = yymsp[0].minor.yy3;} + break; + case 114: /* selectnowith ::= selectnowith multiselect_op oneselect */ +{ + if( yymsp[0].minor.yy3 ){ + yymsp[0].minor.yy3->op = (u8)yymsp[-1].minor.yy328; + yymsp[0].minor.yy3->pPrior = yymsp[-2].minor.yy3; + if( yymsp[-1].minor.yy328!=TK_ALL ) pParse->hasCompound = 1; + }else{ + sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy3); + } + yygotominor.yy3 = yymsp[0].minor.yy3; } break; case 116: /* multiselect_op ::= UNION ALL */ -{yygotominor.yy392 = TK_ALL;} +{yygotominor.yy328 = TK_ALL;} break; case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { - yygotominor.yy159 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy442,yymsp[-5].minor.yy347,yymsp[-4].minor.yy122,yymsp[-3].minor.yy442,yymsp[-2].minor.yy122,yymsp[-1].minor.yy442,yymsp[-7].minor.yy305,yymsp[0].minor.yy64.pLimit,yymsp[0].minor.yy64.pOffset); + yygotominor.yy3 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy14,yymsp[-5].minor.yy65,yymsp[-4].minor.yy132,yymsp[-3].minor.yy14,yymsp[-2].minor.yy132,yymsp[-1].minor.yy14,yymsp[-7].minor.yy381,yymsp[0].minor.yy476.pLimit,yymsp[0].minor.yy476.pOffset); } break; - case 119: /* distinct ::= DISTINCT */ -{yygotominor.yy305 = SF_Distinct;} - break; - case 120: /* distinct ::= ALL */ - case 121: /* distinct ::= */ yytestcase(yyruleno==121); -{yygotominor.yy305 = 0;} - break; - case 122: /* sclp ::= selcollist COMMA */ - case 246: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==246); -{yygotominor.yy442 = yymsp[-1].minor.yy442;} - break; - case 123: /* sclp ::= */ - case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151); - case 158: /* groupby_opt ::= */ yytestcase(yyruleno==158); - case 239: /* exprlist ::= */ yytestcase(yyruleno==239); - case 245: /* idxlist_opt ::= */ yytestcase(yyruleno==245); -{yygotominor.yy442 = 0;} - break; - case 124: /* selcollist ::= sclp expr as */ + case 120: /* values ::= VALUES LP nexprlist RP */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy442, yymsp[-1].minor.yy342.pExpr); - if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[0].minor.yy0, 1); - sqlite3ExprListSetSpan(pParse,yygotominor.yy442,&yymsp[-1].minor.yy342); + yygotominor.yy3 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy14,0,0,0,0,0,SF_Values,0,0); } break; - case 125: /* selcollist ::= sclp STAR */ + case 121: /* values ::= values COMMA LP exprlist RP */ +{ + Select *pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy14,0,0,0,0,0,SF_Values,0,0); + if( pRight ){ + pRight->op = TK_ALL; + pRight->pPrior = yymsp[-4].minor.yy3; + yygotominor.yy3 = pRight; + }else{ + yygotominor.yy3 = yymsp[-4].minor.yy3; + } +} + break; + case 122: /* distinct ::= DISTINCT */ +{yygotominor.yy381 = SF_Distinct;} + break; + case 123: /* distinct ::= ALL */ + case 124: /* distinct ::= */ yytestcase(yyruleno==124); +{yygotominor.yy381 = 0;} + break; + case 125: /* sclp ::= selcollist COMMA */ + case 243: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==243); +{yygotominor.yy14 = yymsp[-1].minor.yy14;} + break; + case 126: /* sclp ::= */ + case 154: /* orderby_opt ::= */ yytestcase(yyruleno==154); + case 161: /* groupby_opt ::= */ yytestcase(yyruleno==161); + case 236: /* exprlist ::= */ yytestcase(yyruleno==236); + case 242: /* idxlist_opt ::= */ yytestcase(yyruleno==242); +{yygotominor.yy14 = 0;} + break; + case 127: /* selcollist ::= sclp expr as */ +{ + yygotominor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy14, yymsp[-1].minor.yy346.pExpr); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy14, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yygotominor.yy14,&yymsp[-1].minor.yy346); +} + break; + case 128: /* selcollist ::= sclp STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0); - yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy442, p); + yygotominor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy14, p); } break; - case 126: /* selcollist ::= sclp nm DOT STAR */ + case 129: /* selcollist ::= sclp nm DOT STAR */ { Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0); Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy442, pDot); + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy14, pDot); } break; - case 129: /* as ::= */ + case 132: /* as ::= */ {yygotominor.yy0.n = 0;} break; - case 130: /* from ::= */ -{yygotominor.yy347 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy347));} + case 133: /* from ::= */ +{yygotominor.yy65 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy65));} break; - case 131: /* from ::= FROM seltablist */ + case 134: /* from ::= FROM seltablist */ { - yygotominor.yy347 = yymsp[0].minor.yy347; - sqlite3SrcListShiftJoinType(yygotominor.yy347); + yygotominor.yy65 = yymsp[0].minor.yy65; + sqlite3SrcListShiftJoinType(yygotominor.yy65); } break; - case 132: /* stl_prefix ::= seltablist joinop */ + case 135: /* stl_prefix ::= seltablist joinop */ { - yygotominor.yy347 = yymsp[-1].minor.yy347; - if( ALWAYS(yygotominor.yy347 && yygotominor.yy347->nSrc>0) ) yygotominor.yy347->a[yygotominor.yy347->nSrc-1].jointype = (u8)yymsp[0].minor.yy392; + yygotominor.yy65 = yymsp[-1].minor.yy65; + if( ALWAYS(yygotominor.yy65 && yygotominor.yy65->nSrc>0) ) yygotominor.yy65->a[yygotominor.yy65->nSrc-1].jointype = (u8)yymsp[0].minor.yy328; } break; - case 133: /* stl_prefix ::= */ -{yygotominor.yy347 = 0;} + case 136: /* stl_prefix ::= */ +{yygotominor.yy65 = 0;} break; - case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + case 137: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ { - yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); - sqlite3SrcListIndexedBy(pParse, yygotominor.yy347, &yymsp[-2].minor.yy0); + yygotominor.yy65 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy65,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy132,yymsp[0].minor.yy408); + sqlite3SrcListIndexedBy(pParse, yygotominor.yy65, &yymsp[-2].minor.yy0); } break; - case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + case 138: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ { - yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy159,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); + yygotominor.yy65 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy65,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy3,yymsp[-1].minor.yy132,yymsp[0].minor.yy408); } break; - case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + case 139: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ { - if( yymsp[-6].minor.yy347==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy122==0 && yymsp[0].minor.yy180==0 ){ - yygotominor.yy347 = yymsp[-4].minor.yy347; - }else if( yymsp[-4].minor.yy347->nSrc==1 ){ - yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); - if( yygotominor.yy347 ){ - struct SrcList_item *pNew = &yygotominor.yy347->a[yygotominor.yy347->nSrc-1]; - struct SrcList_item *pOld = yymsp[-4].minor.yy347->a; + if( yymsp[-6].minor.yy65==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy132==0 && yymsp[0].minor.yy408==0 ){ + yygotominor.yy65 = yymsp[-4].minor.yy65; + }else if( yymsp[-4].minor.yy65->nSrc==1 ){ + yygotominor.yy65 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy65,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy132,yymsp[0].minor.yy408); + if( yygotominor.yy65 ){ + struct SrcList_item *pNew = &yygotominor.yy65->a[yygotominor.yy65->nSrc-1]; + struct SrcList_item *pOld = yymsp[-4].minor.yy65->a; pNew->zName = pOld->zName; pNew->zDatabase = pOld->zDatabase; pNew->pSelect = pOld->pSelect; pOld->zName = pOld->zDatabase = 0; pOld->pSelect = 0; } - sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy347); + sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy65); }else{ Select *pSubquery; - sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy347); - pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy347,0,0,0,0,SF_NestedFrom,0,0); - yygotominor.yy347 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy347,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy122,yymsp[0].minor.yy180); + sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy65); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy65,0,0,0,0,SF_NestedFrom,0,0); + yygotominor.yy65 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy65,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy132,yymsp[0].minor.yy408); } } break; - case 137: /* dbnm ::= */ - case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146); + case 140: /* dbnm ::= */ + case 149: /* indexed_opt ::= */ yytestcase(yyruleno==149); {yygotominor.yy0.z=0; yygotominor.yy0.n=0;} break; - case 139: /* fullname ::= nm dbnm */ -{yygotominor.yy347 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} + case 142: /* fullname ::= nm dbnm */ +{yygotominor.yy65 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} break; - case 140: /* joinop ::= COMMA|JOIN */ -{ yygotominor.yy392 = JT_INNER; } + case 143: /* joinop ::= COMMA|JOIN */ +{ yygotominor.yy328 = JT_INNER; } break; - case 141: /* joinop ::= JOIN_KW JOIN */ -{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); } + case 144: /* joinop ::= JOIN_KW JOIN */ +{ yygotominor.yy328 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); } break; - case 142: /* joinop ::= JOIN_KW nm JOIN */ -{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); } + case 145: /* joinop ::= JOIN_KW nm JOIN */ +{ yygotominor.yy328 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); } break; - case 143: /* joinop ::= JOIN_KW nm nm JOIN */ -{ yygotominor.yy392 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); } + case 146: /* joinop ::= JOIN_KW nm nm JOIN */ +{ yygotominor.yy328 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); } break; - case 144: /* on_opt ::= ON expr */ - case 161: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==161); - case 168: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==168); - case 234: /* case_else ::= ELSE expr */ yytestcase(yyruleno==234); - case 236: /* case_operand ::= expr */ yytestcase(yyruleno==236); -{yygotominor.yy122 = yymsp[0].minor.yy342.pExpr;} + case 147: /* on_opt ::= ON expr */ + case 164: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==164); + case 171: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==171); + case 231: /* case_else ::= ELSE expr */ yytestcase(yyruleno==231); + case 233: /* case_operand ::= expr */ yytestcase(yyruleno==233); +{yygotominor.yy132 = yymsp[0].minor.yy346.pExpr;} break; - case 145: /* on_opt ::= */ - case 160: /* having_opt ::= */ yytestcase(yyruleno==160); - case 167: /* where_opt ::= */ yytestcase(yyruleno==167); - case 235: /* case_else ::= */ yytestcase(yyruleno==235); - case 237: /* case_operand ::= */ yytestcase(yyruleno==237); -{yygotominor.yy122 = 0;} + case 148: /* on_opt ::= */ + case 163: /* having_opt ::= */ yytestcase(yyruleno==163); + case 170: /* where_opt ::= */ yytestcase(yyruleno==170); + case 232: /* case_else ::= */ yytestcase(yyruleno==232); + case 234: /* case_operand ::= */ yytestcase(yyruleno==234); +{yygotominor.yy132 = 0;} break; - case 148: /* indexed_opt ::= NOT INDEXED */ + case 151: /* indexed_opt ::= NOT INDEXED */ {yygotominor.yy0.z=0; yygotominor.yy0.n=1;} break; - case 149: /* using_opt ::= USING LP inscollist RP */ - case 180: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==180); -{yygotominor.yy180 = yymsp[-1].minor.yy180;} + case 152: /* using_opt ::= USING LP idlist RP */ + case 180: /* inscollist_opt ::= LP idlist RP */ yytestcase(yyruleno==180); +{yygotominor.yy408 = yymsp[-1].minor.yy408;} break; - case 150: /* using_opt ::= */ + case 153: /* using_opt ::= */ case 179: /* inscollist_opt ::= */ yytestcase(yyruleno==179); -{yygotominor.yy180 = 0;} +{yygotominor.yy408 = 0;} break; - case 152: /* orderby_opt ::= ORDER BY sortlist */ - case 159: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==159); - case 238: /* exprlist ::= nexprlist */ yytestcase(yyruleno==238); -{yygotominor.yy442 = yymsp[0].minor.yy442;} + case 155: /* orderby_opt ::= ORDER BY sortlist */ + case 162: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==162); + case 235: /* exprlist ::= nexprlist */ yytestcase(yyruleno==235); +{yygotominor.yy14 = yymsp[0].minor.yy14;} break; - case 153: /* sortlist ::= sortlist COMMA expr sortorder */ + case 156: /* sortlist ::= sortlist COMMA expr sortorder */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy442,yymsp[-1].minor.yy342.pExpr); - if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy14,yymsp[-1].minor.yy346.pExpr); + if( yygotominor.yy14 ) yygotominor.yy14->a[yygotominor.yy14->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy328; } break; - case 154: /* sortlist ::= expr sortorder */ + case 157: /* sortlist ::= expr sortorder */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy342.pExpr); - if( yygotominor.yy442 && ALWAYS(yygotominor.yy442->a) ) yygotominor.yy442->a[0].sortOrder = (u8)yymsp[0].minor.yy392; + yygotominor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy346.pExpr); + if( yygotominor.yy14 && ALWAYS(yygotominor.yy14->a) ) yygotominor.yy14->a[0].sortOrder = (u8)yymsp[0].minor.yy328; } break; - case 155: /* sortorder ::= ASC */ - case 157: /* sortorder ::= */ yytestcase(yyruleno==157); -{yygotominor.yy392 = SQLITE_SO_ASC;} + case 158: /* sortorder ::= ASC */ + case 160: /* sortorder ::= */ yytestcase(yyruleno==160); +{yygotominor.yy328 = SQLITE_SO_ASC;} break; - case 156: /* sortorder ::= DESC */ -{yygotominor.yy392 = SQLITE_SO_DESC;} + case 159: /* sortorder ::= DESC */ +{yygotominor.yy328 = SQLITE_SO_DESC;} break; - case 162: /* limit_opt ::= */ -{yygotominor.yy64.pLimit = 0; yygotominor.yy64.pOffset = 0;} + case 165: /* limit_opt ::= */ +{yygotominor.yy476.pLimit = 0; yygotominor.yy476.pOffset = 0;} break; - case 163: /* limit_opt ::= LIMIT expr */ -{yygotominor.yy64.pLimit = yymsp[0].minor.yy342.pExpr; yygotominor.yy64.pOffset = 0;} + case 166: /* limit_opt ::= LIMIT expr */ +{yygotominor.yy476.pLimit = yymsp[0].minor.yy346.pExpr; yygotominor.yy476.pOffset = 0;} break; - case 164: /* limit_opt ::= LIMIT expr OFFSET expr */ -{yygotominor.yy64.pLimit = yymsp[-2].minor.yy342.pExpr; yygotominor.yy64.pOffset = yymsp[0].minor.yy342.pExpr;} + case 167: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yygotominor.yy476.pLimit = yymsp[-2].minor.yy346.pExpr; yygotominor.yy476.pOffset = yymsp[0].minor.yy346.pExpr;} break; - case 165: /* limit_opt ::= LIMIT expr COMMA expr */ -{yygotominor.yy64.pOffset = yymsp[-2].minor.yy342.pExpr; yygotominor.yy64.pLimit = yymsp[0].minor.yy342.pExpr;} + case 168: /* limit_opt ::= LIMIT expr COMMA expr */ +{yygotominor.yy476.pOffset = yymsp[-2].minor.yy346.pExpr; yygotominor.yy476.pLimit = yymsp[0].minor.yy346.pExpr;} break; - case 166: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */ + case 169: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy347, &yymsp[-1].minor.yy0); - sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy347,yymsp[0].minor.yy122); + sqlite3WithPush(pParse, yymsp[-5].minor.yy59, 1); + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy65, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy65,yymsp[0].minor.yy132); } break; - case 169: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */ + case 172: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy347, &yymsp[-3].minor.yy0); - sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy442,"set list"); - sqlite3Update(pParse,yymsp[-4].minor.yy347,yymsp[-1].minor.yy442,yymsp[0].minor.yy122,yymsp[-5].minor.yy258); + sqlite3WithPush(pParse, yymsp[-7].minor.yy59, 1); + sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy65, &yymsp[-3].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy14,"set list"); + sqlite3Update(pParse,yymsp[-4].minor.yy65,yymsp[-1].minor.yy14,yymsp[0].minor.yy132,yymsp[-5].minor.yy186); } break; - case 170: /* setlist ::= setlist COMMA nm EQ expr */ + case 173: /* setlist ::= setlist COMMA nm EQ expr */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy442, yymsp[0].minor.yy342.pExpr); - sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); + yygotominor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy14, yymsp[0].minor.yy346.pExpr); + sqlite3ExprListSetName(pParse, yygotominor.yy14, &yymsp[-2].minor.yy0, 1); } break; - case 171: /* setlist ::= nm EQ expr */ + case 174: /* setlist ::= nm EQ expr */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy342.pExpr); - sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); + yygotominor.yy14 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy346.pExpr); + sqlite3ExprListSetName(pParse, yygotominor.yy14, &yymsp[-2].minor.yy0, 1); } break; - case 172: /* cmd ::= insert_cmd INTO fullname inscollist_opt valuelist */ -{sqlite3Insert(pParse, yymsp[-2].minor.yy347, yymsp[0].minor.yy487.pList, yymsp[0].minor.yy487.pSelect, yymsp[-1].minor.yy180, yymsp[-4].minor.yy258);} - break; - case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */ -{sqlite3Insert(pParse, yymsp[-2].minor.yy347, 0, yymsp[0].minor.yy159, yymsp[-1].minor.yy180, yymsp[-4].minor.yy258);} - break; - case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */ -{sqlite3Insert(pParse, yymsp[-3].minor.yy347, 0, 0, yymsp[-2].minor.yy180, yymsp[-5].minor.yy258);} - break; - case 175: /* insert_cmd ::= INSERT orconf */ -{yygotominor.yy258 = yymsp[0].minor.yy258;} - break; - case 176: /* insert_cmd ::= REPLACE */ -{yygotominor.yy258 = OE_Replace;} - break; - case 177: /* valuelist ::= VALUES LP nexprlist RP */ + case 175: /* cmd ::= with insert_cmd INTO fullname inscollist_opt select */ { - yygotominor.yy487.pList = yymsp[-1].minor.yy442; - yygotominor.yy487.pSelect = 0; + sqlite3WithPush(pParse, yymsp[-5].minor.yy59, 1); + sqlite3Insert(pParse, yymsp[-2].minor.yy65, yymsp[0].minor.yy3, yymsp[-1].minor.yy408, yymsp[-4].minor.yy186); } break; - case 178: /* valuelist ::= valuelist COMMA LP exprlist RP */ + case 176: /* cmd ::= with insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */ { - Select *pRight = sqlite3SelectNew(pParse, yymsp[-1].minor.yy442, 0, 0, 0, 0, 0, 0, 0, 0); - if( yymsp[-4].minor.yy487.pList ){ - yymsp[-4].minor.yy487.pSelect = sqlite3SelectNew(pParse, yymsp[-4].minor.yy487.pList, 0, 0, 0, 0, 0, 0, 0, 0); - yymsp[-4].minor.yy487.pList = 0; - } - yygotominor.yy487.pList = 0; - if( yymsp[-4].minor.yy487.pSelect==0 || pRight==0 ){ - sqlite3SelectDelete(pParse->db, pRight); - sqlite3SelectDelete(pParse->db, yymsp[-4].minor.yy487.pSelect); - yygotominor.yy487.pSelect = 0; - }else{ - pRight->op = TK_ALL; - pRight->pPrior = yymsp[-4].minor.yy487.pSelect; - pRight->selFlags |= SF_Values; - pRight->pPrior->selFlags |= SF_Values; - yygotominor.yy487.pSelect = pRight; - } + sqlite3WithPush(pParse, yymsp[-6].minor.yy59, 1); + sqlite3Insert(pParse, yymsp[-3].minor.yy65, 0, yymsp[-2].minor.yy408, yymsp[-5].minor.yy186); } break; - case 181: /* inscollist ::= inscollist COMMA nm */ -{yygotominor.yy180 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy180,&yymsp[0].minor.yy0);} + case 177: /* insert_cmd ::= INSERT orconf */ +{yygotominor.yy186 = yymsp[0].minor.yy186;} break; - case 182: /* inscollist ::= nm */ -{yygotominor.yy180 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);} + case 178: /* insert_cmd ::= REPLACE */ +{yygotominor.yy186 = OE_Replace;} + break; + case 181: /* idlist ::= idlist COMMA nm */ +{yygotominor.yy408 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy408,&yymsp[0].minor.yy0);} + break; + case 182: /* idlist ::= nm */ +{yygotominor.yy408 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);} break; case 183: /* expr ::= term */ -{yygotominor.yy342 = yymsp[0].minor.yy342;} +{yygotominor.yy346 = yymsp[0].minor.yy346;} break; case 184: /* expr ::= LP expr RP */ -{yygotominor.yy342.pExpr = yymsp[-1].minor.yy342.pExpr; spanSet(&yygotominor.yy342,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);} +{yygotominor.yy346.pExpr = yymsp[-1].minor.yy346.pExpr; spanSet(&yygotominor.yy346,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);} break; case 185: /* term ::= NULL */ case 190: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==190); case 191: /* term ::= STRING */ yytestcase(yyruleno==191); -{spanExpr(&yygotominor.yy342, pParse, yymsp[0].major, &yymsp[0].minor.yy0);} +{spanExpr(&yygotominor.yy346, pParse, yymsp[0].major, &yymsp[0].minor.yy0);} break; - case 186: /* expr ::= id */ + case 186: /* expr ::= ID|INDEXED */ case 187: /* expr ::= JOIN_KW */ yytestcase(yyruleno==187); -{spanExpr(&yygotominor.yy342, pParse, TK_ID, &yymsp[0].minor.yy0);} +{spanExpr(&yygotominor.yy346, pParse, TK_ID, &yymsp[0].minor.yy0);} break; case 188: /* expr ::= nm DOT nm */ { Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0); - spanSet(&yygotominor.yy342,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0); + spanSet(&yygotominor.yy346,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); } break; case 189: /* expr ::= nm DOT nm DOT nm */ @@ -115487,163 +117431,154 @@ static void yy_reduce( Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0); Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0); Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0); - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0); - spanSet(&yygotominor.yy342,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0); + spanSet(&yygotominor.yy346,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); } break; - case 192: /* expr ::= REGISTER */ + case 192: /* expr ::= VARIABLE */ { - /* When doing a nested parse, one can include terms in an expression - ** that look like this: #1 #2 ... These terms refer to registers - ** in the virtual machine. #N is the N-th register. */ - if( pParse->nested==0 ){ - sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0); - yygotominor.yy342.pExpr = 0; + if( yymsp[0].minor.yy0.n>=2 && yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1]) ){ + /* When doing a nested parse, one can include terms in an expression + ** that look like this: #1 #2 ... These terms refer to registers + ** in the virtual machine. #N is the N-th register. */ + if( pParse->nested==0 ){ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = 0; + }else{ + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0); + if( yygotominor.yy346.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy346.pExpr->iTable); + } }else{ - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0); - if( yygotominor.yy342.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy342.pExpr->iTable); + spanExpr(&yygotominor.yy346, pParse, TK_VARIABLE, &yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yygotominor.yy346.pExpr); } - spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); + spanSet(&yygotominor.yy346, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); } break; - case 193: /* expr ::= VARIABLE */ + case 193: /* expr ::= expr COLLATE ID|STRING */ { - spanExpr(&yygotominor.yy342, pParse, TK_VARIABLE, &yymsp[0].minor.yy0); - sqlite3ExprAssignVarNumber(pParse, yygotominor.yy342.pExpr); - spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy346.pExpr, &yymsp[0].minor.yy0); + yygotominor.yy346.zStart = yymsp[-2].minor.yy346.zStart; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 194: /* expr ::= expr COLLATE ids */ + case 194: /* expr ::= CAST LP expr AS typetoken RP */ { - yygotominor.yy342.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy342.pExpr, &yymsp[0].minor.yy0); - yygotominor.yy342.zStart = yymsp[-2].minor.yy342.zStart; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy346.pExpr, 0, &yymsp[-1].minor.yy0); + spanSet(&yygotominor.yy346,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); } break; - case 195: /* expr ::= CAST LP expr AS typetoken RP */ + case 195: /* expr ::= ID|INDEXED LP distinct exprlist RP */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy342.pExpr, 0, &yymsp[-1].minor.yy0); - spanSet(&yygotominor.yy342,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); -} - break; - case 196: /* expr ::= ID LP distinct exprlist RP */ -{ - if( yymsp[-1].minor.yy442 && yymsp[-1].minor.yy442->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ + if( yymsp[-1].minor.yy14 && yymsp[-1].minor.yy14->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); } - yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy442, &yymsp[-4].minor.yy0); - spanSet(&yygotominor.yy342,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); - if( yymsp[-2].minor.yy305 && yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->flags |= EP_Distinct; + yygotominor.yy346.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy14, &yymsp[-4].minor.yy0); + spanSet(&yygotominor.yy346,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); + if( yymsp[-2].minor.yy381 && yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->flags |= EP_Distinct; } } break; - case 197: /* expr ::= ID LP STAR RP */ + case 196: /* expr ::= ID|INDEXED LP STAR RP */ { - yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); - spanSet(&yygotominor.yy342,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); + spanSet(&yygotominor.yy346,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); } break; - case 198: /* term ::= CTIME_KW */ + case 197: /* term ::= CTIME_KW */ { - /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are - ** treated as functions that return constants */ - yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->op = TK_CONST_FUNC; - } - spanSet(&yygotominor.yy342, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); + yygotominor.yy346.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0); + spanSet(&yygotominor.yy346, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); } break; - case 199: /* expr ::= expr AND expr */ - case 200: /* expr ::= expr OR expr */ yytestcase(yyruleno==200); - case 201: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==201); - case 202: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==202); - case 203: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==203); - case 204: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==204); - case 205: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==205); - case 206: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==206); -{spanBinaryExpr(&yygotominor.yy342,pParse,yymsp[-1].major,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy342);} + case 198: /* expr ::= expr AND expr */ + case 199: /* expr ::= expr OR expr */ yytestcase(yyruleno==199); + case 200: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==200); + case 201: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==201); + case 202: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==202); + case 203: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==203); + case 204: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==204); + case 205: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==205); +{spanBinaryExpr(&yygotominor.yy346,pParse,yymsp[-1].major,&yymsp[-2].minor.yy346,&yymsp[0].minor.yy346);} break; - case 207: /* likeop ::= LIKE_KW */ - case 209: /* likeop ::= MATCH */ yytestcase(yyruleno==209); -{yygotominor.yy318.eOperator = yymsp[0].minor.yy0; yygotominor.yy318.bNot = 0;} + case 206: /* likeop ::= LIKE_KW|MATCH */ +{yygotominor.yy96.eOperator = yymsp[0].minor.yy0; yygotominor.yy96.bNot = 0;} break; - case 208: /* likeop ::= NOT LIKE_KW */ - case 210: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==210); -{yygotominor.yy318.eOperator = yymsp[0].minor.yy0; yygotominor.yy318.bNot = 1;} + case 207: /* likeop ::= NOT LIKE_KW|MATCH */ +{yygotominor.yy96.eOperator = yymsp[0].minor.yy0; yygotominor.yy96.bNot = 1;} break; - case 211: /* expr ::= expr likeop expr */ + case 208: /* expr ::= expr likeop expr */ { ExprList *pList; - pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy342.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy342.pExpr); - yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy318.eOperator); - if( yymsp[-1].minor.yy318.bNot ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); - yygotominor.yy342.zStart = yymsp[-2].minor.yy342.zStart; - yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; - if( yygotominor.yy342.pExpr ) yygotominor.yy342.pExpr->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy346.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy346.pExpr); + yygotominor.yy346.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy96.eOperator); + if( yymsp[-1].minor.yy96.bNot ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); + yygotominor.yy346.zStart = yymsp[-2].minor.yy346.zStart; + yygotominor.yy346.zEnd = yymsp[0].minor.yy346.zEnd; + if( yygotominor.yy346.pExpr ) yygotominor.yy346.pExpr->flags |= EP_InfixFunc; } break; - case 212: /* expr ::= expr likeop expr ESCAPE expr */ + case 209: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; - pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy342.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy342.pExpr); - yygotominor.yy342.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy318.eOperator); - if( yymsp[-3].minor.yy318.bNot ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); - yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; - yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; - if( yygotominor.yy342.pExpr ) yygotominor.yy342.pExpr->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy346.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy346.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy346.pExpr); + yygotominor.yy346.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy96.eOperator); + if( yymsp[-3].minor.yy96.bNot ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); + yygotominor.yy346.zStart = yymsp[-4].minor.yy346.zStart; + yygotominor.yy346.zEnd = yymsp[0].minor.yy346.zEnd; + if( yygotominor.yy346.pExpr ) yygotominor.yy346.pExpr->flags |= EP_InfixFunc; } break; - case 213: /* expr ::= expr ISNULL|NOTNULL */ -{spanUnaryPostfix(&yygotominor.yy342,pParse,yymsp[0].major,&yymsp[-1].minor.yy342,&yymsp[0].minor.yy0);} + case 210: /* expr ::= expr ISNULL|NOTNULL */ +{spanUnaryPostfix(&yygotominor.yy346,pParse,yymsp[0].major,&yymsp[-1].minor.yy346,&yymsp[0].minor.yy0);} break; - case 214: /* expr ::= expr NOT NULL */ -{spanUnaryPostfix(&yygotominor.yy342,pParse,TK_NOTNULL,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy0);} + case 211: /* expr ::= expr NOT NULL */ +{spanUnaryPostfix(&yygotominor.yy346,pParse,TK_NOTNULL,&yymsp[-2].minor.yy346,&yymsp[0].minor.yy0);} break; - case 215: /* expr ::= expr IS expr */ + case 212: /* expr ::= expr IS expr */ { - spanBinaryExpr(&yygotominor.yy342,pParse,TK_IS,&yymsp[-2].minor.yy342,&yymsp[0].minor.yy342); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy342.pExpr, yygotominor.yy342.pExpr, TK_ISNULL); + spanBinaryExpr(&yygotominor.yy346,pParse,TK_IS,&yymsp[-2].minor.yy346,&yymsp[0].minor.yy346); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy346.pExpr, yygotominor.yy346.pExpr, TK_ISNULL); } break; - case 216: /* expr ::= expr IS NOT expr */ + case 213: /* expr ::= expr IS NOT expr */ { - spanBinaryExpr(&yygotominor.yy342,pParse,TK_ISNOT,&yymsp[-3].minor.yy342,&yymsp[0].minor.yy342); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy342.pExpr, yygotominor.yy342.pExpr, TK_NOTNULL); + spanBinaryExpr(&yygotominor.yy346,pParse,TK_ISNOT,&yymsp[-3].minor.yy346,&yymsp[0].minor.yy346); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy346.pExpr, yygotominor.yy346.pExpr, TK_NOTNULL); } break; - case 217: /* expr ::= NOT expr */ - case 218: /* expr ::= BITNOT expr */ yytestcase(yyruleno==218); -{spanUnaryPrefix(&yygotominor.yy342,pParse,yymsp[-1].major,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + case 214: /* expr ::= NOT expr */ + case 215: /* expr ::= BITNOT expr */ yytestcase(yyruleno==215); +{spanUnaryPrefix(&yygotominor.yy346,pParse,yymsp[-1].major,&yymsp[0].minor.yy346,&yymsp[-1].minor.yy0);} break; - case 219: /* expr ::= MINUS expr */ -{spanUnaryPrefix(&yygotominor.yy342,pParse,TK_UMINUS,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + case 216: /* expr ::= MINUS expr */ +{spanUnaryPrefix(&yygotominor.yy346,pParse,TK_UMINUS,&yymsp[0].minor.yy346,&yymsp[-1].minor.yy0);} break; - case 220: /* expr ::= PLUS expr */ -{spanUnaryPrefix(&yygotominor.yy342,pParse,TK_UPLUS,&yymsp[0].minor.yy342,&yymsp[-1].minor.yy0);} + case 217: /* expr ::= PLUS expr */ +{spanUnaryPrefix(&yygotominor.yy346,pParse,TK_UPLUS,&yymsp[0].minor.yy346,&yymsp[-1].minor.yy0);} break; - case 223: /* expr ::= expr between_op expr AND expr */ + case 220: /* expr ::= expr between_op expr AND expr */ { - ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy342.pExpr); - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy342.pExpr, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pList = pList; + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy346.pExpr); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy346.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy346.pExpr, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } - if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); - yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; - yygotominor.yy342.zEnd = yymsp[0].minor.yy342.zEnd; + if( yymsp[-3].minor.yy328 ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); + yygotominor.yy346.zStart = yymsp[-4].minor.yy346.zStart; + yygotominor.yy346.zEnd = yymsp[0].minor.yy346.zEnd; } break; - case 226: /* expr ::= expr in_op LP exprlist RP */ + case 223: /* expr ::= expr in_op LP exprlist RP */ { - if( yymsp[-1].minor.yy442==0 ){ + if( yymsp[-1].minor.yy14==0 ){ /* Expressions of the form ** ** expr1 IN () @@ -115652,225 +117587,225 @@ static void yy_reduce( ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy392]); - sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy328]); + sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy346.pExpr); }else{ - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy342.pExpr, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pList = yymsp[-1].minor.yy442; - sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy346.pExpr, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pList = yymsp[-1].minor.yy14; + sqlite3ExprSetHeight(pParse, yygotominor.yy346.pExpr); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy442); + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14); } - if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); + if( yymsp[-3].minor.yy328 ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); } - yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-4].minor.yy346.zStart; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 227: /* expr ::= LP select RP */ + case 224: /* expr ::= LP select RP */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pSelect = yymsp[-1].minor.yy159; - ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pSelect = yymsp[-1].minor.yy3; + ExprSetProperty(yygotominor.yy346.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy346.pExpr); }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy3); } - yygotominor.yy342.zStart = yymsp[-2].minor.yy0.z; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-2].minor.yy0.z; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 228: /* expr ::= expr in_op LP select RP */ + case 225: /* expr ::= expr in_op LP select RP */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy342.pExpr, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pSelect = yymsp[-1].minor.yy159; - ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy346.pExpr, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pSelect = yymsp[-1].minor.yy3; + ExprSetProperty(yygotominor.yy346.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy346.pExpr); }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy3); } - if( yymsp[-3].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); - yygotominor.yy342.zStart = yymsp[-4].minor.yy342.zStart; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + if( yymsp[-3].minor.yy328 ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); + yygotominor.yy346.zStart = yymsp[-4].minor.yy346.zStart; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 229: /* expr ::= expr in_op nm dbnm */ + case 226: /* expr ::= expr in_op nm dbnm */ { SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy342.pExpr, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); - ExprSetProperty(yygotominor.yy342.pExpr, EP_xIsSelect); - sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy346.pExpr, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); + ExprSetProperty(yygotominor.yy346.pExpr, EP_xIsSelect); + sqlite3ExprSetHeight(pParse, yygotominor.yy346.pExpr); }else{ sqlite3SrcListDelete(pParse->db, pSrc); } - if( yymsp[-2].minor.yy392 ) yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy342.pExpr, 0, 0); - yygotominor.yy342.zStart = yymsp[-3].minor.yy342.zStart; - yygotominor.yy342.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]; + if( yymsp[-2].minor.yy328 ) yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy346.pExpr, 0, 0); + yygotominor.yy346.zStart = yymsp[-3].minor.yy346.zStart; + yygotominor.yy346.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]; } break; - case 230: /* expr ::= EXISTS LP select RP */ + case 227: /* expr ::= EXISTS LP select RP */ { - Expr *p = yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0); + Expr *p = yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0); if( p ){ - p->x.pSelect = yymsp[-1].minor.yy159; + p->x.pSelect = yymsp[-1].minor.yy3; ExprSetProperty(p, EP_xIsSelect); sqlite3ExprSetHeight(pParse, p); }else{ - sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy159); + sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy3); } - yygotominor.yy342.zStart = yymsp[-3].minor.yy0.z; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-3].minor.yy0.z; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 231: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 228: /* expr ::= CASE case_operand case_exprlist case_else END */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy122, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->x.pList = yymsp[-1].minor.yy122 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy442,yymsp[-1].minor.yy122) : yymsp[-2].minor.yy442; - sqlite3ExprSetHeight(pParse, yygotominor.yy342.pExpr); + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy132, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->x.pList = yymsp[-1].minor.yy132 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[-1].minor.yy132) : yymsp[-2].minor.yy14; + sqlite3ExprSetHeight(pParse, yygotominor.yy346.pExpr); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy442); - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy122); + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy14); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy132); } - yygotominor.yy342.zStart = yymsp[-4].minor.yy0.z; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-4].minor.yy0.z; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 232: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 229: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy442, yymsp[-2].minor.yy342.pExpr); - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yygotominor.yy442, yymsp[0].minor.yy342.pExpr); + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, yymsp[-2].minor.yy346.pExpr); + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yygotominor.yy14, yymsp[0].minor.yy346.pExpr); } break; - case 233: /* case_exprlist ::= WHEN expr THEN expr */ + case 230: /* case_exprlist ::= WHEN expr THEN expr */ { - yygotominor.yy442 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy342.pExpr); - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yygotominor.yy442, yymsp[0].minor.yy342.pExpr); + yygotominor.yy14 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy346.pExpr); + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yygotominor.yy14, yymsp[0].minor.yy346.pExpr); } break; - case 240: /* nexprlist ::= nexprlist COMMA expr */ -{yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy442,yymsp[0].minor.yy342.pExpr);} + case 237: /* nexprlist ::= nexprlist COMMA expr */ +{yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[0].minor.yy346.pExpr);} break; - case 241: /* nexprlist ::= expr */ -{yygotominor.yy442 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy342.pExpr);} + case 238: /* nexprlist ::= expr */ +{yygotominor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy346.pExpr);} break; - case 242: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */ + case 239: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, - sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy442, yymsp[-10].minor.yy392, - &yymsp[-11].minor.yy0, yymsp[0].minor.yy122, SQLITE_SO_ASC, yymsp[-8].minor.yy392); + sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy14, yymsp[-10].minor.yy328, + &yymsp[-11].minor.yy0, yymsp[0].minor.yy132, SQLITE_SO_ASC, yymsp[-8].minor.yy328); } break; - case 243: /* uniqueflag ::= UNIQUE */ - case 296: /* raisetype ::= ABORT */ yytestcase(yyruleno==296); -{yygotominor.yy392 = OE_Abort;} + case 240: /* uniqueflag ::= UNIQUE */ + case 291: /* raisetype ::= ABORT */ yytestcase(yyruleno==291); +{yygotominor.yy328 = OE_Abort;} break; - case 244: /* uniqueflag ::= */ -{yygotominor.yy392 = OE_None;} + case 241: /* uniqueflag ::= */ +{yygotominor.yy328 = OE_None;} break; - case 247: /* idxlist ::= idxlist COMMA nm collate sortorder */ + case 244: /* idxlist ::= idxlist COMMA nm collate sortorder */ { Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0); - yygotominor.yy442 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy442, p); - sqlite3ExprListSetName(pParse,yygotominor.yy442,&yymsp[-2].minor.yy0,1); - sqlite3ExprListCheckLength(pParse, yygotominor.yy442, "index"); - if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; + yygotominor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, p); + sqlite3ExprListSetName(pParse,yygotominor.yy14,&yymsp[-2].minor.yy0,1); + sqlite3ExprListCheckLength(pParse, yygotominor.yy14, "index"); + if( yygotominor.yy14 ) yygotominor.yy14->a[yygotominor.yy14->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy328; } break; - case 248: /* idxlist ::= nm collate sortorder */ + case 245: /* idxlist ::= nm collate sortorder */ { Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &yymsp[-1].minor.yy0); - yygotominor.yy442 = sqlite3ExprListAppend(pParse,0, p); - sqlite3ExprListSetName(pParse, yygotominor.yy442, &yymsp[-2].minor.yy0, 1); - sqlite3ExprListCheckLength(pParse, yygotominor.yy442, "index"); - if( yygotominor.yy442 ) yygotominor.yy442->a[yygotominor.yy442->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy392; + yygotominor.yy14 = sqlite3ExprListAppend(pParse,0, p); + sqlite3ExprListSetName(pParse, yygotominor.yy14, &yymsp[-2].minor.yy0, 1); + sqlite3ExprListCheckLength(pParse, yygotominor.yy14, "index"); + if( yygotominor.yy14 ) yygotominor.yy14->a[yygotominor.yy14->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy328; } break; - case 249: /* collate ::= */ + case 246: /* collate ::= */ {yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;} break; - case 251: /* cmd ::= DROP INDEX ifexists fullname */ -{sqlite3DropIndex(pParse, yymsp[0].minor.yy347, yymsp[-1].minor.yy392);} + case 248: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy65, yymsp[-1].minor.yy328);} break; - case 252: /* cmd ::= VACUUM */ - case 253: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==253); + case 249: /* cmd ::= VACUUM */ + case 250: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==250); {sqlite3Vacuum(pParse);} break; - case 254: /* cmd ::= PRAGMA nm dbnm */ + case 251: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 255: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 252: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 256: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 253: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 257: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 254: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 258: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 255: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 268: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 264: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; - sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy327, &all); + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy473, &all); } break; - case 269: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 265: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { - sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy392, yymsp[-4].minor.yy410.a, yymsp[-4].minor.yy410.b, yymsp[-2].minor.yy347, yymsp[0].minor.yy122, yymsp[-10].minor.yy392, yymsp[-8].minor.yy392); + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy328, yymsp[-4].minor.yy378.a, yymsp[-4].minor.yy378.b, yymsp[-2].minor.yy65, yymsp[0].minor.yy132, yymsp[-10].minor.yy328, yymsp[-8].minor.yy328); yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); } break; - case 270: /* trigger_time ::= BEFORE */ - case 273: /* trigger_time ::= */ yytestcase(yyruleno==273); -{ yygotominor.yy392 = TK_BEFORE; } + case 266: /* trigger_time ::= BEFORE */ + case 269: /* trigger_time ::= */ yytestcase(yyruleno==269); +{ yygotominor.yy328 = TK_BEFORE; } break; - case 271: /* trigger_time ::= AFTER */ -{ yygotominor.yy392 = TK_AFTER; } + case 267: /* trigger_time ::= AFTER */ +{ yygotominor.yy328 = TK_AFTER; } break; - case 272: /* trigger_time ::= INSTEAD OF */ -{ yygotominor.yy392 = TK_INSTEAD;} + case 268: /* trigger_time ::= INSTEAD OF */ +{ yygotominor.yy328 = TK_INSTEAD;} break; - case 274: /* trigger_event ::= DELETE|INSERT */ - case 275: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==275); -{yygotominor.yy410.a = yymsp[0].major; yygotominor.yy410.b = 0;} + case 270: /* trigger_event ::= DELETE|INSERT */ + case 271: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==271); +{yygotominor.yy378.a = yymsp[0].major; yygotominor.yy378.b = 0;} break; - case 276: /* trigger_event ::= UPDATE OF inscollist */ -{yygotominor.yy410.a = TK_UPDATE; yygotominor.yy410.b = yymsp[0].minor.yy180;} + case 272: /* trigger_event ::= UPDATE OF idlist */ +{yygotominor.yy378.a = TK_UPDATE; yygotominor.yy378.b = yymsp[0].minor.yy408;} break; - case 279: /* when_clause ::= */ - case 301: /* key_opt ::= */ yytestcase(yyruleno==301); -{ yygotominor.yy122 = 0; } + case 275: /* when_clause ::= */ + case 296: /* key_opt ::= */ yytestcase(yyruleno==296); +{ yygotominor.yy132 = 0; } break; - case 280: /* when_clause ::= WHEN expr */ - case 302: /* key_opt ::= KEY expr */ yytestcase(yyruleno==302); -{ yygotominor.yy122 = yymsp[0].minor.yy342.pExpr; } + case 276: /* when_clause ::= WHEN expr */ + case 297: /* key_opt ::= KEY expr */ yytestcase(yyruleno==297); +{ yygotominor.yy132 = yymsp[0].minor.yy346.pExpr; } break; - case 281: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 277: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { - assert( yymsp[-2].minor.yy327!=0 ); - yymsp[-2].minor.yy327->pLast->pNext = yymsp[-1].minor.yy327; - yymsp[-2].minor.yy327->pLast = yymsp[-1].minor.yy327; - yygotominor.yy327 = yymsp[-2].minor.yy327; + assert( yymsp[-2].minor.yy473!=0 ); + yymsp[-2].minor.yy473->pLast->pNext = yymsp[-1].minor.yy473; + yymsp[-2].minor.yy473->pLast = yymsp[-1].minor.yy473; + yygotominor.yy473 = yymsp[-2].minor.yy473; } break; - case 282: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 278: /* trigger_cmd_list ::= trigger_cmd SEMI */ { - assert( yymsp[-1].minor.yy327!=0 ); - yymsp[-1].minor.yy327->pLast = yymsp[-1].minor.yy327; - yygotominor.yy327 = yymsp[-1].minor.yy327; + assert( yymsp[-1].minor.yy473!=0 ); + yymsp[-1].minor.yy473->pLast = yymsp[-1].minor.yy473; + yygotominor.yy473 = yymsp[-1].minor.yy473; } break; - case 284: /* trnm ::= nm DOT nm */ + case 280: /* trnm ::= nm DOT nm */ { yygotominor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -115878,123 +117813,137 @@ static void yy_reduce( "statements within triggers"); } break; - case 286: /* tridxby ::= INDEXED BY nm */ + case 282: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 287: /* tridxby ::= NOT INDEXED */ + case 283: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 288: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ -{ yygotominor.yy327 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy442, yymsp[0].minor.yy122, yymsp[-5].minor.yy258); } + case 284: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ +{ yygotominor.yy473 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy14, yymsp[0].minor.yy132, yymsp[-5].minor.yy186); } break; - case 289: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt valuelist */ -{yygotominor.yy327 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy180, yymsp[0].minor.yy487.pList, yymsp[0].minor.yy487.pSelect, yymsp[-4].minor.yy258);} + case 285: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */ +{yygotominor.yy473 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy408, yymsp[0].minor.yy3, yymsp[-4].minor.yy186);} break; - case 290: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */ -{yygotominor.yy327 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy180, 0, yymsp[0].minor.yy159, yymsp[-4].minor.yy258);} + case 286: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ +{yygotominor.yy473 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy132);} break; - case 291: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ -{yygotominor.yy327 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy122);} + case 287: /* trigger_cmd ::= select */ +{yygotominor.yy473 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy3); } break; - case 292: /* trigger_cmd ::= select */ -{yygotominor.yy327 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy159); } - break; - case 293: /* expr ::= RAISE LP IGNORE RP */ + case 288: /* expr ::= RAISE LP IGNORE RP */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); - if( yygotominor.yy342.pExpr ){ - yygotominor.yy342.pExpr->affinity = OE_Ignore; + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); + if( yygotominor.yy346.pExpr ){ + yygotominor.yy346.pExpr->affinity = OE_Ignore; } - yygotominor.yy342.zStart = yymsp[-3].minor.yy0.z; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-3].minor.yy0.z; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 294: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 289: /* expr ::= RAISE LP raisetype COMMA nm RP */ { - yygotominor.yy342.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); - if( yygotominor.yy342.pExpr ) { - yygotominor.yy342.pExpr->affinity = (char)yymsp[-3].minor.yy392; + yygotominor.yy346.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); + if( yygotominor.yy346.pExpr ) { + yygotominor.yy346.pExpr->affinity = (char)yymsp[-3].minor.yy328; } - yygotominor.yy342.zStart = yymsp[-5].minor.yy0.z; - yygotominor.yy342.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yygotominor.yy346.zStart = yymsp[-5].minor.yy0.z; + yygotominor.yy346.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 295: /* raisetype ::= ROLLBACK */ -{yygotominor.yy392 = OE_Rollback;} + case 290: /* raisetype ::= ROLLBACK */ +{yygotominor.yy328 = OE_Rollback;} break; - case 297: /* raisetype ::= FAIL */ -{yygotominor.yy392 = OE_Fail;} + case 292: /* raisetype ::= FAIL */ +{yygotominor.yy328 = OE_Fail;} break; - case 298: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 293: /* cmd ::= DROP TRIGGER ifexists fullname */ { - sqlite3DropTrigger(pParse,yymsp[0].minor.yy347,yymsp[-1].minor.yy392); + sqlite3DropTrigger(pParse,yymsp[0].minor.yy65,yymsp[-1].minor.yy328); } break; - case 299: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 294: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { - sqlite3Attach(pParse, yymsp[-3].minor.yy342.pExpr, yymsp[-1].minor.yy342.pExpr, yymsp[0].minor.yy122); + sqlite3Attach(pParse, yymsp[-3].minor.yy346.pExpr, yymsp[-1].minor.yy346.pExpr, yymsp[0].minor.yy132); } break; - case 300: /* cmd ::= DETACH database_kw_opt expr */ + case 295: /* cmd ::= DETACH database_kw_opt expr */ { - sqlite3Detach(pParse, yymsp[0].minor.yy342.pExpr); + sqlite3Detach(pParse, yymsp[0].minor.yy346.pExpr); } break; - case 305: /* cmd ::= REINDEX */ + case 300: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 306: /* cmd ::= REINDEX nm dbnm */ + case 301: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 307: /* cmd ::= ANALYZE */ + case 302: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 308: /* cmd ::= ANALYZE nm dbnm */ + case 303: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 309: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 304: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { - sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy347,&yymsp[0].minor.yy0); + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy65,&yymsp[0].minor.yy0); } break; - case 310: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */ + case 305: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */ { sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0); } break; - case 311: /* add_column_fullname ::= fullname */ + case 306: /* add_column_fullname ::= fullname */ { pParse->db->lookaside.bEnabled = 0; - sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy347); + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy65); } break; - case 314: /* cmd ::= create_vtab */ + case 309: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 315: /* cmd ::= create_vtab LP vtabarglist RP */ + case 310: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 316: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 311: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { - sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy392); + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy328); } break; - case 319: /* vtabarg ::= */ + case 314: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 321: /* vtabargtoken ::= ANY */ - case 322: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==322); - case 323: /* lp ::= LP */ yytestcase(yyruleno==323); + case 316: /* vtabargtoken ::= ANY */ + case 317: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==317); + case 318: /* lp ::= LP */ yytestcase(yyruleno==318); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; + case 322: /* with ::= */ +{yygotominor.yy59 = 0;} + break; + case 323: /* with ::= WITH wqlist */ + case 324: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==324); +{ yygotominor.yy59 = yymsp[0].minor.yy59; } + break; + case 325: /* wqlist ::= nm idxlist_opt AS LP select RP */ +{ + yygotominor.yy59 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy14, yymsp[-1].minor.yy3); +} + break; + case 326: /* wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP */ +{ + yygotominor.yy59 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy59, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy14, yymsp[-1].minor.yy3); +} + break; default: /* (0) input ::= cmdlist */ yytestcase(yyruleno==0); /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1); @@ -116007,30 +117956,30 @@ static void yy_reduce( /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20); /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21); /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25); - /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34); - /* (35) columnlist ::= column */ yytestcase(yyruleno==35); - /* (44) type ::= */ yytestcase(yyruleno==44); - /* (51) signed ::= plus_num */ yytestcase(yyruleno==51); - /* (52) signed ::= minus_num */ yytestcase(yyruleno==52); - /* (53) carglist ::= carglist ccons */ yytestcase(yyruleno==53); - /* (54) carglist ::= */ yytestcase(yyruleno==54); - /* (61) ccons ::= NULL onconf */ yytestcase(yyruleno==61); - /* (89) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==89); - /* (90) conslist ::= tcons */ yytestcase(yyruleno==90); - /* (92) tconscomma ::= */ yytestcase(yyruleno==92); - /* (277) foreach_clause ::= */ yytestcase(yyruleno==277); - /* (278) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==278); - /* (285) tridxby ::= */ yytestcase(yyruleno==285); - /* (303) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==303); - /* (304) database_kw_opt ::= */ yytestcase(yyruleno==304); - /* (312) kwcolumn_opt ::= */ yytestcase(yyruleno==312); - /* (313) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==313); - /* (317) vtabarglist ::= vtabarg */ yytestcase(yyruleno==317); - /* (318) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==318); - /* (320) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==320); - /* (324) anylist ::= */ yytestcase(yyruleno==324); - /* (325) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==325); - /* (326) anylist ::= anylist ANY */ yytestcase(yyruleno==326); + /* (36) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==36); + /* (37) columnlist ::= column */ yytestcase(yyruleno==37); + /* (43) type ::= */ yytestcase(yyruleno==43); + /* (50) signed ::= plus_num */ yytestcase(yyruleno==50); + /* (51) signed ::= minus_num */ yytestcase(yyruleno==51); + /* (52) carglist ::= carglist ccons */ yytestcase(yyruleno==52); + /* (53) carglist ::= */ yytestcase(yyruleno==53); + /* (60) ccons ::= NULL onconf */ yytestcase(yyruleno==60); + /* (88) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==88); + /* (89) conslist ::= tcons */ yytestcase(yyruleno==89); + /* (91) tconscomma ::= */ yytestcase(yyruleno==91); + /* (273) foreach_clause ::= */ yytestcase(yyruleno==273); + /* (274) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==274); + /* (281) tridxby ::= */ yytestcase(yyruleno==281); + /* (298) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==298); + /* (299) database_kw_opt ::= */ yytestcase(yyruleno==299); + /* (307) kwcolumn_opt ::= */ yytestcase(yyruleno==307); + /* (308) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==308); + /* (312) vtabarglist ::= vtabarg */ yytestcase(yyruleno==312); + /* (313) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==313); + /* (315) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==315); + /* (319) anylist ::= */ yytestcase(yyruleno==319); + /* (320) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==320); + /* (321) anylist ::= anylist ANY */ yytestcase(yyruleno==321); break; }; assert( yyruleno>=0 && yyruleno1 ){ - /* Parameters of the form #NNN (where NNN is a number) are used - ** internally by sqlite3NestedParse. */ - *tokenType = TK_REGISTER; - return i; - } - /* Fall through into the next case if the '#' is not followed by - ** a digit. Try to match #AAAA where AAAA is a parameter name. */ - } #ifndef SQLITE_OMIT_TCL_VARIABLE case '$': #endif case '@': /* For compatibility with MS SQL Server */ + case '#': case ':': { int n = 0; - testcase( z[0]=='$' ); testcase( z[0]=='@' ); testcase( z[0]==':' ); + testcase( z[0]=='$' ); testcase( z[0]=='@' ); + testcase( z[0]==':' ); testcase( z[0]=='#' ); *tokenType = TK_VARIABLE; for(i=1; (c=z[i])!=0; i++){ if( IdChar(c) ){ @@ -117069,10 +119013,10 @@ abort_parse: sqlite3DeleteTable(db, pParse->pNewTable); } + if( pParse->bFreeWith ) sqlite3WithDelete(db, pParse->pWith); sqlite3DeleteTrigger(db, pParse->pNewTrigger); for(i=pParse->nzVar-1; i>=0; i--) sqlite3DbFree(db, pParse->azVar[i]); sqlite3DbFree(db, pParse->azVar); - sqlite3DbFree(db, pParse->aAlias); while( pParse->pAinc ){ AutoincInfo *p = pParse->pAinc; pParse->pAinc = p->pNext; @@ -117600,13 +119544,6 @@ SQLITE_API int sqlite3_initialize(void){ */ if( sqlite3GlobalConfig.isInit ) return SQLITE_OK; -#ifdef SQLITE_ENABLE_SQLLOG - { - extern void sqlite3_init_sqllog(void); - sqlite3_init_sqllog(); - } -#endif - /* Make sure the mutex subsystem is initialized. If unable to ** initialize the mutex subsystem, return early with the error. ** If the system is so sick that we are unable to allocate a mutex, @@ -117980,6 +119917,13 @@ SQLITE_API int sqlite3_config(int op, ...){ break; } +#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) + case SQLITE_CONFIG_WIN32_HEAPSIZE: { + sqlite3GlobalConfig.nHeap = va_arg(ap, int); + break; + } +#endif + default: { rc = SQLITE_ERROR; break; @@ -118046,7 +119990,8 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){ db->lookaside.bEnabled = 1; db->lookaside.bMalloced = pBuf==0 ?1:0; }else{ - db->lookaside.pEnd = 0; + db->lookaside.pStart = db; + db->lookaside.pEnd = db; db->lookaside.bEnabled = 0; db->lookaside.bMalloced = 0; } @@ -118444,9 +120389,7 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ #endif sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */ - if( db->pErr ){ - sqlite3ValueFree(db->pErr); - } + sqlite3ValueFree(db->pErr); sqlite3CloseExtensions(db); db->magic = SQLITE_MAGIC_ERROR; @@ -118521,8 +120464,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){ ** Return a static string containing the name corresponding to the error code ** specified in the argument. */ -#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \ - defined(SQLITE_DEBUG_OS_TRACE) +#if defined(SQLITE_TEST) SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ const char *zName = 0; int i, origRc = rc; @@ -118544,6 +120486,7 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break; case SQLITE_READONLY_CANTLOCK: zName = "SQLITE_READONLY_CANTLOCK"; break; case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break; + case SQLITE_READONLY_DBMOVED: zName = "SQLITE_READONLY_DBMOVED"; break; case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break; case SQLITE_IOERR: zName = "SQLITE_IOERR"; break; case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break; @@ -118600,6 +120543,7 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ case SQLITE_CONSTRAINT_VTAB: zName = "SQLITE_CONSTRAINT_VTAB"; break; case SQLITE_CONSTRAINT_FUNCTION: zName = "SQLITE_CONSTRAINT_FUNCTION"; break; + case SQLITE_CONSTRAINT_ROWID: zName = "SQLITE_CONSTRAINT_ROWID"; break; case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break; case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break; case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break; @@ -118827,6 +120771,7 @@ SQLITE_PRIVATE int sqlite3CreateFunc( ){ FuncDef *p; int nName; + int extraFlags; assert( sqlite3_mutex_held(db->mutex) ); if( zFunctionName==0 || @@ -118837,6 +120782,10 @@ SQLITE_PRIVATE int sqlite3CreateFunc( (255<(nName = sqlite3Strlen30( zFunctionName))) ){ return SQLITE_MISUSE_BKPT; } + + assert( SQLITE_FUNC_CONSTANT==SQLITE_DETERMINISTIC ); + extraFlags = enc & SQLITE_DETERMINISTIC; + enc &= (SQLITE_FUNC_ENCMASK|SQLITE_ANY); #ifndef SQLITE_OMIT_UTF16 /* If SQLITE_UTF16 is specified as the encoding type, transform this @@ -118850,10 +120799,10 @@ SQLITE_PRIVATE int sqlite3CreateFunc( enc = SQLITE_UTF16NATIVE; }else if( enc==SQLITE_ANY ){ int rc; - rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8, + rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8|extraFlags, pUserData, xFunc, xStep, xFinal, pDestructor); if( rc==SQLITE_OK ){ - rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE, + rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE|extraFlags, pUserData, xFunc, xStep, xFinal, pDestructor); } if( rc!=SQLITE_OK ){ @@ -118896,7 +120845,8 @@ SQLITE_PRIVATE int sqlite3CreateFunc( pDestructor->nRef++; } p->pDestructor = pDestructor; - p->funcFlags &= SQLITE_FUNC_ENCMASK; + p->funcFlags = (p->funcFlags & SQLITE_FUNC_ENCMASK) | extraFlags; + testcase( p->funcFlags & SQLITE_DETERMINISTIC ); p->xFunc = xFunc; p->xStep = xStep; p->xFinalize = xFinal; @@ -119326,6 +121276,7 @@ SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){ if( db->mallocFailed ){ z = sqlite3ErrStr(SQLITE_NOMEM); }else{ + testcase( db->pErr==0 ); z = (char*)sqlite3_value_text(db->pErr); assert( !db->mallocFailed ); if( z==0 ){ @@ -119367,8 +121318,7 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){ }else{ z = sqlite3_value_text16(db->pErr); if( z==0 ){ - sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode), - SQLITE_UTF8, SQLITE_STATIC); + sqlite3Error(db, db->errCode, sqlite3ErrStr(db->errCode)); z = sqlite3_value_text16(db->pErr); } /* A malloc() may have failed within the call to sqlite3_value_text16() @@ -119415,6 +121365,32 @@ SQLITE_API const char *sqlite3_errstr(int rc){ return sqlite3ErrStr(rc); } +/* +** Invalidate all cached KeyInfo objects for database connection "db" +*/ +static void invalidateCachedKeyInfo(sqlite3 *db){ + Db *pDb; /* A single database */ + int iDb; /* The database index number */ + HashElem *k; /* For looping over tables in pDb */ + Table *pTab; /* A table in the database */ + Index *pIdx; /* Each index */ + + for(iDb=0, pDb=db->aDb; iDbnDb; iDb++, pDb++){ + if( pDb->pBt==0 ) continue; + sqlite3BtreeEnter(pDb->pBt); + for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){ + pTab = (Table*)sqliteHashData(k); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->pKeyInfo && pIdx->pKeyInfo->db==db ){ + sqlite3KeyInfoUnref(pIdx->pKeyInfo); + pIdx->pKeyInfo = 0; + } + } + } + sqlite3BtreeLeave(pDb->pBt); + } +} + /* ** Create a new collating function for database "db". The name is zName ** and the encoding is enc. @@ -119459,6 +121435,7 @@ static int createCollation( return SQLITE_BUSY; } sqlite3ExpirePreparedStatements(db); + invalidateCachedKeyInfo(db); /* If collation sequence pColl was created directly by a call to ** sqlite3_create_collation, and not generated by synthCollSeq(), @@ -120055,8 +122032,6 @@ static int openDatabase( } #endif - sqlite3Error(db, rc, 0); - /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking ** mode. Doing nothing at all also makes NORMAL the default. @@ -120067,6 +122042,8 @@ static int openDatabase( SQLITE_DEFAULT_LOCKING_MODE); #endif + if( rc ) sqlite3Error(db, rc, 0); + /* Enable the lookaside-malloc subsystem */ setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside, sqlite3GlobalConfig.nLookaside); @@ -120526,7 +122503,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** to the xRandomness method of the default VFS. */ case SQLITE_TESTCTRL_PRNG_RESET: { - sqlite3PrngResetState(); + sqlite3_randomness(0,0); break; } @@ -120726,6 +122703,19 @@ SQLITE_API int sqlite3_test_control(int op, ...){ } #endif + /* sqlite3_test_control(SQLITE_TESTCTRL_NEVER_CORRUPT, int); + ** + ** Set or clear a flag that indicates that the database file is always well- + ** formed and never corrupt. This flag is clear by default, indicating that + ** database files might have arbitrary corruption. Setting the flag during + ** testing causes certain assert() statements in the code to be activated + ** that demonstrat invariants on well-formed database files. + */ + case SQLITE_TESTCTRL_NEVER_CORRUPT: { + sqlite3GlobalConfig.neverCorrupt = va_arg(ap, int); + break; + } + } va_end(ap); #endif /* SQLITE_OMIT_BUILTIN_TEST */ @@ -122244,6 +124234,10 @@ struct Fts3MultiSegReader { SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table*,int,int); +#define fts3GetVarint32(p, piVal) ( \ + (*(u8*)(p)&0x80) ? sqlite3Fts3GetVarint32(p, piVal) : (*piVal=*(u8*)(p), 1) \ +) + /* fts3.c */ SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64); SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *); @@ -122351,21 +124345,37 @@ SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){ return (int) (q - (unsigned char *)p); } +#define GETVARINT_STEP(v, ptr, shift, mask1, mask2, var, ret) \ + v = (v & mask1) | ( (*ptr++) << shift ); \ + if( (v & mask2)==0 ){ var = v; return ret; } +#define GETVARINT_INIT(v, ptr, shift, mask1, mask2, var, ret) \ + v = (*ptr++); \ + if( (v & mask2)==0 ){ var = v; return ret; } + /* ** Read a 64-bit variable-length integer from memory starting at p[0]. ** Return the number of bytes read, or 0 on error. ** The value is stored in *v. */ SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){ - const unsigned char *q = (const unsigned char *) p; - sqlite_uint64 x = 0, y = 1; - while( (*q&0x80)==0x80 && q-(unsigned char *)pestimatedRows variable to nRow. Unless this +** extension is currently being used by a version of SQLite too old to +** support estimatedRows. In that case this function is a no-op. +*/ +static void fts3SetEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){ +#if SQLITE_VERSION_NUMBER>=3008002 + if( sqlite3_libversion_number()>=3008002 ){ + pIdxInfo->estimatedRows = nRow; + } +#endif +} + /* ** Implementation of the xBestIndex method for FTS3 tables. There ** are three possible strategies, in order of preference: @@ -123493,7 +125527,20 @@ static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ for(i=0; inConstraint; i++){ int bDocid; /* True if this constraint is on docid */ struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i]; - if( pCons->usable==0 ) continue; + if( pCons->usable==0 ){ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH ){ + /* There exists an unusable MATCH constraint. This means that if + ** the planner does elect to use the results of this call as part + ** of the overall query plan the user will see an "unable to use + ** function MATCH in the requested context" error. To discourage + ** this, return a very high cost here. */ + pInfo->idxNum = FTS3_FULLSCAN_SEARCH; + pInfo->estimatedCost = 1e50; + fts3SetEstimatedRows(pInfo, ((sqlite3_int64)1) << 50); + return SQLITE_OK; + } + continue; + } bDocid = (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1); @@ -123736,10 +125783,10 @@ static int fts3ScanInteriorNode( /* Load the next term on the node into zBuffer. Use realloc() to expand ** the size of zBuffer if required. */ if( !isFirstTerm ){ - zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix); + zCsr += fts3GetVarint32(zCsr, &nPrefix); } isFirstTerm = 0; - zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix); + zCsr += fts3GetVarint32(zCsr, &nSuffix); if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){ rc = FTS_CORRUPT_VTAB; @@ -123827,7 +125874,7 @@ static int fts3SelectLeaf( assert( piLeaf || piLeaf2 ); - sqlite3Fts3GetVarint32(zNode, &iHeight); + fts3GetVarint32(zNode, &iHeight); rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2); assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) ); @@ -124029,11 +126076,11 @@ static void fts3PoslistMerge( int iCol1; /* The current column index in pp1 */ int iCol2; /* The current column index in pp2 */ - if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1); + if( *p1==POS_COLUMN ) fts3GetVarint32(&p1[1], &iCol1); else if( *p1==POS_END ) iCol1 = POSITION_LIST_END; else iCol1 = 0; - if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2); + if( *p2==POS_COLUMN ) fts3GetVarint32(&p2[1], &iCol2); else if( *p2==POS_END ) iCol2 = POSITION_LIST_END; else iCol2 = 0; @@ -124126,11 +126173,11 @@ static int fts3PoslistPhraseMerge( assert( p!=0 && *p1!=0 && *p2!=0 ); if( *p1==POS_COLUMN ){ p1++; - p1 += sqlite3Fts3GetVarint32(p1, &iCol1); + p1 += fts3GetVarint32(p1, &iCol1); } if( *p2==POS_COLUMN ){ p2++; - p2 += sqlite3Fts3GetVarint32(p2, &iCol2); + p2 += fts3GetVarint32(p2, &iCol2); } while( 1 ){ @@ -124180,9 +126227,9 @@ static int fts3PoslistPhraseMerge( if( 0==*p1 || 0==*p2 ) break; p1++; - p1 += sqlite3Fts3GetVarint32(p1, &iCol1); + p1 += fts3GetVarint32(p1, &iCol1); p2++; - p2 += sqlite3Fts3GetVarint32(p2, &iCol2); + p2 += fts3GetVarint32(p2, &iCol2); } /* Advance pointer p1 or p2 (whichever corresponds to the smaller of @@ -124194,12 +126241,12 @@ static int fts3PoslistPhraseMerge( fts3ColumnlistCopy(0, &p1); if( 0==*p1 ) break; p1++; - p1 += sqlite3Fts3GetVarint32(p1, &iCol1); + p1 += fts3GetVarint32(p1, &iCol1); }else{ fts3ColumnlistCopy(0, &p2); if( 0==*p2 ) break; p2++; - p2 += sqlite3Fts3GetVarint32(p2, &iCol2); + p2 += fts3GetVarint32(p2, &iCol2); } } @@ -127366,7 +129413,7 @@ static void fts3EvalUpdateCounts(Fts3Expr *pExpr){ pExpr->aMI[iCol*3 + 2] += (iCnt>0); if( *p==0x00 ) break; p++; - p += sqlite3Fts3GetVarint32(p, &iCol); + p += fts3GetVarint32(p, &iCol); } } @@ -127667,7 +129714,7 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( if( *pIter==0x01 ){ pIter++; - pIter += sqlite3Fts3GetVarint32(pIter, &iThis); + pIter += fts3GetVarint32(pIter, &iThis); }else{ iThis = 0; } @@ -127675,7 +129722,7 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( fts3ColumnlistCopy(0, &pIter); if( *pIter==0x00 ) return 0; pIter++; - pIter += sqlite3Fts3GetVarint32(pIter, &iThis); + pIter += fts3GetVarint32(pIter, &iThis); } *ppOut = ((iCol==iThis)?pIter:0); @@ -128441,6 +130488,11 @@ SQLITE_PRIVATE int sqlite3Fts3OpenTokenizer( return rc; } +/* +** Function getNextNode(), which is called by fts3ExprParse(), may itself +** call fts3ExprParse(). So this forward declaration is required. +*/ +static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *); /* ** Extract the next token from buffer z (length n) using the tokenizer @@ -128475,7 +130527,31 @@ static int getNextToken( int nByte; /* total space to allocate */ rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition); - if( rc==SQLITE_OK ){ + + if( (rc==SQLITE_OK || rc==SQLITE_DONE) && sqlite3_fts3_enable_parentheses ){ + int i; + if( rc==SQLITE_DONE ) iStart = n; + for(i=0; inNest++; + rc = fts3ExprParse(pParse, &z[i+1], n-i-1, &pRet, &nConsumed); + if( rc==SQLITE_OK && !pRet ){ + rc = SQLITE_DONE; + } + nConsumed = (int)(i + 1 + nConsumed); + break; + } + + if( z[i]==')' ){ + rc = SQLITE_DONE; + pParse->nNest--; + nConsumed = i+1; + break; + } + } + } + + if( nConsumed==0 && rc==SQLITE_OK ){ nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken; pRet = (Fts3Expr *)fts3MallocZero(nByte); if( !pRet ){ @@ -128655,12 +130731,6 @@ no_mem: return SQLITE_NOMEM; } -/* -** Function getNextNode(), which is called by fts3ExprParse(), may itself -** call fts3ExprParse(). So this forward declaration is required. -*/ -static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *); - /* ** The output variable *ppExpr is populated with an allocated Fts3Expr ** structure, or set to 0 if the end of the input buffer is reached. @@ -128757,27 +130827,6 @@ static int getNextNode( } } - /* Check for an open bracket. */ - if( sqlite3_fts3_enable_parentheses ){ - if( *zInput=='(' ){ - int nConsumed; - pParse->nNest++; - rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed); - if( rc==SQLITE_OK && !*ppExpr ){ - rc = SQLITE_DONE; - } - *pnConsumed = (int)((zInput - z) + 1 + nConsumed); - return rc; - } - - /* Check for a close bracket. */ - if( *zInput==')' ){ - pParse->nNest--; - *pnConsumed = (int)((zInput - z) + 1); - return SQLITE_DONE; - } - } - /* See if we are dealing with a quoted phrase. If this is the case, then ** search for the closing quote and pass the whole string to getNextString() ** for processing. This is easy to do, as fts3 has no syntax for escaping @@ -129661,13 +131710,13 @@ SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){ */ static int fts3StrHash(const void *pKey, int nKey){ const char *z = (const char *)pKey; - int h = 0; + unsigned h = 0; if( nKey<=0 ) nKey = (int) strlen(z); while( nKey > 0 ){ h = (h<<3) ^ h ^ *z++; nKey--; } - return h & 0x7fffffff; + return (int)(h & 0x7fffffff); } static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){ if( n1!=n2 ) return 1; @@ -130352,12 +132401,14 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ /* Step 2 */ switch( z[1] ){ case 'a': - stem(&z, "lanoita", "ate", m_gt_0) || - stem(&z, "lanoit", "tion", m_gt_0); + if( !stem(&z, "lanoita", "ate", m_gt_0) ){ + stem(&z, "lanoit", "tion", m_gt_0); + } break; case 'c': - stem(&z, "icne", "ence", m_gt_0) || - stem(&z, "icna", "ance", m_gt_0); + if( !stem(&z, "icne", "ence", m_gt_0) ){ + stem(&z, "icna", "ance", m_gt_0); + } break; case 'e': stem(&z, "rezi", "ize", m_gt_0); @@ -130366,43 +132417,54 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ stem(&z, "igol", "log", m_gt_0); break; case 'l': - stem(&z, "ilb", "ble", m_gt_0) || - stem(&z, "illa", "al", m_gt_0) || - stem(&z, "iltne", "ent", m_gt_0) || - stem(&z, "ile", "e", m_gt_0) || - stem(&z, "ilsuo", "ous", m_gt_0); + if( !stem(&z, "ilb", "ble", m_gt_0) + && !stem(&z, "illa", "al", m_gt_0) + && !stem(&z, "iltne", "ent", m_gt_0) + && !stem(&z, "ile", "e", m_gt_0) + ){ + stem(&z, "ilsuo", "ous", m_gt_0); + } break; case 'o': - stem(&z, "noitazi", "ize", m_gt_0) || - stem(&z, "noita", "ate", m_gt_0) || - stem(&z, "rota", "ate", m_gt_0); + if( !stem(&z, "noitazi", "ize", m_gt_0) + && !stem(&z, "noita", "ate", m_gt_0) + ){ + stem(&z, "rota", "ate", m_gt_0); + } break; case 's': - stem(&z, "msila", "al", m_gt_0) || - stem(&z, "ssenevi", "ive", m_gt_0) || - stem(&z, "ssenluf", "ful", m_gt_0) || - stem(&z, "ssensuo", "ous", m_gt_0); + if( !stem(&z, "msila", "al", m_gt_0) + && !stem(&z, "ssenevi", "ive", m_gt_0) + && !stem(&z, "ssenluf", "ful", m_gt_0) + ){ + stem(&z, "ssensuo", "ous", m_gt_0); + } break; case 't': - stem(&z, "itila", "al", m_gt_0) || - stem(&z, "itivi", "ive", m_gt_0) || - stem(&z, "itilib", "ble", m_gt_0); + if( !stem(&z, "itila", "al", m_gt_0) + && !stem(&z, "itivi", "ive", m_gt_0) + ){ + stem(&z, "itilib", "ble", m_gt_0); + } break; } /* Step 3 */ switch( z[0] ){ case 'e': - stem(&z, "etaci", "ic", m_gt_0) || - stem(&z, "evita", "", m_gt_0) || - stem(&z, "ezila", "al", m_gt_0); + if( !stem(&z, "etaci", "ic", m_gt_0) + && !stem(&z, "evita", "", m_gt_0) + ){ + stem(&z, "ezila", "al", m_gt_0); + } break; case 'i': stem(&z, "itici", "ic", m_gt_0); break; case 'l': - stem(&z, "laci", "ic", m_gt_0) || - stem(&z, "luf", "", m_gt_0); + if( !stem(&z, "laci", "ic", m_gt_0) ){ + stem(&z, "luf", "", m_gt_0); + } break; case 's': stem(&z, "ssen", "", m_gt_0); @@ -130443,9 +132505,11 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ z += 3; } }else if( z[2]=='e' ){ - stem(&z, "tneme", "", m_gt_1) || - stem(&z, "tnem", "", m_gt_1) || - stem(&z, "tne", "", m_gt_1); + if( !stem(&z, "tneme", "", m_gt_1) + && !stem(&z, "tnem", "", m_gt_1) + ){ + stem(&z, "tne", "", m_gt_1); + } } } break; @@ -130464,8 +132528,9 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ } break; case 't': - stem(&z, "eta", "", m_gt_1) || - stem(&z, "iti", "", m_gt_1); + if( !stem(&z, "eta", "", m_gt_1) ){ + stem(&z, "iti", "", m_gt_1); + } break; case 'u': if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){ @@ -133122,8 +135187,8 @@ static int fts3SegReaderNext( /* Because of the FTS3_NODE_PADDING bytes of padding, the following is ** safe (no risk of overread) even if the node data is corrupted. */ - pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix); - pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix); + pNext += fts3GetVarint32(pNext, &nPrefix); + pNext += fts3GetVarint32(pNext, &nSuffix); if( nPrefix<0 || nSuffix<=0 || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] ){ @@ -133146,7 +135211,7 @@ static int fts3SegReaderNext( memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix); pReader->nTerm = nPrefix+nSuffix; pNext += nSuffix; - pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist); + pNext += fts3GetVarint32(pNext, &pReader->nDoclist); pReader->aDoclist = pNext; pReader->pOffsetList = 0; @@ -134307,7 +136372,7 @@ static void fts3ColumnFilter( break; } p = &pList[1]; - p += sqlite3Fts3GetVarint32(p, &iCurrent); + p += fts3GetVarint32(p, &iCurrent); } if( bZero && &pList[nList]!=pEnd ){ @@ -135272,9 +137337,9 @@ static int nodeReaderNext(NodeReader *p){ p->aNode = 0; }else{ if( bFirst==0 ){ - p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &nPrefix); + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nPrefix); } - p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &nSuffix); + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nSuffix); blobGrowBuffer(&p->term, nPrefix+nSuffix, &rc); if( rc==SQLITE_OK ){ @@ -135282,7 +137347,7 @@ static int nodeReaderNext(NodeReader *p){ p->term.n = nPrefix+nSuffix; p->iOff += nSuffix; if( p->iChild==0 ){ - p->iOff += sqlite3Fts3GetVarint32(&p->aNode[p->iOff], &p->nDoclist); + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &p->nDoclist); p->aDoclist = &p->aNode[p->iOff]; p->iOff += p->nDoclist; } @@ -136334,7 +138399,7 @@ static int fts3IncrmergeHintPop(Blob *pHint, i64 *piAbsLevel, int *pnInput){ pHint->n = i; i += sqlite3Fts3GetVarint(&pHint->a[i], piAbsLevel); - i += sqlite3Fts3GetVarint32(&pHint->a[i], pnInput); + i += fts3GetVarint32(&pHint->a[i], pnInput); if( i!=nHint ) return SQLITE_CORRUPT_VTAB; return SQLITE_OK; @@ -137327,7 +139392,7 @@ struct StrBuffer { */ static void fts3GetDeltaPosition(char **pp, int *piPos){ int iVal; - *pp += sqlite3Fts3GetVarint32(*pp, &iVal); + *pp += fts3GetVarint32(*pp, &iVal); *piPos += (iVal-2); } @@ -139620,6 +141685,16 @@ typedef union RtreeCoord RtreeCoord; */ #define HASHSIZE 128 +/* The xBestIndex method of this virtual table requires an estimate of +** the number of rows in the virtual table to calculate the costs of +** various strategies. If possible, this estimate is loaded from the +** sqlite_stat1 table (with RTREE_MIN_ROWEST as a hard-coded minimum). +** Otherwise, if no sqlite_stat1 entry is available, use +** RTREE_DEFAULT_ROWEST. +*/ +#define RTREE_DEFAULT_ROWEST 1048576 +#define RTREE_MIN_ROWEST 100 + /* ** An rtree virtual-table object. */ @@ -139634,6 +141709,7 @@ struct Rtree { char *zName; /* Name of r-tree table */ RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ int nBusy; /* Current number of users of this structure */ + i64 nRowEst; /* Estimated number of rows in this table */ /* List of nodes removed during a CondenseTree operation. List is ** linked together via the pointer normally used for hash chains - @@ -140826,6 +142902,19 @@ static int rtreeFilter( return rc; } +/* +** Set the pIdxInfo->estimatedRows variable to nRow. Unless this +** extension is currently being used by a version of SQLite too old to +** support estimatedRows. In that case this function is a no-op. +*/ +static void setEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){ +#if SQLITE_VERSION_NUMBER>=3008002 + if( sqlite3_libversion_number()>=3008002 ){ + pIdxInfo->estimatedRows = nRow; + } +#endif +} + /* ** Rtree virtual table module xBestIndex method. There are three ** table scan strategies to choose from (in order from most to @@ -140861,13 +142950,14 @@ static int rtreeFilter( ** is 'a', the second from the left 'b' etc. */ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + Rtree *pRtree = (Rtree*)tab; int rc = SQLITE_OK; int ii; + i64 nRow; /* Estimated rows returned by this scan */ int iIdx = 0; char zIdxStr[RTREE_MAX_DIMENSIONS*8+1]; memset(zIdxStr, 0, sizeof(zIdxStr)); - UNUSED_PARAMETER(tab); assert( pIdxInfo->idxStr==0 ); for(ii=0; iinConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){ @@ -140887,9 +142977,11 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ /* This strategy involves a two rowid lookups on an B-Tree structures ** and then a linear search of an R-Tree node. This should be ** considered almost as quick as a direct rowid lookup (for which - ** sqlite uses an internal cost of 0.0). + ** sqlite uses an internal cost of 0.0). It is expected to return + ** a single row. */ - pIdxInfo->estimatedCost = 10.0; + pIdxInfo->estimatedCost = 30.0; + setEstimatedRows(pIdxInfo, 1); return SQLITE_OK; } @@ -140918,8 +143010,11 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){ return SQLITE_NOMEM; } - assert( iIdx>=0 ); - pIdxInfo->estimatedCost = (2000000.0 / (double)(iIdx + 1)); + + nRow = pRtree->nRowEst / (iIdx + 1); + pIdxInfo->estimatedCost = (double)6.0 * (double)nRow; + setEstimatedRows(pIdxInfo, nRow); + return rc; } @@ -142394,6 +144489,37 @@ static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ return rc; } +/* +** This function populates the pRtree->nRowEst variable with an estimate +** of the number of rows in the virtual table. If possible, this is based +** on sqlite_stat1 data. Otherwise, use RTREE_DEFAULT_ROWEST. +*/ +static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ + const char *zSql = "SELECT stat FROM sqlite_stat1 WHERE tbl= ? || '_rowid'"; + sqlite3_stmt *p; + int rc; + i64 nRow = 0; + + rc = sqlite3_prepare_v2(db, zSql, -1, &p, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_text(p, 1, pRtree->zName, -1, SQLITE_STATIC); + if( sqlite3_step(p)==SQLITE_ROW ) nRow = sqlite3_column_int64(p, 0); + rc = sqlite3_finalize(p); + }else if( rc!=SQLITE_NOMEM ){ + rc = SQLITE_OK; + } + + if( rc==SQLITE_OK ){ + if( nRow==0 ){ + pRtree->nRowEst = RTREE_DEFAULT_ROWEST; + }else{ + pRtree->nRowEst = MAX(nRow, RTREE_MIN_ROWEST); + } + } + + return rc; +} + static sqlite3_module rtreeModule = { 0, /* iVersion */ rtreeCreate, /* xCreate - create a table */ @@ -142479,6 +144605,7 @@ static int rtreeSqlInit( appStmt[7] = &pRtree->pWriteParent; appStmt[8] = &pRtree->pDeleteParent; + rc = rtreeQueryStat1(db, pRtree); for(i=0; i **
  • The application must insure that the 1st parameter to sqlite3_exec() ** is a valid and open [database connection]. -**
  • The application must not close [database connection] specified by +**
  • The application must not close the [database connection] specified by ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. **
  • The application must not modify the SQL statement text passed into ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. @@ -447,7 +447,7 @@ SQLITE_API int sqlite3_exec( ** [sqlite3_extended_result_codes()] API. ** ** Some of the available extended result codes are listed here. -** One may expect the number of extended result codes will be expand +** One may expect the number of extended result codes will increase ** over time. Software that uses extended result codes should expect ** to see new result codes in future releases of SQLite. ** @@ -491,6 +491,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) #define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8)) +#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8)) #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8)) #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8)) @@ -501,6 +502,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_CONSTRAINT_TRIGGER (SQLITE_CONSTRAINT | (7<<8)) #define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8<<8)) #define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9<<8)) +#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10<<8)) #define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8)) #define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8)) #define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8)) @@ -557,7 +559,8 @@ SQLITE_API int sqlite3_exec( ** after reboot following a crash or power loss, the only bytes in a ** file that were written at the application level might have changed ** and that adjacent bytes, even bytes within the same sector are -** guaranteed to be unchanged. +** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN +** flag indicate that a file cannot be deleted when open. */ #define SQLITE_IOCAP_ATOMIC 0x00000001 #define SQLITE_IOCAP_ATOMIC512 0x00000002 @@ -788,15 +791,29 @@ struct sqlite3_io_methods { ** additional information. ** **
  • [[SQLITE_FCNTL_SYNC_OMITTED]] -** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by -** SQLite and sent to all VFSes in place of a call to the xSync method -** when the database connection has [PRAGMA synchronous] set to OFF.)^ -** Some specialized VFSes need this signal in order to operate correctly -** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most -** VFSes do not need this signal and should silently ignore this opcode. -** Applications should not call [sqlite3_file_control()] with this -** opcode as doing so may disrupt the operation of the specialized VFSes -** that do require it. +** No longer in use. +** +**
  • [[SQLITE_FCNTL_SYNC]] +** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and +** sent to the VFS immediately before the xSync method is invoked on a +** database file descriptor. Or, if the xSync method is not invoked +** because the user has configured SQLite with +** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place +** of the xSync method. In most cases, the pointer argument passed with +** this file-control is NULL. However, if the database file is being synced +** as part of a multi-database commit, the argument points to a nul-terminated +** string containing the transactions master-journal file name. VFSes that +** do not need this signal should silently ignore this opcode. Applications +** should not call [sqlite3_file_control()] with this opcode as doing so may +** disrupt the operation of the specialized VFSes that do require it. +** +**
  • [[SQLITE_FCNTL_COMMIT_PHASETWO]] +** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite +** and sent to the VFS after a transaction has been committed immediately +** but before the database is unlocked. VFSes that do not need this signal +** should silently ignore this opcode. Applications should not call +** [sqlite3_file_control()] with this opcode as doing so may disrupt the +** operation of the specialized VFSes that do require it. ** **
  • [[SQLITE_FCNTL_WIN32_AV_RETRY]] ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic @@ -912,6 +929,20 @@ struct sqlite3_io_methods { ** can be queried by passing in a pointer to a negative number. This ** file-control is used internally to implement [PRAGMA mmap_size]. ** +**
  • [[SQLITE_FCNTL_TRACE]] +** The [SQLITE_FCNTL_TRACE] file control provides advisory information +** to the VFS about what the higher layers of the SQLite stack are doing. +** This file control is used by some VFS activity tracing [shims]. +** The argument is a zero-terminated string. Higher layers in the +** SQLite stack may generate instances of this file control if +** the [SQLITE_USE_FCNTL_TRACE] compile-time option is enabled. +** +**
  • [[SQLITE_FCNTL_HAS_MOVED]] +** The [SQLITE_FCNTL_HAS_MOVED] file control interprets its argument as a +** pointer to an integer and it writes a boolean into that integer depending +** on whether or not the file has been renamed, moved, or deleted since it +** was first opened. +** ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -931,6 +962,10 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_BUSYHANDLER 15 #define SQLITE_FCNTL_TEMPFILENAME 16 #define SQLITE_FCNTL_MMAP_SIZE 18 +#define SQLITE_FCNTL_TRACE 19 +#define SQLITE_FCNTL_HAS_MOVED 20 +#define SQLITE_FCNTL_SYNC 21 +#define SQLITE_FCNTL_COMMIT_PHASETWO 22 /* ** CAPI3REF: Mutex Handle @@ -1375,7 +1410,7 @@ SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); ** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, ** that causes the corresponding memory allocation to fail. ** -** The xInit method initializes the memory allocator. (For example, +** The xInit method initializes the memory allocator. For example, ** it might allocate any require mutexes or initialize internal data ** structures. The xShutdown method is invoked (indirectly) by ** [sqlite3_shutdown()] and should deallocate any resources acquired @@ -1677,6 +1712,13 @@ struct sqlite3_mem_methods { ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ ** ^If either argument to this option is negative, then that argument is ** changed to its compile-time default. +** +** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] +**
    SQLITE_CONFIG_WIN32_HEAPSIZE +**
    ^This option is only available if SQLite is compiled for Windows +** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined. +** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value +** that specifies the maximum size of the created heap. ** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -1701,6 +1743,7 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ /* ** CAPI3REF: Database Connection Configuration Options @@ -1777,19 +1820,21 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); /* ** CAPI3REF: Last Insert Rowid ** -** ^Each entry in an SQLite table has a unique 64-bit signed +** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables) +** has a unique 64-bit signed ** integer key called the [ROWID | "rowid"]. ^The rowid is always available ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those ** names are not also used by explicitly declared columns. ^If ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** ^This routine returns the [rowid] of the most recent -** successful [INSERT] into the database from the [database connection] -** in the first argument. ^As of SQLite version 3.7.7, this routines -** records the last insert rowid of both ordinary tables and [virtual tables]. -** ^If no successful [INSERT]s -** have ever occurred on that database connection, zero is returned. +** ^The sqlite3_last_insert_rowid(D) interface returns the [rowid] of the +** most recent successful [INSERT] into a rowid table or [virtual table] +** on database connection D. +** ^Inserts into [WITHOUT ROWID] tables are not recorded. +** ^If no successful [INSERT]s into rowid tables +** have ever occurred on the database connection D, +** then sqlite3_last_insert_rowid(D) returns zero. ** ** ^(If an [INSERT] occurs within a trigger or within a [virtual table] ** method, then this routine will return the [rowid] of the inserted @@ -2355,11 +2400,13 @@ SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); ** applications to access the same PRNG for other purposes. ** ** ^A call to this routine stores N bytes of randomness into buffer P. +** ^If N is less than one, then P can be a NULL pointer. ** -** ^The first time this routine is invoked (either internally or by -** the application) the PRNG is seeded using randomness obtained -** from the xRandomness method of the default [sqlite3_vfs] object. -** ^On all subsequent invocations, the pseudo-randomness is generated +** ^If this routine has not been previously called or if the previous +** call had N less than one, then the PRNG is seeded using randomness +** obtained from the xRandomness method of the default [sqlite3_vfs] object. +** ^If the previous call to this routine had an N of 1 or more then +** the pseudo-randomness is generated ** internally and without recourse to the [sqlite3_vfs] xRandomness ** method. */ @@ -2519,6 +2566,7 @@ SQLITE_API int sqlite3_set_authorizer( #define SQLITE_FUNCTION 31 /* NULL Function Name */ #define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ #define SQLITE_COPY 0 /* No longer used */ +#define SQLITE_RECURSIVE 33 /* NULL NULL */ /* ** CAPI3REF: Tracing And Profiling Functions @@ -3099,7 +3147,6 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** choice of query plan if the parameter is the left-hand side of a [LIKE] ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. -** the **
  • ** */ @@ -3761,19 +3808,19 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** **
    NULL INTEGER Result is 0 **
    NULL FLOAT Result is 0.0 -**
    NULL TEXT Result is NULL pointer -**
    NULL BLOB Result is NULL pointer +**
    NULL TEXT Result is a NULL pointer +**
    NULL BLOB Result is a NULL pointer **
    INTEGER FLOAT Convert from integer to float **
    INTEGER TEXT ASCII rendering of the integer **
    INTEGER BLOB Same as INTEGER->TEXT -**
    FLOAT INTEGER Convert from float to integer +**
    FLOAT INTEGER [CAST] to INTEGER **
    FLOAT TEXT ASCII rendering of the float -**
    FLOAT BLOB Same as FLOAT->TEXT -**
    TEXT INTEGER Use atoi() -**
    TEXT FLOAT Use atof() +**
    FLOAT BLOB [CAST] to BLOB +**
    TEXT INTEGER [CAST] to INTEGER +**
    TEXT FLOAT [CAST] to REAL **
    TEXT BLOB No change -**
    BLOB INTEGER Convert to TEXT then use atoi() -**
    BLOB FLOAT Convert to TEXT then use atof() +**
    BLOB INTEGER [CAST] to INTEGER +**
    BLOB FLOAT [CAST] to REAL **
    BLOB TEXT Add a zero terminator if needed **
    ** )^ @@ -3829,7 +3876,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or ** [sqlite3_finalize()] is called. ^The memory space used to hold strings ** and BLOBs is freed automatically. Do not pass the pointers returned -** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into +** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** ** ^(If a memory allocation error occurs during the evaluation of any @@ -3938,15 +3985,24 @@ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); ** ** ^The fourth parameter, eTextRep, specifies what ** [SQLITE_UTF8 | text encoding] this SQL function prefers for -** its parameters. Every SQL function implementation must be able to work -** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be -** more efficient with one encoding than another. ^An application may -** invoke sqlite3_create_function() or sqlite3_create_function16() multiple -** times with the same function but with different values of eTextRep. +** its parameters. The application should set this parameter to +** [SQLITE_UTF16LE] if the function implementation invokes +** [sqlite3_value_text16le()] on an input, or [SQLITE_UTF16BE] if the +** implementation invokes [sqlite3_value_text16be()] on an input, or +** [SQLITE_UTF16] if [sqlite3_value_text16()] is used, or [SQLITE_UTF8] +** otherwise. ^The same SQL function may be registered multiple times using +** different preferred text encodings, with different implementations for +** each encoding. ** ^When multiple implementations of the same function are available, SQLite ** will pick the one that involves the least amount of data conversion. -** If there is only a single implementation which does not care what text -** encoding is used, then the fourth argument should be [SQLITE_ANY]. +** +** ^The fourth parameter may optionally be ORed with [SQLITE_DETERMINISTIC] +** to signal that the function will always return the same result given +** the same inputs within a single SQL statement. Most SQL functions are +** deterministic. The built-in [random()] SQL function is an example of a +** function that is not deterministic. The SQLite query planner is able to +** perform additional optimizations on deterministic functions, so use +** of the [SQLITE_DETERMINISTIC] flag is recommended where possible. ** ** ^(The fifth parameter is an arbitrary pointer. The implementation of the ** function can gain access to this pointer using [sqlite3_user_data()].)^ @@ -4032,9 +4088,19 @@ SQLITE_API int sqlite3_create_function_v2( #define SQLITE_UTF16LE 2 #define SQLITE_UTF16BE 3 #define SQLITE_UTF16 4 /* Use native byte order */ -#define SQLITE_ANY 5 /* sqlite3_create_function only */ +#define SQLITE_ANY 5 /* Deprecated */ #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ +/* +** CAPI3REF: Function Flags +** +** These constants may be ORed together with the +** [SQLITE_UTF8 | preferred text encoding] as the fourth argument +** to [sqlite3_create_function()], [sqlite3_create_function16()], or +** [sqlite3_create_function_v2()]. +*/ +#define SQLITE_DETERMINISTIC 0x800 + /* ** CAPI3REF: Deprecated Functions ** DEPRECATED @@ -4806,12 +4872,13 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ** ^The sqlite3_update_hook() interface registers a callback function ** with the [database connection] identified by the first argument -** to be invoked whenever a row is updated, inserted or deleted. +** to be invoked whenever a row is updated, inserted or deleted in +** a rowid table. ** ^Any callback set by a previous call to this function ** for the same database connection is overridden. ** ** ^The second argument is a pointer to the function to invoke when a -** row is updated, inserted or deleted. +** row is updated, inserted or deleted in a rowid table. ** ^The first argument to the callback is a copy of the third argument ** to sqlite3_update_hook(). ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], @@ -4824,6 +4891,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ** ^(The update hook is not invoked when internal system tables are ** modified (i.e. sqlite_master and sqlite_sequence).)^ +** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. ** ** ^In the current implementation, the update hook ** is not invoked when duplication rows are deleted because of an @@ -4905,8 +4973,8 @@ SQLITE_API int sqlite3_release_memory(int); ** ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap ** memory as possible from database connection D. Unlike the -** [sqlite3_release_memory()] interface, this interface is effect even -** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is +** [sqlite3_release_memory()] interface, this interface is in effect even +** when the [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is ** omitted. ** ** See also: [sqlite3_release_memory()] @@ -5281,10 +5349,22 @@ struct sqlite3_module { ** the correct order to satisfy the ORDER BY clause so that no separate ** sorting step is required. ** -** ^The estimatedCost value is an estimate of the cost of doing the -** particular lookup. A full scan of a table with N entries should have -** a cost of N. A binary search of a table of N entries should have a -** cost of approximately log(N). +** ^The estimatedCost value is an estimate of the cost of a particular +** strategy. A cost of N indicates that the cost of the strategy is similar +** to a linear scan of an SQLite table with N rows. A cost of log(N) +** indicates that the expense of the operation is similar to that of a +** binary search on a unique indexed field of an SQLite table with N rows. +** +** ^The estimatedRows value is an estimate of the number of rows that +** will be returned by the strategy. +** +** IMPORTANT: The estimatedRows field was added to the sqlite3_index_info +** structure for SQLite version 3.8.2. If a virtual table extension is +** used with an SQLite version earlier than 3.8.2, the results of attempting +** to read or write the estimatedRows field are undefined (but are likely +** to included crashing the application). The estimatedRows field should +** therefore only be used if [sqlite3_libversion_number()] returns a +** value greater than or equal to 3008002. */ struct sqlite3_index_info { /* Inputs */ @@ -5309,7 +5389,9 @@ struct sqlite3_index_info { char *idxStr; /* String, possibly obtained from sqlite3_malloc */ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ int orderByConsumed; /* True if output is already ordered */ - double estimatedCost; /* Estimated cost of using this index */ + double estimatedCost; /* Estimated cost of using this index */ + /* Fields below are only available in SQLite 3.8.2 and later */ + sqlite3_int64 estimatedRows; /* Estimated number of rows returned */ }; /* @@ -5513,6 +5595,9 @@ typedef struct sqlite3_blob sqlite3_blob; ** interface. Use the [UPDATE] SQL command to change the size of a ** blob. ** +** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID] +** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables. +** ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces ** and the built-in [zeroblob] SQL function can be used, if desired, ** to create an empty, zero-filled blob in which to read or write using @@ -6036,7 +6121,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 #define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 #define SQLITE_TESTCTRL_EXPLAIN_STMT 19 -#define SQLITE_TESTCTRL_LAST 19 +#define SQLITE_TESTCTRL_NEVER_CORRUPT 20 +#define SQLITE_TESTCTRL_LAST 20 /* ** CAPI3REF: SQLite Runtime Status diff --git a/TMessagesProj/libs/armeabi-v7a/libtmessages.so b/TMessagesProj/libs/armeabi-v7a/libtmessages.so index 3d4c9c5c4469a4d35ac69aeb000fcd53350f55f0..2cd5e4e54adda8602b5d2e34d8c934a93f4962c1 100755 GIT binary patch delta 418525 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 y*|stS)kuBHptDao)0(^^z2EB%EW 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όN;(XB4{?o}}F)@RfMRX8zh`Gc(;(B5Mv5>f# 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%0A%?u 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

    7N>if<#TNNfPprZpXHOs$!V!hXA)18a~jw0?gHO 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 O9%c#Bci{SrdHp{_hO%b> diff --git a/TMessagesProj/libs/armeabi/libtmessages.so b/TMessagesProj/libs/armeabi/libtmessages.so index 66eb96004f1d4231ce6506624bdca7bbda87b86a..adc126c73332ccc9c55ab522f808e4f46730a4e7 100755 GIT binary patch delta 365557 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

    fa;Kh2mHY>@<6xfPCaVH(Ts@QeNA0`FUW|nQ zySp(g3;JlcH*QlW$$|U>fp{%YWV?_u@*it7>7N=AE2ZT8=oXS6U}6JKiOk?cmcc`f zQ=-u&7#?6U6pM$1gAXv;*c-T&_G+Wf%sdIt$GjKpz)Kc2nhz3GaRV~MiCyeT;pYdK zw6P}f++b+-R0ypJMJN6}RFR zghAmEduSa%PN@EW+DlN(zX$uR*!FKX%N#<_9K2091y*ojS~_k@s>CqpBS>e`K-=IJ zYSWo0(0c4bdpe^@Jt?MRs+GgPWdA+SfUm|EuBT26ffaqSax~VE~w`+;nPlv zpF_=?Ol$eK@6qs0(ncD_81|(2^1uC=?83^qjK&w!uR9KmMW48YSLQMiipRQ-@14u+ z^;euqKR$agbCy;tNzaYXA3-DoO?JVb?SGV_^f1zi!o^pZi8L)d_B0bBq;6zJ3im&a80;_NYt_??KchmL+FBC@wUHSoe7+gs zY8Aq#xSDrzR@4k%ia-T(#LWh%-z@x0*eHLEc zC9$F){Dqfa!k=HCWi<3C;f)s&L-6xV^XSz7WO}Dm08jw6@&#lF)us`w&oc$W)aRI+ zLh*C(-Txd?zkCbxxNv?86UN8|mMG}AAU3JQn>WDKYuk_(o^^bL&D21UC_HKYbw6ro5iByvNUSizBa#B#u zTbVpLCsIqiF17ltus}Kc3&o@wUn5@+y^Q3hNexhta{m_){@DCTHFrKkoNvR|l})hS zz%!%5Bt!T8Y+ybQT^ZpJ-hpxQ+Wpuxnk$=H~n2*B~ zPxI|x+IfGQhflm>=heWpPCFkAT-jykHNcCv>^wGK)OjGG_w~y3#Je&*4%pV#W=sH* za0rrc2ois~VY>cDnZD&7ao=jZ2qf-#(@(O)QXmPa9Z13AB2Wpu4DXj4OeyYNK&8?cm#56~;bbDeiv$r-x;HU58&3dR6OG0+m4i1Rz)m2E zuv@}rV=_a`O~yhATa8C0Y%>lF)8l+dcuJ#jgzRqsNHUb`>)>?=FCWOq;iC{A3BVFy zB5*5^M6^@FW@F>9`7)3cegCjI*-sA83?vDT^C#G3G)Rbq0Q+vCWJeNutMQBWfyIdM0I&pj6u22U5HTF_c!EvFdLADJSR9OmN7S`8N_LPeVT*Ck zuz43S7w+<+;SP0JsgvE+6GWTol*~=W#2DFr50I2(2Qec-Y^;OVz`t$+p|={(OW0)O z{o~|-G{Dvpqp^e_B4`_?n4|dq)KrsAjhOl%$CFL2a>jOU=HX!J}%(n zJUmT(>s z`z9J2keK@kqOsQJI{1Fj_bigl14}XRz^qv&XCMvO3v(V&>b^iyCAoP#>IxP<4-<

    0&uSSsNUD9?YA8ZJ6wWH#+zwFb9{&bbes79B}%x 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 YY3<$ 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®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

    uQYXyOoG2?Ih$0DdDK0nshgl&hg7|_OlC3 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

    &&Ho+@ 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�`h>|D#azTm779RDFY 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