Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Update the built-in SQLite to the latest 3.49.0 beta. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
27f64e15e6157c39c9773ef5c61104d1 |
User & Date: | drh 2025-02-03 16:57:49.394 |
Context
2025-02-18
| ||
12:30 | Update the built-in SQLite to the latest trunk version including all fixes. (check-in: ab08ae6abc user: drh tags: trunk) | |
2025-02-03
| ||
16:57 | Update the built-in SQLite to the latest 3.49.0 beta. (check-in: 27f64e15e6 user: drh tags: trunk) | |
2025-01-14
| ||
15:27 | Update the built-in SQLite implementation to version 3.48.0. (check-in: 7225deab5d user: drh tags: trunk) | |
Changes
Changes to tclsqlite3.c.
1 2 3 | #ifndef USE_SYSTEM_SQLITE /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #ifndef USE_SYSTEM_SQLITE /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite ** version 3.49.0. 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 ** of 5% or more are commonly seen when SQLite is compiled as a single ** translation unit. ** ** This file is all you need to compile SQLite. To use SQLite in other ** programs, you need this file and the "sqlite3.h" header file that defines ** the programming interface to the SQLite library. (If you do not have ** the "sqlite3.h" header file at hand, you will find a copy embedded within ** the text of this file. Search for "Begin file sqlite3.h" to find the start ** of the embedded sqlite3.h header file.) Additional code files may be needed ** if you want a wrapper to interface SQLite with your choice of programming ** language. The code for the "sqlite3" command-line shell is also in a ** separate file. This file contains only code for the core SQLite library. ** ** The content in this amalgamation comes from Fossil check-in ** d693c2dddbd10a2e0b77893b04b11502e30b with changes in files: ** ** */ #ifndef SQLITE_AMALGAMATION #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 #ifndef SQLITE_PRIVATE |
︙ | ︙ | |||
462 463 464 465 466 467 468 | ** been edited in any way since it was last checked in, then the last ** four hexadecimal digits of the hash may be modified. ** ** See also: [sqlite3_libversion()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ | | | | | 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 | ** been edited in any way since it was last checked in, then the last ** four hexadecimal digits of the hash may be modified. ** ** See also: [sqlite3_libversion()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "3.49.0" #define SQLITE_VERSION_NUMBER 3049000 #define SQLITE_SOURCE_ID "2025-02-03 14:55:56 d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9" /* ** CAPI3REF: Run-Time Library Version Numbers ** KEYWORDS: sqlite3_version sqlite3_sourceid ** ** These interfaces provide the same information as the [SQLITE_VERSION], ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros |
︙ | ︙ | |||
2539 2540 2541 2542 2543 2544 2545 | ** the call worked. ^The [sqlite3_db_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** ** <dl> ** [[SQLITE_DBCONFIG_LOOKASIDE]] ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt> | | | > > > > | 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 | ** the call worked. ^The [sqlite3_db_config()] interface will return a ** non-zero [error code] if a discontinued or unsupported configuration option ** is invoked. ** ** <dl> ** [[SQLITE_DBCONFIG_LOOKASIDE]] ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt> ** <dd> The SQLITE_DBCONFIG_LOOKASIDE option is used to adjust the ** configuration of the lookaside memory allocator within a database ** connection. ** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are <i>not</i> ** in the [DBCONFIG arguments|usual format]. ** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two. ** ^The first argument (the third parameter to [sqlite3_db_config()] is a ** pointer to a memory buffer to use for lookaside memory. ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb ** may be NULL in which case SQLite will allocate the ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the ** size of each lookaside buffer slot. ^The third argument is the number of ** slots. The size of the buffer in the first argument must be greater than |
︙ | ︙ | |||
2563 2564 2565 2566 2567 2568 2569 | ** Any attempt to change the lookaside memory configuration when lookaside ** memory is in use leaves the configuration unchanged and returns ** [SQLITE_BUSY].)^</dd> ** ** [[SQLITE_DBCONFIG_ENABLE_FKEY]] ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt> ** <dd> ^This option is used to enable or disable the enforcement of | | > | 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 | ** Any attempt to change the lookaside memory configuration when lookaside ** memory is in use leaves the configuration unchanged and returns ** [SQLITE_BUSY].)^</dd> ** ** [[SQLITE_DBCONFIG_ENABLE_FKEY]] ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt> ** <dd> ^This option is used to enable or disable the enforcement of ** [foreign key constraints]. This is the same setting that is ** enabled or disabled by the [PRAGMA foreign_keys] statement. ** The first argument is an integer which is 0 to disable FK enforcement, ** positive to enable FK enforcement or negative to leave FK enforcement ** unchanged. The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether FK enforcement is off or on ** following this call. The second parameter may be a NULL pointer, in ** which case the FK enforcement setting is not reported back. </dd> ** |
︙ | ︙ | |||
2585 2586 2587 2588 2589 2590 2591 | ** is written 0 or 1 to indicate whether triggers are disabled or enabled ** following this call. The second parameter may be a NULL pointer, in ** which case the trigger setting is not reported back. ** ** <p>Originally this option disabled all triggers. ^(However, since ** SQLite version 3.35.0, TEMP triggers are still allowed even if ** this option is off. So, in other words, this option now only disables | | | | | | > > | | | > | | > | | > | | | | 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 | ** is written 0 or 1 to indicate whether triggers are disabled or enabled ** following this call. The second parameter may be a NULL pointer, in ** which case the trigger setting is not reported back. ** ** <p>Originally this option disabled all triggers. ^(However, since ** SQLite version 3.35.0, TEMP triggers are still allowed even if ** this option is off. So, in other words, this option now only disables ** triggers in the main database schema or in the schemas of [ATTACH]-ed ** databases.)^ </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_VIEW]] ** <dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt> ** <dd> ^This option is used to enable or disable [CREATE VIEW | views]. ** There must be two additional arguments. ** The first argument is an integer which is 0 to disable views, ** positive to enable views or negative to leave the setting unchanged. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether views are disabled or enabled ** following this call. The second parameter may be a NULL pointer, in ** which case the view setting is not reported back. ** ** <p>Originally this option disabled all views. ^(However, since ** SQLite version 3.35.0, TEMP views are still allowed even if ** this option is off. So, in other words, this option now only disables ** views in the main database schema or in the schemas of ATTACH-ed ** databases.)^ </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] ** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt> ** <dd> ^This option is used to enable or disable the ** [fts3_tokenizer()] function which is part of the ** [FTS3] full-text search engine extension. ** There must be two additional arguments. ** The first argument is an integer which is 0 to disable fts3_tokenizer() or ** positive to enable fts3_tokenizer() or negative to leave the setting ** unchanged. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled ** following this call. The second parameter may be a NULL pointer, in ** which case the new setting is not reported back. </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]] ** <dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt> ** <dd> ^This option is used to enable or disable the [sqlite3_load_extension()] ** interface independently of the [load_extension()] SQL function. ** The [sqlite3_enable_load_extension()] API enables or disables both the ** C-API [sqlite3_load_extension()] and the SQL function [load_extension()]. ** There must be two additional arguments. ** When the first argument to this interface is 1, then only the C-API is ** enabled and the SQL function remains disabled. If the first argument to ** this interface is 0, then both the C-API and the SQL function are disabled. ** If the first argument is -1, then no changes are made to state of either the ** C-API or the SQL function. ** The second parameter is a pointer to an integer into which ** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface ** is disabled or enabled following this call. The second parameter may ** be a NULL pointer, in which case the new setting is not reported back. ** </dd> ** ** [[SQLITE_DBCONFIG_MAINDBNAME]] <dt>SQLITE_DBCONFIG_MAINDBNAME</dt> ** <dd> ^This option is used to change the name of the "main" database ** schema. This option does not follow the ** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format]. ** This option takes exactly one argument, which ust be a pointer ** to a constant UTF8 string which will become the new schema name ** in place of "main". ^SQLite does not make a copy of the new main ** schema name string, so the application must ensure that the argument ** passed into SQLITE_DBCONFIG MAINDBNAME is unchanged ** until after the database connection closes. ** </dd> ** ** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]] ** <dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt> ** <dd> Usually, when a database in [WAL mode] is closed or detached from a ** database handle, SQLite checks if if there are other connections to the ** same database, and if there are no other database connection (if the ** connection being closed is the last open connection to the database), ** then SQLite performs a [checkpoint] before closing the connection and ** deletes the WAL file. The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can ** be used to override that behavior. The first parameter passed to this ** operation is an integer - positive to disable checkpoints-on-close, or ** zero (the default) to enable them, and negative to leave the setting unchanged. ** The second parameter is a pointer to an integer ** into which is written 0 or 1 to indicate whether checkpoints-on-close ** have been disabled - 0 if they are not disabled, 1 if they are. ** </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_QPSG]] <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt> ** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates |
︙ | ︙ | |||
2816 2817 2818 2819 2820 2821 2822 | ** <dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt> ** <dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in ** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears ** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() ** statistics. For statistics to be collected, the flag must be set on ** the database handle both when the SQL statement is prepared and when it ** is stepped. The flag is set (collection of statistics is enabled) | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 | ** <dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt> ** <dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in ** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears ** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() ** statistics. For statistics to be collected, the flag must be set on ** the database handle both when the SQL statement is prepared and when it ** is stepped. The flag is set (collection of statistics is enabled) ** by default. <p>This option takes two arguments: an integer and a pointer to ** an integer.. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the statement scanstatus option. If the second argument ** is not NULL, then the value of the statement scanstatus setting after ** processing the first argument is written into the integer that the second ** argument points to. ** </dd> ** ** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]] ** <dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt> ** <dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order ** in which tables and indexes are scanned so that the scans start at the end ** and work toward the beginning rather than starting at the beginning and ** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the ** same as setting [PRAGMA reverse_unordered_selects]. <p>This option takes ** two arguments which are an integer and a pointer to an integer. The first ** argument is 1, 0, or -1 to enable, disable, or leave unchanged the ** reverse scan order flag, respectively. If the second argument is not NULL, ** then 0 or 1 is written into the integer that the second argument points to ** depending on if the reverse scan order flag is set after processing the ** first argument. ** </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]] ** <dt>SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE</dt> ** <dd>The SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE option enables or disables ** the ability of the [ATTACH DATABASE] SQL command to create a new database ** file if the database filed named in the ATTACH command does not already ** exist. This ability of ATTACH to create a new database is enabled by ** default. Applications can disable or reenable the ability for ATTACH to ** create new database files using this DBCONFIG option.<p> ** This option takes two arguments which are an integer and a pointer ** to an integer. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the attach-create flag, respectively. If the second ** argument is not NULL, then 0 or 1 is written into the integer that the ** second argument points to depending on if the attach-create flag is set ** after processing the first argument. ** </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]] ** <dt>SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE</dt> ** <dd>The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the ** ability of the [ATTACH DATABASE] SQL command to open a database for writing. ** This capability is enabled by default. Applications can disable or ** reenable this capability using the current DBCONFIG option. If the ** the this capability is disabled, the [ATTACH] command will still work, ** but the database will be opened read-only. If this option is disabled, ** then the ability to create a new database using [ATTACH] is also disabled, ** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE] ** option.<p> ** This option takes two arguments which are an integer and a pointer ** to an integer. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the ability to ATTACH another database for writing, ** respectively. If the second argument is not NULL, then 0 or 1 is written ** into the integer to which the second argument points, depending on whether ** the ability to ATTACH a read/write database is enabled or disabled ** after processing the first argument. ** </dd> ** ** [[SQLITE_DBCONFIG_ENABLE_COMMENTS]] ** <dt>SQLITE_DBCONFIG_ENABLE_COMMENTS</dt> ** <dd>The SQLITE_DBCONFIG_ENABLE_COMMENTS option enables or disables the ** ability to include comments in SQL text. Comments are enabled by default. ** An application can disable or reenable comments in SQL text using this ** DBCONFIG option.<p> ** This option takes two arguments which are an integer and a pointer ** to an integer. The first argument is 1, 0, or -1 to enable, disable, or ** leave unchanged the ability to use comments in SQL text, ** respectively. If the second argument is not NULL, then 0 or 1 is written ** into the integer that the second argument points to depending on if ** comments are allowed in SQL text after processing the first argument. ** </dd> ** ** </dl> ** ** [[DBCONFIG arguments]] <h3>Arguments To SQLITE_DBCONFIG Options</h3> ** ** <p>Most of the SQLITE_DBCONFIG options take two arguments: an integer ** and a pointer to an integer. If the first integer argument is 1, then ** the option becomes enabled. If the first integer argument is 0, then the ** option is disabled. If the first argument is -1, then the option setting ** is unchanged. The second argument, the pointer to an integer, may be NULL. ** If the second argument is not NULL, then a value of 0 or 1 is written into ** the integer to which the second argument points, depending on whether the ** setting is disabled or enabled after applying any changes specified by ** the first argument. ** ** <p>While most SQLITE_DBCONFIG options use the argument format ** described in the previous paragraph, the [SQLITE_DBCONFIG_MAINDBNAME] ** and [SQLITE_DBCONFIG_LOOKASIDE] options are different. See the ** documentation of those exceptional options for details. */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ |
︙ | ︙ | |||
2861 2862 2863 2864 2865 2866 2867 | #define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */ #define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ #define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ #define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ | > > > | | 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 | #define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */ #define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ #define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ #define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE 1020 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE 1021 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_COMMENTS 1022 /* int int* */ #define SQLITE_DBCONFIG_MAX 1022 /* Largest DBCONFIG */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes ** METHOD: sqlite3 ** ** ^The sqlite3_extended_result_codes() routine enables or disables the ** [extended result codes] feature of SQLite. ^The extended result |
︙ | ︙ | |||
11064 11065 11066 11067 11068 11069 11070 | ** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Serialize a database ** | | | > | 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 | ** [SQLITE_ENABLE_SNAPSHOT] option. */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); /* ** CAPI3REF: Serialize a database ** ** The sqlite3_serialize(D,S,P,F) interface returns a pointer to ** memory that is a serialization of the S database on ** [database connection] D. If S is a NULL pointer, the main database is used. ** If P is not a NULL pointer, then the size of the database in bytes ** is written into *P. ** ** For an ordinary on-disk database file, the serialization is just a ** copy of the disk file. For an in-memory database or a "TEMP" database, ** the serialization is the same sequence of bytes which would be written ** to disk if that database where backed up to disk. |
︙ | ︙ | |||
14874 14875 14876 14877 14878 14879 14880 | #define TK_SELECT_COLUMN 178 #define TK_IF_NULL_ROW 179 #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 #define TK_QNUMBER 183 #define TK_SPACE 184 | > | | 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 | #define TK_SELECT_COLUMN 178 #define TK_IF_NULL_ROW 179 #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 #define TK_QNUMBER 183 #define TK_SPACE 184 #define TK_COMMENT 185 #define TK_ILLEGAL 186 /************** End of parse.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> |
︙ | ︙ | |||
15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 | ** ** The LogEst can be negative to indicate fractional values. ** Examples: ** ** 0.5 -> -10 0.1 -> -33 0.0625 -> -40 */ typedef INT16_TYPE LogEst; /* ** Set the SQLITE_PTRSIZE macro to the number of bytes in a pointer */ #ifndef SQLITE_PTRSIZE # if defined(__SIZEOF_POINTER__) # define SQLITE_PTRSIZE __SIZEOF_POINTER__ | > > | 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 | ** ** The LogEst can be negative to indicate fractional values. ** Examples: ** ** 0.5 -> -10 0.1 -> -33 0.0625 -> -40 */ typedef INT16_TYPE LogEst; #define LOGEST_MIN (-32768) #define LOGEST_MAX (32767) /* ** Set the SQLITE_PTRSIZE macro to the number of bytes in a pointer */ #ifndef SQLITE_PTRSIZE # if defined(__SIZEOF_POINTER__) # define SQLITE_PTRSIZE __SIZEOF_POINTER__ |
︙ | ︙ | |||
15396 15397 15398 15399 15400 15401 15402 | ** ** (---any--) Top-level block structure ** 0x-------F High-level debug messages ** 0x----FFF- More detail ** 0xFFFF---- Low-level debug messages ** ** 0x00000001 Code generation | | > > | 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 | ** ** (---any--) Top-level block structure ** 0x-------F High-level debug messages ** 0x----FFF- More detail ** 0xFFFF---- Low-level debug messages ** ** 0x00000001 Code generation ** 0x00000002 Solver (Use 0x40000 for less detail) ** 0x00000004 Solver costs ** 0x00000008 WhereLoop inserts ** ** 0x00000010 Display sqlite3_index_info xBestIndex calls ** 0x00000020 Range an equality scan metrics ** 0x00000040 IN operator decisions ** 0x00000080 WhereLoop cost adjustments ** 0x00000100 ** 0x00000200 Covering index decisions ** 0x00000400 OR optimization ** 0x00000800 Index scanner ** 0x00001000 More details associated with code generation ** 0x00002000 ** 0x00004000 Show all WHERE terms at key points ** 0x00008000 Show the full SELECT statement at key places ** ** 0x00010000 Show more detail when printing WHERE terms ** 0x00020000 Show WHERE terms returned from whereScanNext() ** 0x00040000 Solver overview messages ** 0x00080000 Star-query heuristic */ /* ** An instance of the following structure is used to store the busy-handler ** callback for a given sqlite handle. ** |
︙ | ︙ | |||
16707 16708 16709 16710 16711 16712 16713 16714 16715 16716 16717 16718 16719 16720 | /* ** A signature for a reusable subroutine that materializes the RHS of ** an IN operator. */ struct SubrtnSig { int selId; /* SELECT-id for the SELECT statement on the RHS */ char *zAff; /* Affinity of the overall IN expression */ int iTable; /* Ephemeral table generated by the subroutine */ int iAddr; /* Subroutine entry address */ int regReturn; /* Register used to hold return address */ }; /* | > | 16793 16794 16795 16796 16797 16798 16799 16800 16801 16802 16803 16804 16805 16806 16807 | /* ** A signature for a reusable subroutine that materializes the RHS of ** an IN operator. */ struct SubrtnSig { int selId; /* SELECT-id for the SELECT statement on the RHS */ u8 bComplete; /* True if fully coded and available for reusable */ char *zAff; /* Affinity of the overall IN expression */ int iTable; /* Ephemeral table generated by the subroutine */ int iAddr; /* Subroutine entry address */ int regReturn; /* Register used to hold return address */ }; /* |
︙ | ︙ | |||
18037 18038 18039 18040 18041 18042 18043 18044 18045 18046 18047 18048 18049 18050 | #define SQLITE_EnableView 0x80000000 /* Enable the use of views */ #define SQLITE_CountRows HI(0x00001) /* Count rows changed by INSERT, */ /* DELETE, or UPDATE and return */ /* the count using a callback. */ #define SQLITE_CorruptRdOnly HI(0x00002) /* Prohibit writes due to error */ #define SQLITE_ReadUncommit HI(0x00004) /* READ UNCOMMITTED in shared-cache */ #define SQLITE_FkNoAction HI(0x00008) /* Treat all FK as NO ACTION */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG #define SQLITE_SqlTrace HI(0x0100000) /* Debug print SQL as it executes */ #define SQLITE_VdbeListing HI(0x0200000) /* Debug listings of VDBE progs */ #define SQLITE_VdbeTrace HI(0x0400000) /* True to trace VDBE execution */ #define SQLITE_VdbeAddopTrace HI(0x0800000) /* Trace sqlite3VdbeAddOp() calls */ | > > > | 18124 18125 18126 18127 18128 18129 18130 18131 18132 18133 18134 18135 18136 18137 18138 18139 18140 | #define SQLITE_EnableView 0x80000000 /* Enable the use of views */ #define SQLITE_CountRows HI(0x00001) /* Count rows changed by INSERT, */ /* DELETE, or UPDATE and return */ /* the count using a callback. */ #define SQLITE_CorruptRdOnly HI(0x00002) /* Prohibit writes due to error */ #define SQLITE_ReadUncommit HI(0x00004) /* READ UNCOMMITTED in shared-cache */ #define SQLITE_FkNoAction HI(0x00008) /* Treat all FK as NO ACTION */ #define SQLITE_AttachCreate HI(0x00010) /* ATTACH allowed to create new dbs */ #define SQLITE_AttachWrite HI(0x00020) /* ATTACH allowed to open for write */ #define SQLITE_Comments HI(0x00040) /* Enable SQL comments */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG #define SQLITE_SqlTrace HI(0x0100000) /* Debug print SQL as it executes */ #define SQLITE_VdbeListing HI(0x0200000) /* Debug listings of VDBE progs */ #define SQLITE_VdbeTrace HI(0x0400000) /* True to trace VDBE execution */ #define SQLITE_VdbeAddopTrace HI(0x0800000) /* Trace sqlite3VdbeAddOp() calls */ |
︙ | ︙ | |||
18096 18097 18098 18099 18100 18101 18102 18103 18104 18105 18106 18107 18108 18109 | #define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */ /* TH3 expects this value ^^^^^^^^^^ See flatten04.test */ #define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */ #define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */ #define SQLITE_NullUnusedCols 0x04000000 /* NULL unused columns in subqueries */ #define SQLITE_OnePass 0x08000000 /* Single-pass DELETE and UPDATE */ #define SQLITE_OrderBySubq 0x10000000 /* ORDER BY in subquery helps outer */ #define SQLITE_AllOpts 0xffffffff /* All optimizations */ /* ** Macros for testing whether or not optimizations are enabled or disabled. */ #define OptimizationDisabled(db, mask) (((db)->dbOptFlags&(mask))!=0) #define OptimizationEnabled(db, mask) (((db)->dbOptFlags&(mask))==0) | > | 18186 18187 18188 18189 18190 18191 18192 18193 18194 18195 18196 18197 18198 18199 18200 | #define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */ /* TH3 expects this value ^^^^^^^^^^ See flatten04.test */ #define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */ #define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */ #define SQLITE_NullUnusedCols 0x04000000 /* NULL unused columns in subqueries */ #define SQLITE_OnePass 0x08000000 /* Single-pass DELETE and UPDATE */ #define SQLITE_OrderBySubq 0x10000000 /* ORDER BY in subquery helps outer */ #define SQLITE_StarQuery 0x20000000 /* Heurists for star queries */ #define SQLITE_AllOpts 0xffffffff /* All optimizations */ /* ** Macros for testing whether or not optimizations are enabled or disabled. */ #define OptimizationDisabled(db, mask) (((db)->dbOptFlags&(mask))!=0) #define OptimizationEnabled(db, mask) (((db)->dbOptFlags&(mask))==0) |
︙ | ︙ | |||
19425 19426 19427 19428 19429 19430 19431 | ** ** INSERT INTO t(a,b,c) ... ** ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k. */ struct IdList { int nId; /* Number of identifiers on the list */ | < < < < < | 19516 19517 19518 19519 19520 19521 19522 19523 19524 19525 19526 19527 19528 19529 19530 19531 | ** ** INSERT INTO t(a,b,c) ... ** ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k. */ struct IdList { int nId; /* Number of identifiers on the list */ struct IdList_item { char *zName; /* Name of the identifier */ } a[1]; }; /* ** Allowed values for IdList.eType, which determines which value of the a.u4 ** is valid. */ |
︙ | ︙ | |||
23578 23579 23580 23581 23582 23583 23584 23585 23586 23587 23588 23589 23590 23591 | int szMalloc; /* Size of the zMalloc allocation */ u32 uTemp; /* Transient storage for serial_type in OP_MakeRecord */ char *zMalloc; /* Space to hold MEM_Str or MEM_Blob if szMalloc>0 */ void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */ #ifdef SQLITE_DEBUG Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ u16 mScopyFlags; /* flags value immediately after the shallow copy */ #endif }; /* ** Size of struct Mem not including the Mem.zMalloc member or anything that ** follows. */ | > | 23664 23665 23666 23667 23668 23669 23670 23671 23672 23673 23674 23675 23676 23677 23678 | int szMalloc; /* Size of the zMalloc allocation */ u32 uTemp; /* Transient storage for serial_type in OP_MakeRecord */ char *zMalloc; /* Space to hold MEM_Str or MEM_Blob if szMalloc>0 */ void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */ #ifdef SQLITE_DEBUG Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ u16 mScopyFlags; /* flags value immediately after the shallow copy */ u8 bScopy; /* The pScopyFrom of some other Mem *might* point here */ #endif }; /* ** Size of struct Mem not including the Mem.zMalloc member or anything that ** follows. */ |
︙ | ︙ | |||
24676 24677 24678 24679 24680 24681 24682 24683 24684 24685 24686 24687 24688 24689 | zDate++; while( sqlite3Isdigit(*zDate) ){ ms = ms*10.0 + *zDate - '0'; rScale *= 10.0; zDate++; } ms /= rScale; } }else{ s = 0; } p->validJD = 0; p->rawS = 0; p->validHMS = 1; | > > > | 24763 24764 24765 24766 24767 24768 24769 24770 24771 24772 24773 24774 24775 24776 24777 24778 24779 | zDate++; while( sqlite3Isdigit(*zDate) ){ ms = ms*10.0 + *zDate - '0'; rScale *= 10.0; zDate++; } ms /= rScale; /* Truncate to avoid problems with sub-milliseconds ** rounding. https://sqlite.org/forum/forumpost/766a2c9231 */ if( ms>0.999 ) ms = 0.999; } }else{ s = 0; } p->validJD = 0; p->rawS = 0; p->validHMS = 1; |
︙ | ︙ | |||
25883 25884 25885 25886 25887 25888 25889 | case 'd': /* Fall thru */ case 'e': { sqlite3_str_appendf(&sRes, cf=='d' ? "%02d" : "%2d", x.D); break; } case 'f': { /* Fractional seconds. (Non-standard) */ double s = x.s; | | | 25973 25974 25975 25976 25977 25978 25979 25980 25981 25982 25983 25984 25985 25986 25987 | case 'd': /* Fall thru */ case 'e': { sqlite3_str_appendf(&sRes, cf=='d' ? "%02d" : "%2d", x.D); break; } case 'f': { /* Fractional seconds. (Non-standard) */ double s = x.s; if( NEVER(s>59.999) ) s = 59.999; sqlite3_str_appendf(&sRes, "%06.3f", s); break; } case 'F': { sqlite3_str_appendf(&sRes, "%04d-%02d-%02d", x.Y, x.M, x.D); break; } |
︙ | ︙ | |||
33814 33815 33816 33817 33818 33819 33820 | sqlite3TreeViewLine(pView, "%s", zLabel); for(i=0; i<pList->nId; i++){ char *zName = pList->a[i].zName; int moreToFollow = i<pList->nId - 1; if( zName==0 ) zName = "(null)"; sqlite3TreeViewPush(&pView, moreToFollow); sqlite3TreeViewLine(pView, 0); | < | < < < < < < < < < < < < < | 33904 33905 33906 33907 33908 33909 33910 33911 33912 33913 33914 33915 33916 33917 33918 | sqlite3TreeViewLine(pView, "%s", zLabel); for(i=0; i<pList->nId; i++){ char *zName = pList->a[i].zName; int moreToFollow = i<pList->nId - 1; if( zName==0 ) zName = "(null)"; sqlite3TreeViewPush(&pView, moreToFollow); sqlite3TreeViewLine(pView, 0); fprintf(stdout, "%s\n", zName); sqlite3TreeViewPop(&pView); } } } SQLITE_PRIVATE void sqlite3TreeViewIdList( TreeView *pView, const IdList *pList, |
︙ | ︙ | |||
40169 40170 40171 40172 40173 40174 40175 | int rc; unixInodeInfo *pInode = pFile->pInode; assert( pInode!=0 ); assert( sqlite3_mutex_held(pInode->pLockMutex) ); if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ if( pInode->bProcessLock==0 ){ struct flock lock; | | | 40245 40246 40247 40248 40249 40250 40251 40252 40253 40254 40255 40256 40257 40258 40259 | int rc; unixInodeInfo *pInode = pFile->pInode; assert( pInode!=0 ); assert( sqlite3_mutex_held(pInode->pLockMutex) ); if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ if( pInode->bProcessLock==0 ){ struct flock lock; /* assert( pInode->nLock==0 ); <-- Not true if unix-excl READONLY used */ lock.l_whence = SEEK_SET; lock.l_start = SHARED_FIRST; lock.l_len = SHARED_SIZE; lock.l_type = F_WRLCK; rc = osSetPosixAdvisoryLock(pFile->h, &lock, pFile); if( rc<0 ) return rc; pInode->bProcessLock = 1; |
︙ | ︙ | |||
58052 58053 58054 58055 58056 58057 58058 | assert( pPager->fd!=0 ); if( pPager->fd->pMethods==0 ) return 0; /* Case (1) */ if( sqlite3PCacheIsDirty(pPager->pPCache) ) return 0; /* Failed (3) */ #ifndef SQLITE_OMIT_WAL if( pPager->pWal ){ u32 iRead = 0; (void)sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); | | | 58128 58129 58130 58131 58132 58133 58134 58135 58136 58137 58138 58139 58140 58141 58142 | assert( pPager->fd!=0 ); if( pPager->fd->pMethods==0 ) return 0; /* Case (1) */ if( sqlite3PCacheIsDirty(pPager->pPCache) ) return 0; /* Failed (3) */ #ifndef SQLITE_OMIT_WAL if( pPager->pWal ){ u32 iRead = 0; (void)sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); if( iRead ) return 0; /* Case (4) */ } #endif assert( pPager->fd->pMethods->xDeviceCharacteristics!=0 ); if( (pPager->fd->pMethods->xDeviceCharacteristics(pPager->fd) & SQLITE_IOCAP_SUBPAGE_READ)==0 ){ return 0; /* Case (2) */ } |
︙ | ︙ | |||
84000 84001 84002 84003 84004 84005 84006 | ** ** This is used for testing and debugging only - to help ensure that shallow ** copies (created by OP_SCopy) are not misused. */ SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){ int i; Mem *pX; | > | | | | | | | | | | | | | | | | | | | | > > | 84076 84077 84078 84079 84080 84081 84082 84083 84084 84085 84086 84087 84088 84089 84090 84091 84092 84093 84094 84095 84096 84097 84098 84099 84100 84101 84102 84103 84104 84105 84106 84107 84108 84109 84110 84111 84112 84113 | ** ** This is used for testing and debugging only - to help ensure that shallow ** copies (created by OP_SCopy) are not misused. */ SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){ int i; Mem *pX; if( pMem->bScopy ){ for(i=1, pX=pVdbe->aMem+1; i<pVdbe->nMem; i++, pX++){ if( pX->pScopyFrom==pMem ){ u16 mFlags; if( pVdbe->db->flags & SQLITE_VdbeTrace ){ sqlite3DebugPrintf("Invalidate R[%d] due to change in R[%d]\n", (int)(pX - pVdbe->aMem), (int)(pMem - pVdbe->aMem)); } /* If pX is marked as a shallow copy of pMem, then try to verify that ** no significant changes have been made to pX since the OP_SCopy. ** A significant change would indicated a missed call to this ** function for pX. Minor changes, such as adding or removing a ** dual type, are allowed, as long as the underlying value is the ** same. */ mFlags = pMem->flags & pX->flags & pX->mScopyFlags; assert( (mFlags&(MEM_Int|MEM_IntReal))==0 || pMem->u.i==pX->u.i ); /* pMem is the register that is changing. But also mark pX as ** undefined so that we can quickly detect the shallow-copy error */ pX->flags = MEM_Undefined; pX->pScopyFrom = 0; } } pMem->bScopy = 0; } pMem->pScopyFrom = 0; } #endif /* SQLITE_DEBUG */ /* ** Make an shallow copy of pFrom into pTo. Prior contents of |
︙ | ︙ | |||
87162 87163 87164 87165 87166 87167 87168 87169 87170 87171 87172 87173 87174 87175 | if( N>0 ){ do{ p->flags = flags; p->db = db; p->szMalloc = 0; #ifdef SQLITE_DEBUG p->pScopyFrom = 0; #endif p++; }while( (--N)>0 ); } } /* | > | 87241 87242 87243 87244 87245 87246 87247 87248 87249 87250 87251 87252 87253 87254 87255 | if( N>0 ){ do{ p->flags = flags; p->db = db; p->szMalloc = 0; #ifdef SQLITE_DEBUG p->pScopyFrom = 0; p->bScopy = 0; #endif p++; }while( (--N)>0 ); } } /* |
︙ | ︙ | |||
90627 90628 90629 90630 90631 90632 90633 | ** Invoke the profile callback. This routine is only called if we already ** know that the profile callback is defined and needs to be invoked. */ static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){ sqlite3_int64 iNow; sqlite3_int64 iElapse; assert( p->startTime>0 ); | < | 90707 90708 90709 90710 90711 90712 90713 90714 90715 90716 90717 90718 90719 90720 | ** Invoke the profile callback. This routine is only called if we already ** know that the profile callback is defined and needs to be invoked. */ static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){ sqlite3_int64 iNow; sqlite3_int64 iElapse; assert( p->startTime>0 ); assert( db->init.busy==0 ); assert( p->zSql!=0 ); sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); iElapse = (iNow - p->startTime)*1000000; #ifndef SQLITE_OMIT_DEPRECATED if( db->xProfile ){ db->xProfile(db->pProfileArg, p->zSql, iElapse); |
︙ | ︙ | |||
91347 91348 91349 91350 91351 91352 91353 | ** from interrupting a statement that has not yet started. */ if( db->nVdbeActive==0 ){ AtomicStore(&db->u1.isInterrupted, 0); } assert( db->nVdbeWrite>0 || db->autoCommit==0 | | | 91426 91427 91428 91429 91430 91431 91432 91433 91434 91435 91436 91437 91438 91439 91440 | ** from interrupting a statement that has not yet started. */ if( db->nVdbeActive==0 ){ AtomicStore(&db->u1.isInterrupted, 0); } assert( db->nVdbeWrite>0 || db->autoCommit==0 || ((db->nDeferredCons + db->nDeferredImmCons)==0) ); #ifndef SQLITE_OMIT_TRACE if( (db->mTrace & (SQLITE_TRACE_PROFILE|SQLITE_TRACE_XPROFILE))!=0 && !db->init.busy && p->zSql ){ sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); }else{ |
︙ | ︙ | |||
91858 91859 91860 91861 91862 91863 91864 91865 91866 91867 91868 91869 91870 91871 | /* .szMalloc = */ (int)0, /* .uTemp = */ (u32)0, /* .zMalloc = */ (char*)0, /* .xDel = */ (void(*)(void*))0, #ifdef SQLITE_DEBUG /* .pScopyFrom = */ (Mem*)0, /* .mScopyFlags= */ 0, #endif }; return &nullMem; } /* ** Check to see if column iCol of the given statement is valid. If | > | 91937 91938 91939 91940 91941 91942 91943 91944 91945 91946 91947 91948 91949 91950 91951 | /* .szMalloc = */ (int)0, /* .uTemp = */ (u32)0, /* .zMalloc = */ (char*)0, /* .xDel = */ (void(*)(void*))0, #ifdef SQLITE_DEBUG /* .pScopyFrom = */ (Mem*)0, /* .mScopyFlags= */ 0, /* .bScopy = */ 0, #endif }; return &nullMem; } /* ** Check to see if column iCol of the given statement is valid. If |
︙ | ︙ | |||
92740 92741 92742 92743 92744 92745 92746 92747 92748 92749 92750 92751 92752 92753 92754 92755 92756 92757 92758 92759 92760 | ** This function is called from within a pre-update callback to retrieve ** a field of the row currently being updated or deleted. */ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ PreUpdate *p; Mem *pMem; int rc = SQLITE_OK; #ifdef SQLITE_ENABLE_API_ARMOR if( db==0 || ppValue==0 ){ return SQLITE_MISUSE_BKPT; } #endif p = db->pPreUpdate; /* Test that this call is being made from within an SQLITE_DELETE or ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */ if( !p || p->op==SQLITE_INSERT ){ rc = SQLITE_MISUSE_BKPT; goto preupdate_old_out; } if( p->pPk ){ | > | > > | | 92820 92821 92822 92823 92824 92825 92826 92827 92828 92829 92830 92831 92832 92833 92834 92835 92836 92837 92838 92839 92840 92841 92842 92843 92844 92845 92846 92847 92848 92849 92850 92851 92852 92853 | ** This function is called from within a pre-update callback to retrieve ** a field of the row currently being updated or deleted. */ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ PreUpdate *p; Mem *pMem; int rc = SQLITE_OK; int iStore = 0; #ifdef SQLITE_ENABLE_API_ARMOR if( db==0 || ppValue==0 ){ return SQLITE_MISUSE_BKPT; } #endif p = db->pPreUpdate; /* Test that this call is being made from within an SQLITE_DELETE or ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */ if( !p || p->op==SQLITE_INSERT ){ rc = SQLITE_MISUSE_BKPT; goto preupdate_old_out; } if( p->pPk ){ iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); }else{ iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); } if( iStore>=p->pCsr->nField || iStore<0 ){ rc = SQLITE_RANGE; goto preupdate_old_out; } if( iIdx==p->pTab->iPKey ){ *ppValue = pMem = &p->oldipk; sqlite3VdbeMemSetInt64(pMem, p->iKey1); |
︙ | ︙ | |||
92787 92788 92789 92790 92791 92792 92793 | if( rc!=SQLITE_OK ){ sqlite3DbFree(db, aRec); goto preupdate_old_out; } p->aRecord = aRec; } | | | | 92870 92871 92872 92873 92874 92875 92876 92877 92878 92879 92880 92881 92882 92883 92884 92885 | if( rc!=SQLITE_OK ){ sqlite3DbFree(db, aRec); goto preupdate_old_out; } p->aRecord = aRec; } pMem = *ppValue = &p->pUnpacked->aMem[iStore]; if( iStore>=p->pUnpacked->nField ){ /* This occurs when the table has been extended using ALTER TABLE ** ADD COLUMN. The value to return is the default value of the column. */ Column *pCol = &p->pTab->aCol[iIdx]; if( pCol->iDflt>0 ){ if( p->apDflt==0 ){ int nByte = sizeof(sqlite3_value*)*p->pTab->nCol; p->apDflt = (sqlite3_value**)sqlite3DbMallocZero(db, nByte); |
︙ | ︙ | |||
92892 92893 92894 92895 92896 92897 92898 92899 92900 92901 92902 92903 92904 92905 92906 92907 92908 92909 92910 | ** This function is called from within a pre-update callback to retrieve ** a field of the row currently being updated or inserted. */ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ PreUpdate *p; int rc = SQLITE_OK; Mem *pMem; #ifdef SQLITE_ENABLE_API_ARMOR if( db==0 || ppValue==0 ){ return SQLITE_MISUSE_BKPT; } #endif p = db->pPreUpdate; if( !p || p->op==SQLITE_DELETE ){ rc = SQLITE_MISUSE_BKPT; goto preupdate_new_out; } if( p->pPk && p->op!=SQLITE_UPDATE ){ | > | > > > | | | | | | | | 92975 92976 92977 92978 92979 92980 92981 92982 92983 92984 92985 92986 92987 92988 92989 92990 92991 92992 92993 92994 92995 92996 92997 92998 92999 93000 93001 93002 93003 93004 93005 93006 93007 93008 93009 93010 93011 93012 93013 93014 93015 93016 93017 93018 93019 93020 93021 93022 93023 93024 93025 93026 93027 93028 93029 93030 93031 93032 93033 93034 93035 93036 93037 93038 93039 93040 93041 93042 93043 93044 93045 93046 93047 93048 93049 93050 93051 93052 93053 | ** This function is called from within a pre-update callback to retrieve ** a field of the row currently being updated or inserted. */ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ PreUpdate *p; int rc = SQLITE_OK; Mem *pMem; int iStore = 0; #ifdef SQLITE_ENABLE_API_ARMOR if( db==0 || ppValue==0 ){ return SQLITE_MISUSE_BKPT; } #endif p = db->pPreUpdate; if( !p || p->op==SQLITE_DELETE ){ rc = SQLITE_MISUSE_BKPT; goto preupdate_new_out; } if( p->pPk && p->op!=SQLITE_UPDATE ){ iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); }else{ iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); } if( iStore>=p->pCsr->nField || iStore<0 ){ rc = SQLITE_RANGE; goto preupdate_new_out; } if( p->op==SQLITE_INSERT ){ /* For an INSERT, memory cell p->iNewReg contains the serialized record ** that is being inserted. Deserialize it. */ UnpackedRecord *pUnpack = p->pNewUnpacked; if( !pUnpack ){ Mem *pData = &p->v->aMem[p->iNewReg]; rc = ExpandBlob(pData); if( rc!=SQLITE_OK ) goto preupdate_new_out; pUnpack = vdbeUnpackRecord(&p->keyinfo, pData->n, pData->z); if( !pUnpack ){ rc = SQLITE_NOMEM; goto preupdate_new_out; } p->pNewUnpacked = pUnpack; } pMem = &pUnpack->aMem[iStore]; if( iIdx==p->pTab->iPKey ){ sqlite3VdbeMemSetInt64(pMem, p->iKey2); }else if( iStore>=pUnpack->nField ){ pMem = (sqlite3_value *)columnNullValue(); } }else{ /* For an UPDATE, memory cell (p->iNewReg+1+iStore) contains the required ** value. Make a copy of the cell contents and return a pointer to it. ** It is not safe to return a pointer to the memory cell itself as the ** caller may modify the value text encoding. */ assert( p->op==SQLITE_UPDATE ); if( !p->aNew ){ p->aNew = (Mem *)sqlite3DbMallocZero(db, sizeof(Mem) * p->pCsr->nField); if( !p->aNew ){ rc = SQLITE_NOMEM; goto preupdate_new_out; } } assert( iStore>=0 && iStore<p->pCsr->nField ); pMem = &p->aNew[iStore]; if( pMem->flags==0 ){ if( iIdx==p->pTab->iPKey ){ sqlite3VdbeMemSetInt64(pMem, p->iKey2); }else{ rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iStore]); if( rc!=SQLITE_OK ) goto preupdate_new_out; } } } *ppValue = pMem; preupdate_new_out: |
︙ | ︙ | |||
94041 94042 94043 94044 94045 94046 94047 94048 94049 94050 94051 94052 94053 94054 | } if( p->flags & MEM_Subtype ) printf(" subtype=0x%02x", p->eSubtype); } static void registerTrace(int iReg, Mem *p){ printf("R[%d] = ", iReg); memTracePrint(p); if( p->pScopyFrom ){ printf(" <== R[%d]", (int)(p->pScopyFrom - &p[-iReg])); } printf("\n"); sqlite3VdbeCheckMemInvariants(p); } /**/ void sqlite3PrintMem(Mem *pMem){ memTracePrint(pMem); | > | 94128 94129 94130 94131 94132 94133 94134 94135 94136 94137 94138 94139 94140 94141 94142 | } if( p->flags & MEM_Subtype ) printf(" subtype=0x%02x", p->eSubtype); } static void registerTrace(int iReg, Mem *p){ printf("R[%d] = ", iReg); memTracePrint(p); if( p->pScopyFrom ){ assert( p->pScopyFrom->bScopy ); printf(" <== R[%d]", (int)(p->pScopyFrom - &p[-iReg])); } printf("\n"); sqlite3VdbeCheckMemInvariants(p); } /**/ void sqlite3PrintMem(Mem *pMem){ memTracePrint(pMem); |
︙ | ︙ | |||
95024 95025 95026 95027 95028 95029 95030 95031 95032 95033 95034 95035 95036 95037 | memAboutToChange(p, pOut); sqlite3VdbeMemMove(pOut, pIn1); #ifdef SQLITE_DEBUG pIn1->pScopyFrom = 0; { int i; for(i=1; i<p->nMem; i++){ if( aMem[i].pScopyFrom==pIn1 ){ aMem[i].pScopyFrom = pOut; } } } #endif Deephemeralize(pOut); REGISTER_TRACE(p2++, pOut); | > | 95112 95113 95114 95115 95116 95117 95118 95119 95120 95121 95122 95123 95124 95125 95126 | memAboutToChange(p, pOut); sqlite3VdbeMemMove(pOut, pIn1); #ifdef SQLITE_DEBUG pIn1->pScopyFrom = 0; { int i; for(i=1; i<p->nMem; i++){ if( aMem[i].pScopyFrom==pIn1 ){ assert( aMem[i].bScopy ); aMem[i].pScopyFrom = pOut; } } } #endif Deephemeralize(pOut); REGISTER_TRACE(p2++, pOut); |
︙ | ︙ | |||
95096 95097 95098 95099 95100 95101 95102 95103 95104 95105 95106 95107 95108 95109 | pIn1 = &aMem[pOp->p1]; pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); #ifdef SQLITE_DEBUG pOut->pScopyFrom = pIn1; pOut->mScopyFlags = pIn1->flags; #endif break; } /* Opcode: IntCopy P1 P2 * * * ** Synopsis: r[P2]=r[P1] ** | > | 95185 95186 95187 95188 95189 95190 95191 95192 95193 95194 95195 95196 95197 95198 95199 | pIn1 = &aMem[pOp->p1]; pOut = &aMem[pOp->p2]; assert( pOut!=pIn1 ); sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); #ifdef SQLITE_DEBUG pOut->pScopyFrom = pIn1; pOut->mScopyFlags = pIn1->flags; pIn1->bScopy = 1; #endif break; } /* Opcode: IntCopy P1 P2 * * * ** Synopsis: r[P2]=r[P1] ** |
︙ | ︙ | |||
111359 111360 111361 111362 111363 111364 111365 | return pNew; } SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, const IdList *p){ IdList *pNew; int i; assert( db!=0 ); if( p==0 ) return 0; | < < < | 111449 111450 111451 111452 111453 111454 111455 111456 111457 111458 111459 111460 111461 111462 111463 111464 111465 111466 111467 111468 111469 | return pNew; } SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, const IdList *p){ IdList *pNew; int i; assert( db!=0 ); if( p==0 ) return 0; pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew)+(p->nId-1)*sizeof(p->a[0]) ); if( pNew==0 ) return 0; pNew->nId = p->nId; for(i=0; i<p->nId; i++){ struct IdList_item *pNewItem = &pNew->a[i]; const struct IdList_item *pOldItem = &p->a[i]; pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); } return pNew; } SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, const Select *pDup, int flags){ Select *pRet = 0; Select *pNext = 0; Select **pp = &pRet; |
︙ | ︙ | |||
112892 112893 112894 112895 112896 112897 112898 112899 112900 112901 112902 112903 112904 112905 | pOp = sqlite3VdbeGetOp(v, 1); pEnd = sqlite3VdbeGetLastOp(v); for(; pOp<pEnd; pOp++){ if( pOp->p4type!=P4_SUBRTNSIG ) continue; assert( pOp->opcode==OP_BeginSubrtn ); pSig = pOp->p4.pSubrtnSig; assert( pSig!=0 ); if( pNewSig->selId!=pSig->selId ) continue; if( strcmp(pNewSig->zAff,pSig->zAff)!=0 ) continue; pExpr->y.sub.iAddr = pSig->iAddr; pExpr->y.sub.regReturn = pSig->regReturn; pExpr->iTable = pSig->iTable; ExprSetProperty(pExpr, EP_Subrtn); return 1; | > | 112979 112980 112981 112982 112983 112984 112985 112986 112987 112988 112989 112990 112991 112992 112993 | pOp = sqlite3VdbeGetOp(v, 1); pEnd = sqlite3VdbeGetLastOp(v); for(; pOp<pEnd; pOp++){ if( pOp->p4type!=P4_SUBRTNSIG ) continue; assert( pOp->opcode==OP_BeginSubrtn ); pSig = pOp->p4.pSubrtnSig; assert( pSig!=0 ); if( !pSig->bComplete ) continue; if( pNewSig->selId!=pSig->selId ) continue; if( strcmp(pNewSig->zAff,pSig->zAff)!=0 ) continue; pExpr->y.sub.iAddr = pSig->iAddr; pExpr->y.sub.regReturn = pSig->regReturn; pExpr->iTable = pSig->iTable; ExprSetProperty(pExpr, EP_Subrtn); return 1; |
︙ | ︙ | |||
112938 112939 112940 112941 112942 112943 112944 112945 112946 112947 112948 112949 112950 112951 112952 112953 112954 112955 112956 112957 112958 112959 112960 112961 112962 112963 112964 | ){ int addrOnce = 0; /* Address of the OP_Once instruction at top */ int addr; /* Address of OP_OpenEphemeral instruction */ Expr *pLeft; /* the LHS of the IN operator */ KeyInfo *pKeyInfo = 0; /* Key information */ int nVal; /* Size of vector pLeft */ Vdbe *v; /* The prepared statement under construction */ v = pParse->pVdbe; assert( v!=0 ); /* The evaluation of the IN must be repeated every time it ** is encountered if any of the following is true: ** ** * The right-hand side is a correlated subquery ** * The right-hand side is an expression list containing variables ** * We are inside a trigger ** ** If all of the above are false, then we can compute the RHS just once ** and reuse it many names. */ if( !ExprHasProperty(pExpr, EP_VarSelect) && pParse->iSelfTab==0 ){ /* Reuse of the RHS is allowed ** ** Compute a signature for the RHS of the IN operator to facility ** finding and reusing prior instances of the same IN operator. */ | > < | 113026 113027 113028 113029 113030 113031 113032 113033 113034 113035 113036 113037 113038 113039 113040 113041 113042 113043 113044 113045 113046 113047 113048 113049 113050 113051 113052 113053 113054 113055 113056 113057 113058 113059 113060 | ){ int addrOnce = 0; /* Address of the OP_Once instruction at top */ int addr; /* Address of OP_OpenEphemeral instruction */ Expr *pLeft; /* the LHS of the IN operator */ KeyInfo *pKeyInfo = 0; /* Key information */ int nVal; /* Size of vector pLeft */ Vdbe *v; /* The prepared statement under construction */ SubrtnSig *pSig = 0; /* Signature for this subroutine */ v = pParse->pVdbe; assert( v!=0 ); /* The evaluation of the IN must be repeated every time it ** is encountered if any of the following is true: ** ** * The right-hand side is a correlated subquery ** * The right-hand side is an expression list containing variables ** * We are inside a trigger ** ** If all of the above are false, then we can compute the RHS just once ** and reuse it many names. */ if( !ExprHasProperty(pExpr, EP_VarSelect) && pParse->iSelfTab==0 ){ /* Reuse of the RHS is allowed ** ** Compute a signature for the RHS of the IN operator to facility ** finding and reusing prior instances of the same IN operator. */ assert( !ExprUseXSelect(pExpr) || pExpr->x.pSelect!=0 ); if( ExprUseXSelect(pExpr) && (pExpr->x.pSelect->selFlags & SF_All)==0 ){ pSig = sqlite3DbMallocRawNN(pParse->db, sizeof(pSig[0])); if( pSig ){ pSig->selId = pExpr->x.pSelect->selId; pSig->zAff = exprINAffinity(pParse, pExpr); } |
︙ | ︙ | |||
113001 113002 113003 113004 113005 113006 113007 113008 113009 113010 113011 113012 113013 113014 | assert( !ExprUseYWin(pExpr) ); ExprSetProperty(pExpr, EP_Subrtn); assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); pExpr->y.sub.regReturn = ++pParse->nMem; pExpr->y.sub.iAddr = sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; if( pSig ){ pSig->iAddr = pExpr->y.sub.iAddr; pSig->regReturn = pExpr->y.sub.regReturn; pSig->iTable = iTab; pParse->mSubrtnSig = 1 << (pSig->selId&7); sqlite3VdbeChangeP4(v, -1, (const char*)pSig, P4_SUBRTNSIG); } addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); | > | 113089 113090 113091 113092 113093 113094 113095 113096 113097 113098 113099 113100 113101 113102 113103 | assert( !ExprUseYWin(pExpr) ); ExprSetProperty(pExpr, EP_Subrtn); assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); pExpr->y.sub.regReturn = ++pParse->nMem; pExpr->y.sub.iAddr = sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; if( pSig ){ pSig->bComplete = 0; pSig->iAddr = pExpr->y.sub.iAddr; pSig->regReturn = pExpr->y.sub.regReturn; pSig->iTable = iTab; pParse->mSubrtnSig = 1 << (pSig->selId&7); sqlite3VdbeChangeP4(v, -1, (const char*)pSig, P4_SUBRTNSIG); } addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); |
︙ | ︙ | |||
113136 113137 113138 113139 113140 113141 113142 113143 113144 113145 113146 113147 113148 113149 | sqlite3ExprCode(pParse, pE2, r1); sqlite3VdbeAddOp4(v, OP_MakeRecord, r1, 1, r2, &affinity, 1); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r2, r1, 1); } sqlite3ReleaseTempReg(pParse, r1); sqlite3ReleaseTempReg(pParse, r2); } if( pKeyInfo ){ sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO); } if( addrOnce ){ sqlite3VdbeAddOp1(v, OP_NullRow, iTab); sqlite3VdbeJumpHere(v, addrOnce); /* Subroutine return */ | > | 113225 113226 113227 113228 113229 113230 113231 113232 113233 113234 113235 113236 113237 113238 113239 | sqlite3ExprCode(pParse, pE2, r1); sqlite3VdbeAddOp4(v, OP_MakeRecord, r1, 1, r2, &affinity, 1); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r2, r1, 1); } sqlite3ReleaseTempReg(pParse, r1); sqlite3ReleaseTempReg(pParse, r2); } if( pSig ) pSig->bComplete = 1; if( pKeyInfo ){ sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO); } if( addrOnce ){ sqlite3VdbeAddOp1(v, OP_NullRow, iTab); sqlite3VdbeJumpHere(v, addrOnce); /* Subroutine return */ |
︙ | ︙ | |||
121334 121335 121336 121337 121338 121339 121340 121341 121342 121343 121344 121345 121346 121347 | rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); if( rc!=SQLITE_OK ){ if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); sqlite3_result_error(context, zErr, -1); sqlite3_free(zErr); return; } assert( pVfs ); flags |= SQLITE_OPEN_MAIN_DB; rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); db->nDb++; pNew->zDbSName = sqlite3DbStrDup(db, zName); } db->noSharedCache = 0; | > > > > > > | 121424 121425 121426 121427 121428 121429 121430 121431 121432 121433 121434 121435 121436 121437 121438 121439 121440 121441 121442 121443 | rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); if( rc!=SQLITE_OK ){ if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); sqlite3_result_error(context, zErr, -1); sqlite3_free(zErr); return; } if( (db->flags & SQLITE_AttachWrite)==0 ){ flags &= ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE); flags |= SQLITE_OPEN_READONLY; }else if( (db->flags & SQLITE_AttachCreate)==0 ){ flags &= ~SQLITE_OPEN_CREATE; } assert( pVfs ); flags |= SQLITE_OPEN_MAIN_DB; rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); db->nDb++; pNew->zDbSName = sqlite3DbStrDup(db, zName); } db->noSharedCache = 0; |
︙ | ︙ | |||
126725 126726 126727 126728 126729 126730 126731 | /* ** Delete an IdList. */ SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ int i; assert( db!=0 ); if( pList==0 ) return; | < | 126821 126822 126823 126824 126825 126826 126827 126828 126829 126830 126831 126832 126833 126834 | /* ** Delete an IdList. */ SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ int i; assert( db!=0 ); if( pList==0 ) return; for(i=0; i<pList->nId; i++){ sqlite3DbFree(db, pList->a[i].zName); } sqlite3DbNNFreeNN(db, pList); } /* |
︙ | ︙ | |||
128106 128107 128108 128109 128110 128111 128112 | #define FUNC_PERFECT_MATCH 6 /* The score for a perfect match */ static int matchQuality( FuncDef *p, /* The function we are evaluating for match quality */ int nArg, /* Desired number of arguments. (-1)==any */ u8 enc /* Desired text encoding */ ){ int match; | | > | > > > > > | 128201 128202 128203 128204 128205 128206 128207 128208 128209 128210 128211 128212 128213 128214 128215 128216 128217 128218 128219 128220 128221 128222 128223 128224 128225 128226 | #define FUNC_PERFECT_MATCH 6 /* The score for a perfect match */ static int matchQuality( FuncDef *p, /* The function we are evaluating for match quality */ int nArg, /* Desired number of arguments. (-1)==any */ u8 enc /* Desired text encoding */ ){ int match; assert( p->nArg>=(-4) && p->nArg!=(-2) ); assert( nArg>=(-2) ); /* Wrong number of arguments means "no match" */ if( p->nArg!=nArg ){ if( nArg==(-2) ) return p->xSFunc==0 ? 0 : FUNC_PERFECT_MATCH; if( p->nArg>=0 ) return 0; /* Special p->nArg values available to built-in functions only: ** -3 1 or more arguments required ** -4 2 or more arguments required */ if( p->nArg<(-2) && nArg<(-2-p->nArg) ) return 0; } /* Give a better score to a function with a specific number of arguments ** than to function that accepts any number of arguments. */ if( p->nArg==nArg ){ match = 4; }else{ |
︙ | ︙ | |||
132075 132076 132077 132078 132079 132080 132081 | #endif FUNCTION(ltrim, 1, 1, 0, trimFunc ), FUNCTION(ltrim, 2, 1, 0, trimFunc ), FUNCTION(rtrim, 1, 2, 0, trimFunc ), FUNCTION(rtrim, 2, 2, 0, trimFunc ), FUNCTION(trim, 1, 3, 0, trimFunc ), FUNCTION(trim, 2, 3, 0, trimFunc ), | | < | < | 132176 132177 132178 132179 132180 132181 132182 132183 132184 132185 132186 132187 132188 132189 132190 132191 132192 132193 | #endif FUNCTION(ltrim, 1, 1, 0, trimFunc ), FUNCTION(ltrim, 2, 1, 0, trimFunc ), FUNCTION(rtrim, 1, 2, 0, trimFunc ), FUNCTION(rtrim, 2, 2, 0, trimFunc ), FUNCTION(trim, 1, 3, 0, trimFunc ), FUNCTION(trim, 2, 3, 0, trimFunc ), FUNCTION(min, -3, 0, 1, minmaxFunc ), WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ), FUNCTION(max, -3, 1, 1, minmaxFunc ), WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0, SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ), FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), FUNCTION2(subtype, 1, 0, 0, subtypeFunc, SQLITE_FUNC_TYPEOF|SQLITE_SUBTYPE), FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), FUNCTION2(octet_length, 1, 0, 0, bytelengthFunc,SQLITE_FUNC_BYTELEN), |
︙ | ︙ | |||
132107 132108 132109 132110 132111 132112 132113 | FUNCTION(round, 2, 0, 0, roundFunc ), #endif FUNCTION(upper, 1, 0, 0, upperFunc ), FUNCTION(lower, 1, 0, 0, lowerFunc ), FUNCTION(hex, 1, 0, 0, hexFunc ), FUNCTION(unhex, 1, 0, 0, unhexFunc ), FUNCTION(unhex, 2, 0, 0, unhexFunc ), | | < | < < | 132206 132207 132208 132209 132210 132211 132212 132213 132214 132215 132216 132217 132218 132219 132220 132221 | FUNCTION(round, 2, 0, 0, roundFunc ), #endif FUNCTION(upper, 1, 0, 0, upperFunc ), FUNCTION(lower, 1, 0, 0, lowerFunc ), FUNCTION(hex, 1, 0, 0, hexFunc ), FUNCTION(unhex, 1, 0, 0, unhexFunc ), FUNCTION(unhex, 2, 0, 0, unhexFunc ), FUNCTION(concat, -3, 0, 0, concatFunc ), FUNCTION(concat_ws, -4, 0, 0, concatwsFunc ), INLINE_FUNC(ifnull, 2, INLINEFUNC_coalesce, 0 ), VFUNCTION(random, 0, 0, 0, randomFunc ), VFUNCTION(randomblob, 1, 0, 0, randomBlob ), FUNCTION(nullif, 2, 0, 1, nullifFunc ), DFUNCTION(sqlite_version, 0, 0, 0, versionFunc ), DFUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ), |
︙ | ︙ | |||
132155 132156 132157 132158 132159 132160 132161 | #else LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), #endif #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION FUNCTION(unknown, -1, 0, 0, unknownFunc ), #endif | < < | 132251 132252 132253 132254 132255 132256 132257 132258 132259 132260 132261 132262 132263 132264 | #else LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE), LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE), #endif #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION FUNCTION(unknown, -1, 0, 0, unknownFunc ), #endif #ifdef SQLITE_ENABLE_MATH_FUNCTIONS MFUNCTION(ceil, 1, xCeil, ceilingFunc ), MFUNCTION(ceiling, 1, xCeil, ceilingFunc ), MFUNCTION(floor, 1, xFloor, ceilingFunc ), #if SQLITE_HAVE_C99_MATH_FUNCS MFUNCTION(trunc, 1, trunc, ceilingFunc ), #endif |
︙ | ︙ | |||
132194 132195 132196 132197 132198 132199 132200 | #endif MFUNCTION(sqrt, 1, sqrt, math1Func ), MFUNCTION(radians, 1, degToRad, math1Func ), MFUNCTION(degrees, 1, radToDeg, math1Func ), MFUNCTION(pi, 0, 0, piFunc ), #endif /* SQLITE_ENABLE_MATH_FUNCTIONS */ FUNCTION(sign, 1, 0, 0, signFunc ), | | | < | < | 132288 132289 132290 132291 132292 132293 132294 132295 132296 132297 132298 132299 132300 132301 132302 132303 132304 | #endif MFUNCTION(sqrt, 1, sqrt, math1Func ), MFUNCTION(radians, 1, degToRad, math1Func ), MFUNCTION(degrees, 1, radToDeg, math1Func ), MFUNCTION(pi, 0, 0, piFunc ), #endif /* SQLITE_ENABLE_MATH_FUNCTIONS */ FUNCTION(sign, 1, 0, 0, signFunc ), INLINE_FUNC(coalesce, -4, INLINEFUNC_coalesce, 0 ), INLINE_FUNC(iif, -4, INLINEFUNC_iif, 0 ), INLINE_FUNC(if, -4, INLINEFUNC_iif, 0 ), }; #ifndef SQLITE_OMIT_ALTERTABLE sqlite3AlterFunctions(); #endif sqlite3WindowFunctions(); sqlite3RegisterDateTimeFunctions(); sqlite3RegisterJsonFunctions(); |
︙ | ︙ | |||
134644 134645 134646 134647 134648 134649 134650 134651 134652 134653 134654 134655 134656 134657 | int regFromSelect = 0;/* Base register for data coming from SELECT */ int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */ int regRowCount = 0; /* Memory cell used for the row counter */ int regIns; /* Block of regs holding rowid+data being inserted */ int regRowid; /* registers holding insert rowid */ int regData; /* register holding first column to insert */ int *aRegIdx = 0; /* One register allocated to each index */ #ifndef SQLITE_OMIT_TRIGGER int isView; /* True if attempting to insert into a view */ Trigger *pTrigger; /* List of triggers on pTab, if required */ int tmask; /* Mask of trigger times */ #endif | > | 134736 134737 134738 134739 134740 134741 134742 134743 134744 134745 134746 134747 134748 134749 134750 | int regFromSelect = 0;/* Base register for data coming from SELECT */ int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */ int regRowCount = 0; /* Memory cell used for the row counter */ int regIns; /* Block of regs holding rowid+data being inserted */ int regRowid; /* registers holding insert rowid */ int regData; /* register holding first column to insert */ int *aRegIdx = 0; /* One register allocated to each index */ int *aTabColMap = 0; /* Mapping from pTab columns to pCol entries */ #ifndef SQLITE_OMIT_TRIGGER int isView; /* True if attempting to insert into a view */ Trigger *pTrigger; /* List of triggers on pTab, if required */ int tmask; /* Mask of trigger times */ #endif |
︙ | ︙ | |||
134788 134789 134790 134791 134792 134793 134794 | ** bIdListInOrder is true if the columns in IDLIST are in storage ** order. This enables an optimization that avoids shuffling the ** columns into storage order. False negatives are harmless, ** but false positives will cause database corruption. */ bIdListInOrder = (pTab->tabFlags & (TF_OOOHidden|TF_HasStored))==0; if( pColumn ){ | | | | < < > > | | | 134881 134882 134883 134884 134885 134886 134887 134888 134889 134890 134891 134892 134893 134894 134895 134896 134897 134898 134899 134900 134901 134902 134903 | ** bIdListInOrder is true if the columns in IDLIST are in storage ** order. This enables an optimization that avoids shuffling the ** columns into storage order. False negatives are harmless, ** but false positives will cause database corruption. */ bIdListInOrder = (pTab->tabFlags & (TF_OOOHidden|TF_HasStored))==0; if( pColumn ){ aTabColMap = sqlite3DbMallocZero(db, pTab->nCol*sizeof(int)); if( aTabColMap==0 ) goto insert_cleanup; for(i=0; i<pColumn->nId; i++){ const char *zCName = pColumn->a[i].zName; u8 hName = sqlite3StrIHash(zCName); for(j=0; j<pTab->nCol; j++){ if( pTab->aCol[j].hName!=hName ) continue; if( sqlite3StrICmp(zCName, pTab->aCol[j].zCnName)==0 ){ if( aTabColMap[j]==0 ) aTabColMap[j] = i+1; if( i!=j ) bIdListInOrder = 0; if( j==pTab->iPKey ){ ipkColumn = i; assert( !withoutRowid ); } #ifndef SQLITE_OMIT_GENERATED_COLUMNS if( pTab->aCol[j].colFlags & (COLFLAG_STORED|COLFLAG_VIRTUAL) ){ sqlite3ErrorMsg(pParse, |
︙ | ︙ | |||
135118 135119 135120 135121 135122 135123 135124 | sqlite3ExprCodeFactorable(pParse, sqlite3ColumnExpr(pTab, &pTab->aCol[i]), iRegStore); continue; } } if( pColumn ){ | | | | | | 135211 135212 135213 135214 135215 135216 135217 135218 135219 135220 135221 135222 135223 135224 135225 135226 135227 135228 135229 135230 135231 135232 135233 135234 135235 | sqlite3ExprCodeFactorable(pParse, sqlite3ColumnExpr(pTab, &pTab->aCol[i]), iRegStore); continue; } } if( pColumn ){ j = aTabColMap[i]; assert( j>=0 && j<=pColumn->nId ); if( j==0 ){ /* A column not named in the insert column list gets its ** default value */ sqlite3ExprCodeFactorable(pParse, sqlite3ColumnExpr(pTab, &pTab->aCol[i]), iRegStore); continue; } k = j - 1; }else if( nColumn==0 ){ /* This is INSERT INTO ... DEFAULT VALUES. Load the default value. */ sqlite3ExprCodeFactorable(pParse, sqlite3ColumnExpr(pTab, &pTab->aCol[i]), iRegStore); continue; }else{ |
︙ | ︙ | |||
135373 135374 135375 135376 135377 135378 135379 | } insert_cleanup: sqlite3SrcListDelete(db, pTabList); sqlite3ExprListDelete(db, pList); sqlite3UpsertDelete(db, pUpsert); sqlite3SelectDelete(db, pSelect); | > | > > | 135466 135467 135468 135469 135470 135471 135472 135473 135474 135475 135476 135477 135478 135479 135480 135481 135482 135483 | } insert_cleanup: sqlite3SrcListDelete(db, pTabList); sqlite3ExprListDelete(db, pList); sqlite3UpsertDelete(db, pUpsert); sqlite3SelectDelete(db, pSelect); if( pColumn ){ sqlite3IdListDelete(db, pColumn); sqlite3DbFree(db, aTabColMap); } if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx); } /* Make sure "isView" and other macros defined above are undefined. Otherwise ** they may interfere with compilation of other functions in this file ** (or in another file, if this file becomes part of the amalgamation). */ #ifdef isView |
︙ | ︙ | |||
157229 157230 157231 157232 157233 157234 157235 | /* Verify that the first two keywords in the CREATE TABLE statement ** really are "CREATE" and "TABLE". If this is not the case, then ** sqlite3_declare_vtab() is being misused. */ z = (const unsigned char*)zCreateTable; for(i=0; aKeyword[i]; i++){ int tokenType = 0; | > | > | 157325 157326 157327 157328 157329 157330 157331 157332 157333 157334 157335 157336 157337 157338 157339 157340 157341 | /* Verify that the first two keywords in the CREATE TABLE statement ** really are "CREATE" and "TABLE". If this is not the case, then ** sqlite3_declare_vtab() is being misused. */ z = (const unsigned char*)zCreateTable; for(i=0; aKeyword[i]; i++){ int tokenType = 0; do{ z += sqlite3GetToken(z, &tokenType); }while( tokenType==TK_SPACE || tokenType==TK_COMMENT ); if( tokenType!=aKeyword[i] ){ sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error"); return SQLITE_ERROR; } } sqlite3_mutex_enter(db->mutex); |
︙ | ︙ | |||
157960 157961 157962 157963 157964 157965 157966 157967 | } u; u32 wsFlags; /* WHERE_* flags describing the plan */ u16 nLTerm; /* Number of entries in aLTerm[] */ u16 nSkip; /* Number of NULL aLTerm[] entries */ /**** whereLoopXfer() copies fields above ***********************/ # define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot) u16 nLSlot; /* Number of slots allocated for aLTerm[] */ LogEst rStarDelta; /* Cost delta due to star-schema heuristic. Not | > | > | 158058 158059 158060 158061 158062 158063 158064 158065 158066 158067 158068 158069 158070 158071 158072 158073 158074 158075 | } u; u32 wsFlags; /* WHERE_* flags describing the plan */ u16 nLTerm; /* Number of entries in aLTerm[] */ u16 nSkip; /* Number of NULL aLTerm[] entries */ /**** whereLoopXfer() copies fields above ***********************/ # define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot) u16 nLSlot; /* Number of slots allocated for aLTerm[] */ #ifdef WHERETRACE_ENABLED LogEst rStarDelta; /* Cost delta due to star-schema heuristic. Not ** initialized unless pWInfo->bStarUsed */ #endif WhereTerm **aLTerm; /* WhereTerms used */ WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */ WhereTerm *aLTermSpace[3]; /* Initial aLTerm[] space */ }; /* This object holds the prerequisites and the cost of running a ** subquery on one operand of an OR operator in the WHERE clause. |
︙ | ︙ | |||
158010 158011 158012 158013 158014 158015 158016 | ** at the end is the chosen query plan. */ struct WherePath { Bitmask maskLoop; /* Bitmask of all WhereLoop objects in this path */ Bitmask revLoop; /* aLoop[]s that should be reversed for ORDER BY */ LogEst nRow; /* Estimated number of rows generated by this path */ LogEst rCost; /* Total cost of this path */ | | | 158110 158111 158112 158113 158114 158115 158116 158117 158118 158119 158120 158121 158122 158123 158124 | ** at the end is the chosen query plan. */ struct WherePath { Bitmask maskLoop; /* Bitmask of all WhereLoop objects in this path */ Bitmask revLoop; /* aLoop[]s that should be reversed for ORDER BY */ LogEst nRow; /* Estimated number of rows generated by this path */ LogEst rCost; /* Total cost of this path */ LogEst rUnsort; /* Total cost of this path ignoring sorting costs */ i8 isOrdered; /* No. of ORDER BY terms satisfied. -1 for unknown */ WhereLoop **aLoop; /* Array of WhereLoop objects implementing this path */ }; /* ** The query generator uses an array of instances of this structure to ** help it analyze the subexpressions of the WHERE clause. Each WHERE |
︙ | ︙ | |||
158283 158284 158285 158286 158287 158288 158289 | u8 nLevel; /* Number of nested loop */ i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */ u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */ u8 eDistinct; /* One of the WHERE_DISTINCT_* values */ unsigned bDeferredSeek :1; /* Uses OP_DeferredSeek */ unsigned untestedTerms :1; /* Not all WHERE terms resolved by outer loop */ unsigned bOrderedInnerLoop:1;/* True if only the inner-most loop is ordered */ | | | > > > > | 158383 158384 158385 158386 158387 158388 158389 158390 158391 158392 158393 158394 158395 158396 158397 158398 158399 158400 158401 158402 158403 | u8 nLevel; /* Number of nested loop */ i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */ u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */ u8 eDistinct; /* One of the WHERE_DISTINCT_* values */ unsigned bDeferredSeek :1; /* Uses OP_DeferredSeek */ unsigned untestedTerms :1; /* Not all WHERE terms resolved by outer loop */ unsigned bOrderedInnerLoop:1;/* True if only the inner-most loop is ordered */ unsigned sorted :1; /* True if really sorted (not just grouped) */ unsigned bStarDone :1; /* True if check for star-query is complete */ unsigned bStarUsed :1; /* True if star-query heuristic is used */ LogEst nRowOut; /* Estimated number of output rows */ #ifdef WHERETRACE_ENABLED LogEst rTotalCost; /* Total cost of the solution */ #endif int iTop; /* The very beginning of the WHERE loop */ int iEndWhere; /* End of the WHERE clause itself */ WhereLoop *pLoops; /* List of all WhereLoop objects */ WhereMemBlock *pMemToFree;/* Memory to free when this object destroyed */ Bitmask revMask; /* Mask of ORDER BY terms that need reversing */ WhereClause sWC; /* Decomposition of the WHERE clause */ WhereMaskSet sMaskSet; /* Map cursor numbers to bitmasks */ |
︙ | ︙ | |||
161596 161597 161598 161599 161600 161601 161602 | sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER ); }else if( op==TK_STRING ){ assert( !ExprHasProperty(pRight, EP_IntValue) ); z = (u8*)pRight->u.zToken; } if( z ){ | | | | | | | > | > | 161700 161701 161702 161703 161704 161705 161706 161707 161708 161709 161710 161711 161712 161713 161714 161715 161716 161717 161718 161719 161720 161721 161722 161723 161724 161725 161726 161727 161728 161729 | sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER ); }else if( op==TK_STRING ){ assert( !ExprHasProperty(pRight, EP_IntValue) ); z = (u8*)pRight->u.zToken; } if( z ){ /* Count the number of prefix bytes prior to the first wildcard, ** U+fffd character, or malformed utf-8. If the underlying database ** has a UTF16LE encoding, then only consider ASCII characters. Note that ** the encoding of z[] is UTF8 - we are dealing with only UTF8 here in this ** code, but the database engine itself might be processing content using a ** different encoding. */ cnt = 0; while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ cnt++; if( c==wc[3] && z[cnt]>0 && z[cnt]<0x80 ){ cnt++; }else if( c>=0x80 ){ const u8 *z2 = z+cnt-1; if( c==0xff || sqlite3Utf8Read(&z2)==0xfffd /* bad utf-8 */ || ENC(db)==SQLITE_UTF16LE ){ cnt--; break; }else{ cnt = (int)(z2-z); } } } |
︙ | ︙ | |||
162761 162762 162763 162764 162765 162766 162767 | for(i=0; (c = pStr1->u.zToken[i])!=0; i++){ pStr1->u.zToken[i] = sqlite3Toupper(c); pStr2->u.zToken[i] = sqlite3Tolower(c); } } if( !db->mallocFailed ){ | | < | | > > > | > > > > | 162867 162868 162869 162870 162871 162872 162873 162874 162875 162876 162877 162878 162879 162880 162881 162882 162883 162884 162885 162886 162887 162888 162889 162890 162891 162892 162893 162894 162895 162896 162897 162898 162899 162900 | for(i=0; (c = pStr1->u.zToken[i])!=0; i++){ pStr1->u.zToken[i] = sqlite3Toupper(c); pStr2->u.zToken[i] = sqlite3Tolower(c); } } if( !db->mallocFailed ){ u8 *pC; /* Last character before the first wildcard */ pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1]; if( noCase ){ /* The point is to increment the last character before the first ** wildcard. But if we increment '@', that will push it into the ** alphabetic range where case conversions will mess up the ** inequality. To avoid this, make sure to also run the full ** LIKE on all candidate expressions by clearing the isComplete flag */ if( *pC=='A'-1 ) isComplete = 0; *pC = sqlite3UpperToLower[*pC]; } /* Increment the value of the last utf8 character in the prefix. */ while( *pC==0xBF && pC>(u8*)pStr2->u.zToken ){ *pC = 0x80; pC--; } assert( *pC!=0xFF ); /* isLikeOrGlob() guarantees this */ (*pC)++; } zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY; pNewExpr1 = sqlite3ExprDup(db, pLeft, 0); pNewExpr1 = sqlite3PExpr(pParse, TK_GE, sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName), pStr1); transferJoinMarkings(pNewExpr1, pExpr); |
︙ | ︙ | |||
164231 164232 164233 164234 164235 164236 164237 | Table *pTab = pIdx->pTable; const char *zSep = ""; char *zText = 0; int ii = 0; sqlite3_str *pStr = sqlite3_str_new(pParse->db); sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName); assert( pIdx->nColumn>1 ); | | | 164343 164344 164345 164346 164347 164348 164349 164350 164351 164352 164353 164354 164355 164356 164357 | Table *pTab = pIdx->pTable; const char *zSep = ""; char *zText = 0; int ii = 0; sqlite3_str *pStr = sqlite3_str_new(pParse->db); sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName); assert( pIdx->nColumn>1 ); assert( pIdx->aiColumn[pIdx->nColumn-1]==XN_ROWID || !HasRowid(pTab) ); for(ii=0; ii<(pIdx->nColumn-1); ii++){ const char *zName = 0; int iCol = pIdx->aiColumn[ii]; zName = pTab->aCol[iCol].zCnName; sqlite3_str_appendf(pStr, "%s%s", zSep, zName); zSep = ", "; |
︙ | ︙ | |||
164361 164362 164363 164364 164365 164366 164367 164368 164369 164370 164371 164372 164373 164374 164375 164376 164377 164378 164379 | ** original table changes and the index and table cannot both be used ** if they go out of sync. */ if( IsView(pTable) ){ extraCols = ALLBITS & ~idxCols; }else{ extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); } mxBitCol = MIN(BMS-1,pTable->nCol); testcase( pTable->nCol==BMS-1 ); testcase( pTable->nCol==BMS-2 ); for(i=0; i<mxBitCol; i++){ if( extraCols & MASKBIT(i) ) nKeyCol++; } if( pSrc->colUsed & MASKBIT(BMS-1) ){ nKeyCol += pTable->nCol - BMS + 1; } /* Construct the Index object to describe this index */ | > > > > > > > > > > > > > | > | 164473 164474 164475 164476 164477 164478 164479 164480 164481 164482 164483 164484 164485 164486 164487 164488 164489 164490 164491 164492 164493 164494 164495 164496 164497 164498 164499 164500 164501 164502 164503 164504 164505 164506 164507 164508 164509 164510 164511 164512 164513 | ** original table changes and the index and table cannot both be used ** if they go out of sync. */ if( IsView(pTable) ){ extraCols = ALLBITS & ~idxCols; }else{ extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); } if( !HasRowid(pTable) ){ /* For WITHOUT ROWID tables, ensure that all PRIMARY KEY columns are ** either in the idxCols mask or in the extraCols mask */ for(i=0; i<pTable->nCol; i++){ if( (pTable->aCol[i].colFlags & COLFLAG_PRIMKEY)==0 ) continue; if( i>=BMS-1 ){ extraCols |= MASKBIT(BMS-1); break; } if( idxCols & MASKBIT(i) ) continue; extraCols |= MASKBIT(i); } } mxBitCol = MIN(BMS-1,pTable->nCol); testcase( pTable->nCol==BMS-1 ); testcase( pTable->nCol==BMS-2 ); for(i=0; i<mxBitCol; i++){ if( extraCols & MASKBIT(i) ) nKeyCol++; } if( pSrc->colUsed & MASKBIT(BMS-1) ){ nKeyCol += pTable->nCol - BMS + 1; } /* Construct the Index object to describe this index */ pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+HasRowid(pTable), 0, &zNotUsed); if( pIdx==0 ) goto end_auto_index_create; pLoop->u.btree.pIndex = pIdx; pIdx->zName = "auto-index"; pIdx->pTable = pTable; n = 0; idxCols = 0; for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){ |
︙ | ︙ | |||
164429 164430 164431 164432 164433 164434 164435 | for(i=BMS-1; i<pTable->nCol; i++){ pIdx->aiColumn[n] = i; pIdx->azColl[n] = sqlite3StrBINARY; n++; } } assert( n==nKeyCol ); | > | | > | 164555 164556 164557 164558 164559 164560 164561 164562 164563 164564 164565 164566 164567 164568 164569 164570 164571 164572 | for(i=BMS-1; i<pTable->nCol; i++){ pIdx->aiColumn[n] = i; pIdx->azColl[n] = sqlite3StrBINARY; n++; } } assert( n==nKeyCol ); if( HasRowid(pTable) ){ pIdx->aiColumn[n] = XN_ROWID; pIdx->azColl[n] = sqlite3StrBINARY; } /* Create the automatic index */ explainAutomaticIndex(pParse, pIdx, pPartial!=0, &addrExp); assert( pLevel->iIdxCur>=0 ); pLevel->iIdxCur = pParse->nTab++; sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1); sqlite3VdbeSetP4KeyInfo(pParse, pIdx); |
︙ | ︙ | |||
165697 165698 165699 165700 165701 165702 165703 165704 | ** | | .-- prereq Idx wsFlags----. | | ** | | | Name | | | ** | | | __|__ nEq ---. ___|__ | __|__ ** | / \ / \ / \ | / \ / \ / \ ** 1.002.001 t2.t2xy 2 f 010241 N 2 cost 0,56,31 */ SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC){ if( pWC ){ | > | > | 165825 165826 165827 165828 165829 165830 165831 165832 165833 165834 165835 165836 165837 165838 165839 165840 165841 165842 165843 165844 165845 165846 165847 165848 165849 165850 165851 | ** | | .-- prereq Idx wsFlags----. | | ** | | | Name | | | ** | | | __|__ nEq ---. ___|__ | __|__ ** | / \ / \ / \ | / \ / \ / \ ** 1.002.001 t2.t2xy 2 f 010241 N 2 cost 0,56,31 */ SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC){ WhereInfo *pWInfo; if( pWC ){ pWInfo = pWC->pWInfo; int nb = 1+(pWInfo->pTabList->nSrc+3)/4; SrcItem *pItem = pWInfo->pTabList->a + p->iTab; Table *pTab = pItem->pSTab; Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1; sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId, p->iTab, nb, p->maskSelf, nb, p->prereq & mAll); sqlite3DebugPrintf(" %12s", pItem->zAlias ? pItem->zAlias : pTab->zName); }else{ pWInfo = 0; sqlite3DebugPrintf("%c%2d.%03llx.%03llx %c%d", p->cId, p->iTab, p->maskSelf, p->prereq & 0xfff, p->cId, p->iTab); } if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){ const char *zName; if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){ if( strncmp(zName, "sqlite_autoindex_", 17)==0 ){ |
︙ | ︙ | |||
165739 165740 165741 165742 165743 165744 165745 | sqlite3_free(z); } if( p->wsFlags & WHERE_SKIPSCAN ){ sqlite3DebugPrintf(" f %06x %d-%d", p->wsFlags, p->nLTerm,p->nSkip); }else{ sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm); } | > > > > | > | 165869 165870 165871 165872 165873 165874 165875 165876 165877 165878 165879 165880 165881 165882 165883 165884 165885 165886 165887 165888 | sqlite3_free(z); } if( p->wsFlags & WHERE_SKIPSCAN ){ sqlite3DebugPrintf(" f %06x %d-%d", p->wsFlags, p->nLTerm,p->nSkip); }else{ sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm); } if( pWInfo && pWInfo->bStarUsed && p->rStarDelta!=0 ){ sqlite3DebugPrintf(" cost %d,%d,%d delta=%d\n", p->rSetup, p->rRun, p->nOut, p->rStarDelta); }else{ sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut); } if( p->nLTerm && (sqlite3WhereTrace & 0x4000)!=0 ){ int i; for(i=0; i<p->nLTerm; i++){ sqlite3WhereTermPrint(p->aLTerm[i], i); } } } |
︙ | ︙ | |||
167205 167206 167207 167208 167209 167210 167211 | #ifndef SQLITE_OMIT_AUTOMATIC_INDEX /* Automatic indexes */ if( !pBuilder->pOrSet /* Not part of an OR optimization */ && (pWInfo->wctrlFlags & (WHERE_RIGHT_JOIN|WHERE_OR_SUBCLAUSE))==0 && (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0 && !pSrc->fg.isIndexedBy /* Has no INDEXED BY clause */ && !pSrc->fg.notIndexed /* Has no NOT INDEXED clause */ | < | 167340 167341 167342 167343 167344 167345 167346 167347 167348 167349 167350 167351 167352 167353 | #ifndef SQLITE_OMIT_AUTOMATIC_INDEX /* Automatic indexes */ if( !pBuilder->pOrSet /* Not part of an OR optimization */ && (pWInfo->wctrlFlags & (WHERE_RIGHT_JOIN|WHERE_OR_SUBCLAUSE))==0 && (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0 && !pSrc->fg.isIndexedBy /* Has no INDEXED BY clause */ && !pSrc->fg.notIndexed /* Has no NOT INDEXED clause */ && !pSrc->fg.isCorrelated /* Not a correlated subquery */ && !pSrc->fg.isRecursive /* Not a recursive common table expression. */ && (pSrc->fg.jointype & JT_RIGHT)==0 /* Not the right tab of a RIGHT JOIN */ ){ /* Generate auto-index WhereLoops */ LogEst rLogSize; /* Logarithm of the number of rows in the table */ WhereTerm *pTerm; |
︙ | ︙ | |||
168708 168709 168710 168711 168712 168713 168714 | ** each step of the solver search algorithm to avoid exponential behavior. ** ** The value returned is a tuning parameter. Currently the value is: ** ** 18 for star queries ** 12 otherwise ** | | | > | | > > | > > | | | > | > > > > > > > > > | < > > > > > > > > > > > > > | | | | > > | > > | > > > > > | > > > > > > | > > | > | > > > > > > | > | > > > > > > > > > > > > | > > > > > > > | > > > > > | | > | > > > > | > | | < < | | > > | > > > | > | > | > | < > > | > > | > > > > > > > > > > > > | > > > > > > | | > > | > > > > > > > > > > > > > > > > > > > > > > | 168842 168843 168844 168845 168846 168847 168848 168849 168850 168851 168852 168853 168854 168855 168856 168857 168858 168859 168860 168861 168862 168863 168864 168865 168866 168867 168868 168869 168870 168871 168872 168873 168874 168875 168876 168877 168878 168879 168880 168881 168882 168883 168884 168885 168886 168887 168888 168889 168890 168891 168892 168893 168894 168895 168896 168897 168898 168899 168900 168901 168902 168903 168904 168905 168906 168907 168908 168909 168910 168911 168912 168913 168914 168915 168916 168917 168918 168919 168920 168921 168922 168923 168924 168925 168926 168927 168928 168929 168930 168931 168932 168933 168934 168935 168936 168937 168938 168939 168940 168941 168942 168943 168944 168945 168946 168947 168948 168949 168950 168951 168952 168953 168954 168955 168956 168957 168958 168959 168960 168961 168962 168963 168964 168965 168966 168967 168968 168969 168970 168971 168972 168973 168974 168975 168976 168977 168978 168979 168980 168981 168982 168983 168984 168985 168986 168987 168988 168989 168990 168991 168992 168993 168994 168995 168996 168997 168998 168999 169000 169001 169002 169003 169004 169005 169006 169007 169008 169009 169010 169011 169012 169013 169014 169015 169016 169017 169018 169019 169020 169021 169022 169023 169024 169025 169026 169027 169028 169029 169030 169031 169032 169033 169034 169035 169036 169037 169038 169039 169040 169041 169042 169043 169044 169045 169046 169047 169048 169049 169050 | ** each step of the solver search algorithm to avoid exponential behavior. ** ** The value returned is a tuning parameter. Currently the value is: ** ** 18 for star queries ** 12 otherwise ** ** For the purposes of this heuristic, a star-query is defined as a query ** with a large central table that is joined using an INNER JOIN, ** not CROSS or OUTER JOINs, against four or more smaller tables. ** The central table is called the "fact" table. The smaller tables ** that get joined are "dimension tables". Also, any table that is ** self-joined cannot be a dimension table; we assume that dimension ** tables may only be joined against fact tables. ** ** SIDE EFFECT: (and really the whole point of this subroutine) ** ** If pWInfo describes a star-query, then the cost for SCANs of dimension ** WhereLoops is increased to be slightly larger than the cost of a SCAN ** in the fact table. Only SCAN costs are increased. SEARCH costs are ** unchanged. This heuristic helps keep fact tables in outer loops. Without ** this heuristic, paths with fact tables in outer loops tend to get pruned ** by the mxChoice limit on the number of paths, resulting in poor query ** plans. See the starschema1.test test module for examples of queries ** that need this heuristic to find good query plans. ** ** This heuristic can be completely disabled, so that no query is ** considered a star-query, using SQLITE_TESTCTRL_OPTIMIZATION to ** disable the SQLITE_StarQuery optimization. In the CLI, the command ** to do that is: ".testctrl opt -starquery". ** ** HISTORICAL NOTES: ** ** This optimization was first added on 2024-05-09 by check-in 38db9b5c83d. ** The original optimization reduced the cost and output size estimate for ** fact tables to help them move to outer loops. But months later (as people ** started upgrading) performance regression reports started caming in, ** including: ** ** forum post b18ef983e68d06d1 (2024-12-21) ** forum post 0025389d0860af82 (2025-01-14) ** forum post d87570a145599033 (2025-01-17) ** ** To address these, the criteria for a star-query was tightened to exclude ** cases where the fact and dimensions are separated by an outer join, and ** the affect of star-schema detection was changed to increase the rRun cost ** on just full table scans of dimension tables, rather than reducing costs ** in the all access methods of the fact table. */ static int computeMxChoice(WhereInfo *pWInfo){ int nLoop = pWInfo->nLevel; /* Number of terms in the join */ WhereLoop *pWLoop; /* For looping over WhereLoops */ #ifdef SQLITE_DEBUG /* The star-query detection code below makes use of the following ** properties of the WhereLoop list, so verify them before ** continuing: ** (1) .maskSelf is the bitmask corresponding to .iTab ** (2) The WhereLoop list is in ascending .iTab order */ for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ assert( pWLoop->maskSelf==MASKBIT(pWLoop->iTab) ); assert( pWLoop->pNextLoop==0 || pWLoop->iTab<=pWLoop->pNextLoop->iTab ); } #endif /* SQLITE_DEBUG */ if( nLoop>=5 && !pWInfo->bStarDone && OptimizationEnabled(pWInfo->pParse->db, SQLITE_StarQuery) ){ SrcItem *aFromTabs; /* All terms of the FROM clause */ int iFromIdx; /* Term of FROM clause is the candidate fact-table */ Bitmask m; /* Bitmask for candidate fact-table */ Bitmask mSelfJoin = 0; /* Tables that cannot be dimension tables */ WhereLoop *pStart; /* Where to start searching for dimension-tables */ pWInfo->bStarDone = 1; /* Only do this computation once */ /* Look for fact tables with four or more dimensions where the ** dimension tables are not separately from the fact tables by an outer ** or cross join. Adjust cost weights if found. */ assert( !pWInfo->bStarUsed ); aFromTabs = pWInfo->pTabList->a; pStart = pWInfo->pLoops; for(iFromIdx=0, m=1; iFromIdx<nLoop; iFromIdx++, m<<=1){ int nDep = 0; /* Number of dimension tables */ LogEst mxRun; /* Maximum SCAN cost of a fact table */ Bitmask mSeen = 0; /* Mask of dimension tables */ SrcItem *pFactTab; /* The candidate fact table */ pFactTab = aFromTabs + iFromIdx; if( (pFactTab->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ /* If the candidate fact-table is the right table of an outer join ** restrict the search for dimension-tables to be tables to the right ** of the fact-table. */ if( iFromIdx+4 > nLoop ) break; /* Impossible to reach nDep>=4 */ while( pStart && pStart->iTab<=iFromIdx ){ pStart = pStart->pNextLoop; } } for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){ if( (aFromTabs[pWLoop->iTab].fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ /* Fact-tables and dimension-tables cannot be separated by an ** outer join (at least for the definition of fact- and dimension- ** used by this heuristic). */ break; } if( (pWLoop->prereq & m)!=0 /* pWInfo depends on iFromIdx */ && (pWLoop->maskSelf & mSeen)==0 /* pWInfo not already a dependency */ && (pWLoop->maskSelf & mSelfJoin)==0 /* Not a self-join */ ){ if( aFromTabs[pWLoop->iTab].pSTab==pFactTab->pSTab ){ mSelfJoin |= m; }else{ nDep++; mSeen |= pWLoop->maskSelf; } } } if( nDep<=3 ) continue; /* If we reach this point, it means that pFactTab is a fact table ** with four or more dimensions connected by inner joins. Proceed ** to make cost adjustments. */ #ifdef WHERETRACE_ENABLED /* Make sure rStarDelta values are initialized */ if( !pWInfo->bStarUsed ){ for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ pWLoop->rStarDelta = 0; } } #endif pWInfo->bStarUsed = 1; /* Compute the maximum cost of any WhereLoop for the ** fact table plus one epsilon */ mxRun = LOGEST_MIN; for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){ if( pWLoop->iTab<iFromIdx ) continue; if( pWLoop->iTab>iFromIdx ) break; if( pWLoop->rRun>mxRun ) mxRun = pWLoop->rRun; } if( ALWAYS(mxRun<LOGEST_MAX) ) mxRun++; /* Increase the cost of table scans for dimension tables to be ** slightly more than the maximum cost of the fact table */ for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){ if( (pWLoop->maskSelf & mSeen)==0 ) continue; if( pWLoop->nLTerm ) continue; if( pWLoop->rRun<mxRun ){ #ifdef WHERETRACE_ENABLED /* 0x80000 */ if( sqlite3WhereTrace & 0x80000 ){ SrcItem *pDim = aFromTabs + pWLoop->iTab; sqlite3DebugPrintf( "Increase SCAN cost of dimension %s(%d) of fact %s(%d) to %d\n", pDim->zAlias ? pDim->zAlias: pDim->pSTab->zName, pWLoop->iTab, pFactTab->zAlias ? pFactTab->zAlias : pFactTab->pSTab->zName, iFromIdx, mxRun ); } pWLoop->rStarDelta = mxRun - pWLoop->rRun; #endif /* WHERETRACE_ENABLED */ pWLoop->rRun = mxRun; } } } #ifdef WHERETRACE_ENABLED /* 0x80000 */ if( (sqlite3WhereTrace & 0x80000)!=0 && pWInfo->bStarUsed ){ sqlite3DebugPrintf("WhereLoops changed by star-query heuristic:\n"); for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ if( pWLoop->rStarDelta ){ sqlite3WhereLoopPrint(pWLoop, &pWInfo->sWC); } } } #endif } return pWInfo->bStarUsed ? 18 : 12; } /* ** Two WhereLoop objects, pCandidate and pBaseline, are known to have the ** same cost. Look deep into each to see if pCandidate is even slightly ** better than pBaseline. Return false if it is, if pCandidate is is preferred. ** Return true if pBaseline is preferred or if we cannot tell the difference. ** ** Result Meaning ** -------- ---------------------------------------------------------- ** true We cannot tell the difference in pCandidate and pBaseline ** false pCandidate seems like a better choice than pBaseline */ static SQLITE_NOINLINE int whereLoopIsNoBetter( const WhereLoop *pCandidate, const WhereLoop *pBaseline ){ if( (pCandidate->wsFlags & WHERE_INDEXED)==0 ) return 1; if( (pBaseline->wsFlags & WHERE_INDEXED)==0 ) return 1; if( pCandidate->u.btree.pIndex->szIdxRow < pBaseline->u.btree.pIndex->szIdxRow ) return 0; return 1; } /* ** Given the list of WhereLoop objects at pWInfo->pLoops, this routine ** attempts to find the lowest cost path that visits each WhereLoop ** once. This path is then loaded into the pWInfo->a[].pWLoop fields. ** |
︙ | ︙ | |||
168793 168794 168795 168796 168797 168798 168799 | int nLoop; /* Number of terms in the join */ Parse *pParse; /* Parsing context */ int iLoop; /* Loop counter over the terms of the join */ int ii, jj; /* Loop counters */ int mxI = 0; /* Index of next entry to replace */ int nOrderBy; /* Number of ORDER BY clause terms */ LogEst mxCost = 0; /* Maximum cost of a set of paths */ | | | 169060 169061 169062 169063 169064 169065 169066 169067 169068 169069 169070 169071 169072 169073 169074 | int nLoop; /* Number of terms in the join */ Parse *pParse; /* Parsing context */ int iLoop; /* Loop counter over the terms of the join */ int ii, jj; /* Loop counters */ int mxI = 0; /* Index of next entry to replace */ int nOrderBy; /* Number of ORDER BY clause terms */ LogEst mxCost = 0; /* Maximum cost of a set of paths */ LogEst mxUnsort = 0; /* Maximum unsorted cost of a set of path */ int nTo, nFrom; /* Number of valid entries in aTo[] and aFrom[] */ WherePath *aFrom; /* All nFrom paths at the previous level */ WherePath *aTo; /* The nTo best paths at the current level */ WherePath *pFrom; /* An element of aFrom[] that we are working on */ WherePath *pTo; /* An element of aTo[] that we are working on */ WhereLoop *pWLoop; /* One of the WhereLoop objects */ WhereLoop **pX; /* Used to divy up the pSpace memory */ |
︙ | ︙ | |||
168822 168823 168824 168825 168826 168827 168828 168829 | ** 2 5 ** 3+ 12 or 18 // see computeMxChoice() */ if( nLoop<=1 ){ mxChoice = 1; }else if( nLoop==2 ){ mxChoice = 5; }else{ | > > | | 169089 169090 169091 169092 169093 169094 169095 169096 169097 169098 169099 169100 169101 169102 169103 169104 169105 169106 | ** 2 5 ** 3+ 12 or 18 // see computeMxChoice() */ if( nLoop<=1 ){ mxChoice = 1; }else if( nLoop==2 ){ mxChoice = 5; }else if( pParse->nErr ){ mxChoice = 1; }else{ mxChoice = computeMxChoice(pWInfo); } assert( nLoop<=pWInfo->pTabList->nSrc ); /* If nRowEst is zero and there is an ORDER BY clause, ignore it. In this ** case the purpose of this call is to estimate the number of rows returned ** by the overall query. Once this estimate has been obtained, the caller ** will invoke this function a second time, passing the estimate as the |
︙ | ︙ | |||
168890 168891 168892 168893 168894 168895 168896 | ** best paths at each generation */ for(iLoop=0; iLoop<nLoop; iLoop++){ nTo = 0; for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){ for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ LogEst rCost; /* Cost of path (pFrom+pWLoop) */ | | | | | | 169159 169160 169161 169162 169163 169164 169165 169166 169167 169168 169169 169170 169171 169172 169173 169174 169175 169176 169177 169178 169179 169180 169181 169182 169183 169184 169185 169186 169187 169188 169189 169190 169191 169192 169193 169194 169195 | ** best paths at each generation */ for(iLoop=0; iLoop<nLoop; iLoop++){ nTo = 0; for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){ for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ LogEst rCost; /* Cost of path (pFrom+pWLoop) */ LogEst rUnsort; /* Unsorted cost of (pFrom+pWLoop) */ i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */ Bitmask maskNew; /* Mask of src visited by (..) */ Bitmask revMask; /* Mask of rev-order loops for (..) */ if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue; if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue; if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){ /* Do not use an automatic index if the this loop is expected ** to run less than 1.25 times. It is tempting to also exclude ** automatic index usage on an outer loop, but sometimes an automatic ** index is useful in the outer loop of a correlated subquery. */ assert( 10==sqlite3LogEst(2) ); continue; } /* At this point, pWLoop is a candidate to be the next loop. ** Compute its cost */ rUnsort = pWLoop->rRun + pFrom->nRow; if( pWLoop->rSetup ){ rUnsort = sqlite3LogEstAdd(pWLoop->rSetup, rUnsort); } rUnsort = sqlite3LogEstAdd(rUnsort, pFrom->rUnsort); nOut = pFrom->nRow + pWLoop->nOut; maskNew = pFrom->maskLoop | pWLoop->maskSelf; isOrdered = pFrom->isOrdered; if( isOrdered<0 ){ revMask = 0; isOrdered = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, |
︙ | ︙ | |||
168934 168935 168936 168937 168938 168939 168940 | pWInfo, nRowEst, nOrderBy, isOrdered ); } /* TUNING: Add a small extra penalty (3) to sorting as an ** extra encouragement to the query planner to select a plan ** where the rows emerge in the correct order without any sorting ** required. */ | | | | | | 169203 169204 169205 169206 169207 169208 169209 169210 169211 169212 169213 169214 169215 169216 169217 169218 169219 169220 169221 169222 169223 169224 169225 | pWInfo, nRowEst, nOrderBy, isOrdered ); } /* TUNING: Add a small extra penalty (3) to sorting as an ** extra encouragement to the query planner to select a plan ** where the rows emerge in the correct order without any sorting ** required. */ rCost = sqlite3LogEstAdd(rUnsort, aSortCost[isOrdered]) + 3; WHERETRACE(0x002, ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n", aSortCost[isOrdered], (nOrderBy-isOrdered), nOrderBy, rUnsort, rCost)); }else{ rCost = rUnsort; rUnsort -= 2; /* TUNING: Slight bias in favor of no-sort plans */ } /* Check to see if pWLoop should be added to the set of ** mxChoice best-so-far paths. ** ** First look for an existing path among best-so-far paths ** that covers the same set of loops and has the same isOrdered |
︙ | ︙ | |||
168968 168969 168970 168971 168972 168973 168974 | testcase( jj==nTo-1 ); break; } } if( jj>=nTo ){ /* None of the existing best-so-far paths match the candidate. */ if( nTo>=mxChoice | | | | | | | | | | < | | | | | | | | > < > > > | | 169237 169238 169239 169240 169241 169242 169243 169244 169245 169246 169247 169248 169249 169250 169251 169252 169253 169254 169255 169256 169257 169258 169259 169260 169261 169262 169263 169264 169265 169266 169267 169268 169269 169270 169271 169272 169273 169274 169275 169276 169277 169278 169279 169280 169281 169282 169283 169284 169285 169286 169287 169288 169289 169290 169291 169292 169293 169294 169295 169296 169297 169298 169299 169300 169301 169302 169303 169304 169305 169306 169307 169308 169309 169310 169311 169312 169313 169314 169315 169316 169317 169318 169319 169320 169321 169322 169323 169324 169325 169326 169327 169328 169329 169330 169331 169332 169333 169334 169335 169336 169337 169338 169339 169340 169341 169342 169343 169344 169345 169346 169347 169348 169349 169350 169351 169352 169353 169354 169355 169356 169357 169358 169359 169360 169361 169362 169363 169364 169365 169366 169367 169368 169369 169370 169371 169372 169373 169374 169375 169376 169377 169378 169379 169380 | testcase( jj==nTo-1 ); break; } } if( jj>=nTo ){ /* None of the existing best-so-far paths match the candidate. */ if( nTo>=mxChoice && (rCost>mxCost || (rCost==mxCost && rUnsort>=mxUnsort)) ){ /* The current candidate is no better than any of the mxChoice ** paths currently in the best-so-far buffer. So discard ** this candidate as not viable. */ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf("Skip %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, isOrdered>=0 ? isOrdered+'0' : '?'); } #endif continue; } /* If we reach this points it means that the new candidate path ** needs to be added to the set of best-so-far paths. */ if( nTo<mxChoice ){ /* Increase the size of the aTo set by one */ jj = nTo++; }else{ /* New path replaces the prior worst to keep count below mxChoice */ jj = mxI; } pTo = &aTo[jj]; #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf("New %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, isOrdered>=0 ? isOrdered+'0' : '?'); } #endif }else{ /* Control reaches here if best-so-far path pTo=aTo[jj] covers the ** same set of loops and has the same isOrdered setting as the ** candidate path. Check to see if the candidate should replace ** pTo or if the candidate should be skipped. ** ** The conditional is an expanded vector comparison equivalent to: ** (pTo->rCost,pTo->nRow,pTo->rUnsort) <= (rCost,nOut,rUnsort) */ if( (pTo->rCost<rCost) || (pTo->rCost==rCost && pTo->nRow<nOut) || (pTo->rCost==rCost && pTo->nRow==nOut && pTo->rUnsort<rUnsort) || (pTo->rCost==rCost && pTo->nRow==nOut && pTo->rUnsort==rUnsort && whereLoopIsNoBetter(pWLoop, pTo->aLoop[iLoop]) ) ){ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( "Skip %s cost=%-3d,%3d,%3d order=%c", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, isOrdered>=0 ? isOrdered+'0' : '?'); sqlite3DebugPrintf(" vs %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, pTo->rUnsort, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); } #endif /* Discard the candidate path from further consideration */ testcase( pTo->rCost==rCost ); continue; } testcase( pTo->rCost==rCost+1 ); /* Control reaches here if the candidate path is better than the ** pTo path. Replace pTo with the candidate. */ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( "Update %s cost=%-3d,%3d,%3d order=%c", wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, isOrdered>=0 ? isOrdered+'0' : '?'); sqlite3DebugPrintf(" was %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, pTo->rUnsort, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); } #endif } /* pWLoop is a winner. Add it to the set of best so far */ pTo->maskLoop = pFrom->maskLoop | pWLoop->maskSelf; pTo->revLoop = revMask; pTo->nRow = nOut; pTo->rCost = rCost; pTo->rUnsort = rUnsort; pTo->isOrdered = isOrdered; memcpy(pTo->aLoop, pFrom->aLoop, sizeof(WhereLoop*)*iLoop); pTo->aLoop[iLoop] = pWLoop; if( nTo>=mxChoice ){ mxI = 0; mxCost = aTo[0].rCost; mxUnsort = aTo[0].nRow; for(jj=1, pTo=&aTo[1]; jj<mxChoice; jj++, pTo++){ if( pTo->rCost>mxCost || (pTo->rCost==mxCost && pTo->rUnsort>mxUnsort) ){ mxCost = pTo->rCost; mxUnsort = pTo->rUnsort; mxI = jj; } } } } } #ifdef WHERETRACE_ENABLED /* >=2 */ if( sqlite3WhereTrace & 0x02 ){ LogEst rMin, rFloor = 0; int nDone = 0; int nProgress; sqlite3DebugPrintf("---- after round %d ----\n", iLoop); do{ nProgress = 0; rMin = 0x7fff; for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){ if( pTo->rCost>rFloor && pTo->rCost<rMin ) rMin = pTo->rCost; } for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){ if( pTo->rCost==rMin ){ sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c", wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?'); if( pTo->isOrdered>0 ){ sqlite3DebugPrintf(" rev=0x%llx\n", pTo->revLoop); }else{ sqlite3DebugPrintf("\n"); } nDone++; nProgress++; } } rFloor = rMin; }while( nDone<nTo && nProgress>0 ); } #endif /* Swap the roles of aFrom and aTo for the next generation */ pFrom = aTo; aTo = aFrom; aFrom = pFrom; |
︙ | ︙ | |||
169189 169190 169191 169192 169193 169194 169195 | if( nOrder==pWInfo->pOrderBy->nExpr ){ pWInfo->sorted = 1; pWInfo->revMask = revMask; } } } | | > > > | 169460 169461 169462 169463 169464 169465 169466 169467 169468 169469 169470 169471 169472 169473 169474 169475 169476 169477 | if( nOrder==pWInfo->pOrderBy->nExpr ){ pWInfo->sorted = 1; pWInfo->revMask = revMask; } } } pWInfo->nRowOut = pFrom->nRow; #ifdef WHERETRACE_ENABLED pWInfo->rTotalCost = pFrom->rCost; #endif /* Free temporary memory and return success */ sqlite3StackFreeNN(pParse->db, pSpace); return SQLITE_OK; } /* |
︙ | ︙ | |||
169587 169588 169589 169590 169591 169592 169593 | "-> use Bloom-filter on loop %c because there are ~%.1e " "lookups into %s which has only ~%.1e rows\n", pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName, (double)sqlite3LogEstToInt(pTab->nRowLogEst))); } } nSearch += pLoop->nOut; | < | 169861 169862 169863 169864 169865 169866 169867 169868 169869 169870 169871 169872 169873 169874 | "-> use Bloom-filter on loop %c because there are ~%.1e " "lookups into %s which has only ~%.1e rows\n", pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName, (double)sqlite3LogEstToInt(pTab->nRowLogEst))); } } nSearch += pLoop->nOut; } } /* ** The index pIdx is used by a query and contains one or more expressions. ** In other words pIdx is an index on an expression. iIdxCur is the cursor ** number for the index and iDataCur is the cursor number for the corresponding |
︙ | ︙ | |||
170070 170071 170072 170073 170074 170075 170076 | } if( pParse->nErr ){ goto whereBeginError; } assert( db->mallocFailed==0 ); #ifdef WHERETRACE_ENABLED if( sqlite3WhereTrace ){ | | > | 170343 170344 170345 170346 170347 170348 170349 170350 170351 170352 170353 170354 170355 170356 170357 170358 | } if( pParse->nErr ){ goto whereBeginError; } assert( db->mallocFailed==0 ); #ifdef WHERETRACE_ENABLED if( sqlite3WhereTrace ){ sqlite3DebugPrintf("---- Solution cost=%d, nRow=%d", pWInfo->rTotalCost, pWInfo->nRowOut); if( pWInfo->nOBSat>0 ){ sqlite3DebugPrintf(" ORDERBY=%d,0x%llx", pWInfo->nOBSat, pWInfo->revMask); } switch( pWInfo->eDistinct ){ case WHERE_DISTINCT_UNIQUE: { sqlite3DebugPrintf(" DISTINCT=unique"); break; |
︙ | ︙ | |||
174328 174329 174330 174331 174332 174333 174334 | #define TK_SELECT_COLUMN 178 #define TK_IF_NULL_ROW 179 #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 #define TK_QNUMBER 183 #define TK_SPACE 184 | > | | 174602 174603 174604 174605 174606 174607 174608 174609 174610 174611 174612 174613 174614 174615 174616 174617 | #define TK_SELECT_COLUMN 178 #define TK_IF_NULL_ROW 179 #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 #define TK_QNUMBER 183 #define TK_SPACE 184 #define TK_COMMENT 185 #define TK_ILLEGAL 186 #endif /**************** End token definitions ***************************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. ** YYCODETYPE is the data type used to store the integer codes ** that represent terminal and non-terminal symbols. |
︙ | ︙ | |||
174393 174394 174395 174396 174397 174398 174399 | ** YY_MAX_DSTRCTR Maximum symbol value that has a destructor */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int | | | > | < < | > | | > | | | | | > | | | < < | | 174668 174669 174670 174671 174672 174673 174674 174675 174676 174677 174678 174679 174680 174681 174682 174683 174684 174685 174686 174687 174688 174689 174690 174691 174692 174693 174694 174695 174696 174697 174698 174699 174700 174701 174702 174703 174704 174705 174706 | ** YY_MAX_DSTRCTR Maximum symbol value that has a destructor */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int #define YYNOCODE 323 #define YYACTIONTYPE unsigned short int #define YYWILDCARD 102 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; sqlite3ParserTOKENTYPE yy0; u32 yy9; struct TrigEvent yy28; With* yy125; IdList* yy204; struct FrameBound yy205; TriggerStep* yy319; const char* yy342; Cte* yy361; ExprList* yy402; Upsert* yy403; OnOrUsing yy421; u8 yy444; struct {int value; int mask;} yy481; Window* yy483; int yy502; SrcList* yy563; Expr* yy590; Select* yy637; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 #endif #define sqlite3ParserARG_SDECL #define sqlite3ParserARG_PDECL #define sqlite3ParserARG_PARAM |
︙ | ︙ | |||
174439 174440 174441 174442 174443 174444 174445 | #define sqlite3ParserCTX_PARAM ,pParse #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; #define YYFALLBACK 1 #define YYNSTATE 583 #define YYNRULE 409 #define YYNRULE_WITH_ACTION 344 | | | | | 174714 174715 174716 174717 174718 174719 174720 174721 174722 174723 174724 174725 174726 174727 174728 174729 174730 174731 174732 174733 174734 174735 174736 174737 174738 | #define sqlite3ParserCTX_PARAM ,pParse #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; #define YYFALLBACK 1 #define YYNSTATE 583 #define YYNRULE 409 #define YYNRULE_WITH_ACTION 344 #define YYNTOKEN 187 #define YY_MAX_SHIFT 582 #define YY_MIN_SHIFTREDUCE 845 #define YY_MAX_SHIFTREDUCE 1253 #define YY_ERROR_ACTION 1254 #define YY_ACCEPT_ACTION 1255 #define YY_NO_ACTION 1256 #define YY_MIN_REDUCE 1257 #define YY_MAX_REDUCE 1665 #define YY_MIN_DSTRCTR 206 #define YY_MAX_DSTRCTR 320 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** ** Applications can choose to define yytestcase() in the %include section |
︙ | ︙ | |||
174545 174546 174547 174548 174549 174550 174551 | /* 40 */ 82, 82, 1577, 137, 138, 91, 7, 1228, 1228, 1063, /* 50 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 413, /* 60 */ 288, 288, 182, 288, 288, 481, 536, 288, 288, 130, /* 70 */ 127, 234, 432, 573, 525, 562, 573, 557, 562, 1290, /* 80 */ 573, 421, 562, 137, 138, 91, 559, 1228, 1228, 1063, /* 90 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 296, /* 100 */ 460, 398, 1249, 134, 134, 134, 134, 133, 133, 132, | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 174820 174821 174822 174823 174824 174825 174826 174827 174828 174829 174830 174831 174832 174833 174834 174835 174836 174837 174838 174839 174840 174841 174842 174843 174844 174845 174846 174847 174848 174849 174850 174851 174852 174853 174854 174855 174856 174857 174858 174859 174860 174861 174862 174863 174864 174865 174866 174867 174868 174869 174870 174871 174872 174873 174874 174875 174876 174877 174878 174879 174880 174881 174882 174883 174884 174885 174886 174887 174888 174889 174890 174891 174892 174893 174894 174895 174896 174897 174898 174899 174900 174901 174902 174903 174904 174905 174906 174907 174908 174909 174910 174911 174912 174913 174914 174915 174916 174917 174918 174919 174920 174921 174922 174923 174924 174925 174926 174927 174928 174929 174930 174931 174932 174933 174934 174935 174936 174937 174938 174939 174940 174941 174942 174943 174944 174945 174946 174947 174948 174949 174950 174951 174952 174953 174954 174955 174956 174957 174958 174959 174960 174961 174962 174963 174964 174965 174966 174967 174968 174969 174970 174971 174972 174973 174974 174975 174976 174977 174978 174979 174980 174981 174982 174983 174984 174985 174986 174987 174988 174989 174990 174991 174992 174993 174994 174995 174996 174997 174998 174999 175000 175001 175002 175003 175004 175005 175006 175007 175008 175009 175010 175011 175012 175013 175014 175015 175016 175017 175018 175019 175020 175021 175022 175023 175024 175025 175026 175027 175028 175029 175030 175031 175032 175033 175034 175035 175036 175037 175038 175039 175040 175041 175042 175043 175044 175045 175046 175047 175048 175049 175050 175051 175052 175053 175054 175055 175056 175057 175058 175059 175060 175061 175062 175063 175064 175065 175066 175067 175068 175069 175070 175071 175072 175073 175074 175075 175076 175077 175078 175079 175080 175081 175082 175083 175084 175085 175086 175087 175088 175089 175090 175091 175092 175093 175094 175095 175096 175097 175098 175099 175100 175101 175102 175103 175104 175105 175106 175107 175108 175109 175110 175111 175112 175113 175114 175115 175116 175117 175118 175119 175120 175121 175122 175123 175124 175125 175126 175127 175128 175129 175130 175131 175132 175133 175134 175135 175136 175137 175138 175139 175140 175141 175142 175143 175144 175145 175146 175147 175148 175149 175150 175151 175152 175153 175154 175155 175156 175157 175158 175159 175160 175161 175162 175163 175164 175165 175166 175167 175168 175169 175170 175171 175172 175173 175174 175175 175176 175177 175178 175179 175180 175181 175182 175183 175184 175185 175186 175187 175188 175189 175190 175191 175192 175193 175194 175195 175196 175197 175198 175199 175200 175201 175202 175203 175204 175205 175206 175207 175208 175209 175210 175211 175212 175213 175214 175215 175216 175217 175218 175219 175220 175221 175222 175223 175224 175225 175226 175227 175228 175229 175230 175231 175232 175233 175234 175235 175236 175237 175238 175239 175240 175241 175242 175243 175244 175245 175246 175247 175248 175249 175250 175251 175252 175253 175254 175255 175256 175257 175258 175259 175260 175261 175262 175263 175264 175265 175266 175267 175268 175269 175270 175271 175272 175273 175274 175275 175276 175277 175278 175279 175280 175281 175282 175283 175284 175285 175286 175287 175288 175289 175290 175291 175292 175293 175294 175295 175296 175297 175298 175299 175300 175301 175302 175303 175304 175305 175306 175307 175308 175309 175310 175311 175312 175313 175314 175315 175316 175317 175318 175319 175320 175321 175322 175323 175324 175325 175326 175327 175328 175329 175330 175331 175332 175333 175334 175335 175336 175337 175338 175339 175340 175341 175342 175343 175344 175345 175346 175347 175348 175349 175350 175351 175352 175353 175354 175355 175356 175357 175358 175359 175360 175361 175362 175363 175364 175365 175366 175367 175368 175369 175370 175371 175372 175373 175374 175375 175376 175377 175378 175379 175380 175381 175382 175383 175384 175385 175386 175387 175388 175389 175390 175391 175392 175393 175394 175395 175396 | /* 40 */ 82, 82, 1577, 137, 138, 91, 7, 1228, 1228, 1063, /* 50 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 413, /* 60 */ 288, 288, 182, 288, 288, 481, 536, 288, 288, 130, /* 70 */ 127, 234, 432, 573, 525, 562, 573, 557, 562, 1290, /* 80 */ 573, 421, 562, 137, 138, 91, 559, 1228, 1228, 1063, /* 90 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 296, /* 100 */ 460, 398, 1249, 134, 134, 134, 134, 133, 133, 132, /* 110 */ 132, 132, 131, 128, 451, 451, 1050, 1050, 1064, 1067, /* 120 */ 1255, 1, 1, 582, 2, 1259, 581, 1174, 1259, 1174, /* 130 */ 321, 413, 155, 321, 1584, 155, 379, 112, 481, 1341, /* 140 */ 456, 299, 1341, 134, 134, 134, 134, 133, 133, 132, /* 150 */ 132, 132, 131, 128, 451, 137, 138, 91, 498, 1228, /* 160 */ 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, /* 170 */ 136, 1204, 862, 1281, 288, 288, 283, 288, 288, 523, /* 180 */ 523, 1250, 139, 578, 7, 578, 1345, 573, 1169, 562, /* 190 */ 573, 1054, 562, 136, 136, 136, 136, 129, 573, 547, /* 200 */ 562, 1169, 245, 1541, 1169, 245, 133, 133, 132, 132, /* 210 */ 132, 131, 128, 451, 302, 134, 134, 134, 134, 133, /* 220 */ 133, 132, 132, 132, 131, 128, 451, 1575, 1204, 1205, /* 230 */ 1204, 7, 470, 550, 455, 413, 550, 455, 130, 127, /* 240 */ 234, 134, 134, 134, 134, 133, 133, 132, 132, 132, /* 250 */ 131, 128, 451, 136, 136, 136, 136, 538, 483, 137, /* 260 */ 138, 91, 1019, 1228, 1228, 1063, 1066, 1053, 1053, 135, /* 270 */ 135, 136, 136, 136, 136, 1085, 576, 1204, 132, 132, /* 280 */ 132, 131, 128, 451, 93, 214, 134, 134, 134, 134, /* 290 */ 133, 133, 132, 132, 132, 131, 128, 451, 401, 19, /* 300 */ 19, 134, 134, 134, 134, 133, 133, 132, 132, 132, /* 310 */ 131, 128, 451, 1498, 426, 267, 344, 467, 332, 134, /* 320 */ 134, 134, 134, 133, 133, 132, 132, 132, 131, 128, /* 330 */ 451, 1281, 576, 6, 1204, 1205, 1204, 257, 576, 413, /* 340 */ 511, 508, 507, 1279, 94, 1019, 464, 1204, 551, 551, /* 350 */ 506, 1224, 1571, 44, 38, 51, 51, 411, 576, 413, /* 360 */ 45, 51, 51, 137, 138, 91, 530, 1228, 1228, 1063, /* 370 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 398, /* 380 */ 1148, 82, 82, 137, 138, 91, 39, 1228, 1228, 1063, /* 390 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 344, /* 400 */ 44, 288, 288, 375, 1204, 1205, 1204, 209, 1204, 1224, /* 410 */ 320, 567, 471, 576, 573, 576, 562, 576, 316, 264, /* 420 */ 231, 46, 160, 134, 134, 134, 134, 133, 133, 132, /* 430 */ 132, 132, 131, 128, 451, 303, 82, 82, 82, 82, /* 440 */ 82, 82, 442, 134, 134, 134, 134, 133, 133, 132, /* 450 */ 132, 132, 131, 128, 451, 1582, 544, 320, 567, 1250, /* 460 */ 874, 1582, 380, 382, 413, 1204, 1205, 1204, 360, 182, /* 470 */ 288, 288, 1576, 557, 1339, 557, 7, 557, 1277, 472, /* 480 */ 346, 526, 531, 573, 556, 562, 439, 1511, 137, 138, /* 490 */ 91, 219, 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, /* 500 */ 136, 136, 136, 136, 465, 1511, 1513, 532, 413, 288, /* 510 */ 288, 423, 512, 288, 288, 411, 288, 288, 874, 130, /* 520 */ 127, 234, 573, 1107, 562, 1204, 573, 1107, 562, 573, /* 530 */ 560, 562, 137, 138, 91, 1293, 1228, 1228, 1063, 1066, /* 540 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 134, 134, /* 550 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 451, /* 560 */ 493, 503, 1292, 1204, 257, 288, 288, 511, 508, 507, /* 570 */ 1204, 1628, 1169, 123, 568, 275, 4, 506, 573, 1511, /* 580 */ 562, 331, 1204, 1205, 1204, 1169, 548, 548, 1169, 261, /* 590 */ 571, 7, 134, 134, 134, 134, 133, 133, 132, 132, /* 600 */ 132, 131, 128, 451, 108, 533, 130, 127, 234, 1204, /* 610 */ 448, 447, 413, 1451, 452, 983, 886, 96, 1598, 1233, /* 620 */ 1204, 1205, 1204, 984, 1235, 1450, 565, 1204, 1205, 1204, /* 630 */ 229, 522, 1234, 534, 1333, 1333, 137, 138, 91, 1449, /* 640 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, /* 650 */ 136, 136, 373, 1595, 971, 1040, 413, 1236, 418, 1236, /* 660 */ 879, 121, 121, 948, 373, 1595, 1204, 1205, 1204, 122, /* 670 */ 1204, 452, 577, 452, 363, 417, 1028, 882, 373, 1595, /* 680 */ 137, 138, 91, 462, 1228, 1228, 1063, 1066, 1053, 1053, /* 690 */ 135, 135, 136, 136, 136, 136, 134, 134, 134, 134, /* 700 */ 133, 133, 132, 132, 132, 131, 128, 451, 1028, 1028, /* 710 */ 1030, 1031, 35, 570, 570, 570, 197, 423, 1040, 198, /* 720 */ 1204, 123, 568, 1204, 4, 320, 567, 1204, 1205, 1204, /* 730 */ 40, 388, 576, 384, 882, 1029, 423, 1188, 571, 1028, /* 740 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, /* 750 */ 128, 451, 529, 1568, 1204, 19, 19, 1204, 575, 492, /* 760 */ 413, 157, 452, 489, 1187, 1331, 1331, 5, 1204, 949, /* 770 */ 431, 1028, 1028, 1030, 565, 22, 22, 1204, 1205, 1204, /* 780 */ 1204, 1205, 1204, 477, 137, 138, 91, 212, 1228, 1228, /* 790 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, /* 800 */ 1188, 48, 111, 1040, 413, 1204, 213, 970, 1041, 121, /* 810 */ 121, 1204, 1205, 1204, 1204, 1205, 1204, 122, 221, 452, /* 820 */ 577, 452, 44, 487, 1028, 1204, 1205, 1204, 137, 138, /* 830 */ 91, 378, 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, /* 840 */ 136, 136, 136, 136, 134, 134, 134, 134, 133, 133, /* 850 */ 132, 132, 132, 131, 128, 451, 1028, 1028, 1030, 1031, /* 860 */ 35, 461, 1204, 1205, 1204, 1569, 1040, 377, 214, 1149, /* 870 */ 1657, 535, 1657, 437, 902, 320, 567, 1568, 364, 320, /* 880 */ 567, 412, 329, 1029, 519, 1188, 3, 1028, 134, 134, /* 890 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 451, /* 900 */ 1659, 399, 1169, 307, 893, 307, 515, 576, 413, 214, /* 910 */ 498, 944, 1024, 540, 903, 1169, 943, 392, 1169, 1028, /* 920 */ 1028, 1030, 406, 298, 1204, 50, 1149, 1658, 413, 1658, /* 930 */ 145, 145, 137, 138, 91, 293, 1228, 1228, 1063, 1066, /* 940 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 1188, 1147, /* 950 */ 514, 1568, 137, 138, 91, 1505, 1228, 1228, 1063, 1066, /* 960 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 434, 323, /* 970 */ 435, 539, 111, 1506, 274, 291, 372, 517, 367, 516, /* 980 */ 262, 1204, 1205, 1204, 1574, 481, 363, 576, 7, 1569, /* 990 */ 1568, 377, 134, 134, 134, 134, 133, 133, 132, 132, /* 1000 */ 132, 131, 128, 451, 1568, 576, 1147, 576, 232, 576, /* 1010 */ 19, 19, 134, 134, 134, 134, 133, 133, 132, 132, /* 1020 */ 132, 131, 128, 451, 1169, 433, 576, 1207, 19, 19, /* 1030 */ 19, 19, 19, 19, 1627, 576, 911, 1169, 47, 120, /* 1040 */ 1169, 117, 413, 306, 498, 438, 1125, 206, 336, 19, /* 1050 */ 19, 1435, 49, 449, 449, 449, 1368, 315, 81, 81, /* 1060 */ 576, 304, 413, 1570, 207, 377, 137, 138, 91, 115, /* 1070 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, /* 1080 */ 136, 136, 576, 82, 82, 1207, 137, 138, 91, 1340, /* 1090 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, /* 1100 */ 136, 136, 1569, 386, 377, 82, 82, 463, 1126, 1552, /* 1110 */ 333, 463, 335, 131, 128, 451, 1569, 161, 377, 16, /* 1120 */ 317, 387, 428, 1127, 448, 447, 134, 134, 134, 134, /* 1130 */ 133, 133, 132, 132, 132, 131, 128, 451, 1128, 576, /* 1140 */ 1105, 10, 445, 267, 576, 1554, 134, 134, 134, 134, /* 1150 */ 133, 133, 132, 132, 132, 131, 128, 451, 532, 576, /* 1160 */ 922, 576, 19, 19, 576, 1573, 576, 147, 147, 7, /* 1170 */ 923, 1236, 498, 1236, 576, 487, 413, 552, 285, 1224, /* 1180 */ 969, 215, 82, 82, 66, 66, 1435, 67, 67, 21, /* 1190 */ 21, 1110, 1110, 495, 334, 297, 413, 53, 53, 297, /* 1200 */ 137, 138, 91, 119, 1228, 1228, 1063, 1066, 1053, 1053, /* 1210 */ 135, 135, 136, 136, 136, 136, 413, 1336, 1311, 446, /* 1220 */ 137, 138, 91, 227, 1228, 1228, 1063, 1066, 1053, 1053, /* 1230 */ 135, 135, 136, 136, 136, 136, 574, 1224, 936, 936, /* 1240 */ 137, 126, 91, 141, 1228, 1228, 1063, 1066, 1053, 1053, /* 1250 */ 135, 135, 136, 136, 136, 136, 533, 429, 472, 346, /* 1260 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, /* 1270 */ 128, 451, 576, 457, 233, 343, 1435, 403, 498, 1550, /* 1280 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, /* 1290 */ 128, 451, 576, 324, 576, 82, 82, 487, 576, 969, /* 1300 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, /* 1310 */ 128, 451, 288, 288, 546, 68, 68, 54, 54, 553, /* 1320 */ 413, 69, 69, 351, 6, 573, 944, 562, 410, 409, /* 1330 */ 1435, 943, 450, 545, 260, 259, 258, 576, 158, 576, /* 1340 */ 413, 222, 1180, 479, 969, 138, 91, 430, 1228, 1228, /* 1350 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, /* 1360 */ 70, 70, 71, 71, 576, 1126, 91, 576, 1228, 1228, /* 1370 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, /* 1380 */ 1127, 166, 850, 851, 852, 1282, 419, 72, 72, 108, /* 1390 */ 73, 73, 1310, 358, 1180, 1128, 576, 305, 576, 123, /* 1400 */ 568, 494, 4, 488, 134, 134, 134, 134, 133, 133, /* 1410 */ 132, 132, 132, 131, 128, 451, 571, 564, 534, 55, /* 1420 */ 55, 56, 56, 576, 134, 134, 134, 134, 133, 133, /* 1430 */ 132, 132, 132, 131, 128, 451, 576, 1104, 233, 1104, /* 1440 */ 452, 1602, 582, 2, 1259, 576, 57, 57, 576, 321, /* 1450 */ 576, 155, 565, 1435, 485, 353, 576, 356, 1341, 59, /* 1460 */ 59, 576, 44, 969, 569, 419, 576, 238, 60, 60, /* 1470 */ 261, 74, 74, 75, 75, 287, 231, 576, 1366, 76, /* 1480 */ 76, 1040, 420, 184, 20, 20, 576, 121, 121, 77, /* 1490 */ 77, 97, 218, 288, 288, 122, 125, 452, 577, 452, /* 1500 */ 143, 143, 1028, 576, 520, 576, 573, 576, 562, 144, /* 1510 */ 144, 474, 227, 1244, 478, 123, 568, 576, 4, 320, /* 1520 */ 567, 245, 411, 576, 443, 411, 78, 78, 62, 62, /* 1530 */ 79, 79, 571, 319, 1028, 1028, 1030, 1031, 35, 418, /* 1540 */ 63, 63, 576, 290, 411, 9, 80, 80, 1144, 576, /* 1550 */ 400, 576, 486, 455, 576, 1223, 452, 576, 325, 342, /* 1560 */ 576, 111, 576, 1188, 242, 64, 64, 473, 565, 576, /* 1570 */ 23, 576, 170, 170, 171, 171, 576, 87, 87, 328, /* 1580 */ 65, 65, 542, 83, 83, 146, 146, 541, 123, 568, /* 1590 */ 341, 4, 84, 84, 168, 168, 576, 1040, 576, 148, /* 1600 */ 148, 576, 1380, 121, 121, 571, 1021, 576, 266, 576, /* 1610 */ 424, 122, 576, 452, 577, 452, 576, 553, 1028, 142, /* 1620 */ 142, 169, 169, 576, 162, 162, 528, 889, 371, 452, /* 1630 */ 152, 152, 151, 151, 1379, 149, 149, 109, 370, 150, /* 1640 */ 150, 565, 576, 480, 576, 266, 86, 86, 576, 1092, /* 1650 */ 1028, 1028, 1030, 1031, 35, 542, 482, 576, 266, 466, /* 1660 */ 543, 123, 568, 1616, 4, 88, 88, 85, 85, 475, /* 1670 */ 1040, 52, 52, 222, 901, 900, 121, 121, 571, 1188, /* 1680 */ 58, 58, 244, 1032, 122, 889, 452, 577, 452, 908, /* 1690 */ 909, 1028, 300, 347, 504, 111, 263, 361, 165, 111, /* 1700 */ 111, 1088, 452, 263, 974, 1153, 266, 1092, 986, 987, /* 1710 */ 942, 939, 125, 125, 565, 1103, 872, 1103, 159, 941, /* 1720 */ 1309, 125, 1557, 1028, 1028, 1030, 1031, 35, 542, 337, /* 1730 */ 1530, 205, 1529, 541, 499, 1589, 490, 348, 1376, 352, /* 1740 */ 355, 1032, 357, 1040, 359, 1324, 1308, 366, 563, 121, /* 1750 */ 121, 376, 1188, 1389, 1434, 1362, 280, 122, 1374, 452, /* 1760 */ 577, 452, 167, 1439, 1028, 1289, 1280, 1268, 1267, 1269, /* 1770 */ 1609, 1359, 312, 313, 314, 397, 12, 237, 224, 1421, /* 1780 */ 295, 1416, 1409, 1426, 339, 484, 340, 509, 1371, 1612, /* 1790 */ 1372, 1425, 1244, 404, 301, 228, 1028, 1028, 1030, 1031, /* 1800 */ 35, 1601, 1192, 454, 345, 1307, 292, 369, 1502, 1501, /* 1810 */ 270, 396, 396, 395, 277, 393, 1370, 1369, 859, 1549, /* 1820 */ 186, 123, 568, 235, 4, 1188, 391, 210, 211, 223, /* 1830 */ 1547, 239, 1241, 327, 422, 96, 220, 195, 571, 180, /* 1840 */ 188, 326, 468, 469, 190, 191, 502, 192, 193, 566, /* 1850 */ 247, 109, 1430, 491, 199, 251, 102, 281, 402, 476, /* 1860 */ 405, 1496, 452, 497, 253, 1422, 13, 1428, 14, 1427, /* 1870 */ 203, 1507, 241, 500, 565, 354, 407, 92, 95, 1270, /* 1880 */ 175, 254, 518, 43, 1327, 255, 1326, 1325, 436, 1518, /* 1890 */ 350, 1318, 104, 229, 893, 1626, 440, 441, 1625, 408, /* 1900 */ 240, 1296, 268, 1040, 310, 269, 1297, 527, 444, 121, /* 1910 */ 121, 368, 1295, 1594, 1624, 311, 1394, 122, 1317, 452, /* 1920 */ 577, 452, 374, 1580, 1028, 1393, 140, 553, 11, 90, /* 1930 */ 568, 385, 4, 116, 318, 414, 1579, 110, 1483, 537, /* 1940 */ 320, 567, 1350, 555, 42, 579, 571, 1349, 1198, 383, /* 1950 */ 276, 390, 216, 389, 278, 279, 1028, 1028, 1030, 1031, /* 1960 */ 35, 172, 580, 1265, 458, 1260, 415, 416, 185, 156, /* 1970 */ 452, 1534, 1535, 173, 1533, 1532, 89, 308, 225, 226, /* 1980 */ 846, 174, 565, 453, 217, 1188, 322, 236, 1102, 154, /* 1990 */ 1100, 330, 187, 176, 1223, 243, 189, 925, 338, 246, /* 2000 */ 1116, 194, 177, 425, 178, 427, 98, 196, 99, 100, /* 2010 */ 101, 1040, 179, 1119, 1115, 248, 249, 121, 121, 163, /* 2020 */ 24, 250, 349, 1238, 496, 122, 1108, 452, 577, 452, /* 2030 */ 1192, 454, 1028, 266, 292, 200, 252, 201, 861, 396, /* 2040 */ 396, 395, 277, 393, 15, 501, 859, 370, 292, 256, /* 2050 */ 202, 554, 505, 396, 396, 395, 277, 393, 103, 239, /* 2060 */ 859, 327, 25, 26, 1028, 1028, 1030, 1031, 35, 326, /* 2070 */ 362, 510, 891, 239, 365, 327, 513, 904, 105, 309, /* 2080 */ 164, 181, 27, 326, 106, 521, 107, 1185, 1069, 1155, /* 2090 */ 17, 1154, 230, 1188, 284, 286, 265, 204, 125, 1171, /* 2100 */ 241, 28, 978, 972, 29, 41, 1175, 1179, 175, 1173, /* 2110 */ 30, 43, 31, 8, 241, 1178, 32, 1160, 208, 549, /* 2120 */ 33, 111, 175, 1083, 1070, 43, 1068, 1072, 240, 113, /* 2130 */ 114, 34, 561, 118, 1124, 271, 1073, 36, 18, 572, /* 2140 */ 1033, 873, 240, 124, 37, 935, 272, 273, 1617, 183, /* 2150 */ 153, 394, 1194, 1193, 1256, 1256, 1256, 1256, 1256, 1256, /* 2160 */ 1256, 1256, 1256, 414, 1256, 1256, 1256, 1256, 320, 567, /* 2170 */ 1256, 1256, 1256, 1256, 1256, 1256, 1256, 414, 1256, 1256, /* 2180 */ 1256, 1256, 320, 567, 1256, 1256, 1256, 1256, 1256, 1256, /* 2190 */ 1256, 1256, 458, 1256, 1256, 1256, 1256, 1256, 1256, 1256, /* 2200 */ 1256, 1256, 1256, 1256, 1256, 1256, 458, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 277, 278, 279, 241, 242, 225, 195, 227, 195, 241, /* 10 */ 242, 195, 217, 221, 195, 235, 254, 195, 256, 19, /* 20 */ 225, 298, 254, 195, 256, 206, 213, 214, 206, 218, /* 30 */ 219, 31, 206, 195, 218, 219, 195, 218, 219, 39, /* 40 */ 218, 219, 313, 43, 44, 45, 317, 47, 48, 49, /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 19, /* 60 */ 241, 242, 195, 241, 242, 195, 255, 241, 242, 277, /* 70 */ 278, 279, 234, 254, 255, 256, 254, 255, 256, 218, /* 80 */ 254, 240, 256, 43, 44, 45, 264, 47, 48, 49, /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 271, /* 100 */ 287, 22, 23, 103, 104, 105, 106, 107, 108, 109, /* 110 */ 110, 111, 112, 113, 114, 114, 47, 48, 49, 50, /* 120 */ 187, 188, 189, 190, 191, 192, 190, 87, 192, 89, /* 130 */ 197, 19, 199, 197, 318, 199, 320, 25, 195, 206, /* 140 */ 299, 271, 206, 103, 104, 105, 106, 107, 108, 109, /* 150 */ 110, 111, 112, 113, 114, 43, 44, 45, 195, 47, /* 160 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, /* 170 */ 58, 60, 21, 195, 241, 242, 215, 241, 242, 312, /* 180 */ 313, 102, 70, 205, 317, 207, 242, 254, 77, 256, /* 190 */ 254, 122, 256, 55, 56, 57, 58, 59, 254, 88, /* 200 */ 256, 90, 269, 240, 93, 269, 107, 108, 109, 110, /* 210 */ 111, 112, 113, 114, 271, 103, 104, 105, 106, 107, /* 220 */ 108, 109, 110, 111, 112, 113, 114, 313, 117, 118, /* 230 */ 119, 317, 81, 195, 301, 19, 195, 301, 277, 278, /* 240 */ 279, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 250 */ 112, 113, 114, 55, 56, 57, 58, 146, 195, 43, /* 260 */ 44, 45, 74, 47, 48, 49, 50, 51, 52, 53, /* 270 */ 54, 55, 56, 57, 58, 124, 195, 60, 109, 110, /* 280 */ 111, 112, 113, 114, 68, 195, 103, 104, 105, 106, /* 290 */ 107, 108, 109, 110, 111, 112, 113, 114, 208, 218, /* 300 */ 219, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 310 */ 112, 113, 114, 162, 233, 24, 128, 129, 130, 103, /* 320 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, /* 330 */ 114, 195, 195, 215, 117, 118, 119, 120, 195, 19, /* 340 */ 123, 124, 125, 207, 24, 74, 246, 60, 310, 311, /* 350 */ 133, 60, 311, 82, 22, 218, 219, 257, 195, 19, /* 360 */ 73, 218, 219, 43, 44, 45, 206, 47, 48, 49, /* 370 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 22, /* 380 */ 23, 218, 219, 43, 44, 45, 54, 47, 48, 49, /* 390 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 128, /* 400 */ 82, 241, 242, 195, 117, 118, 119, 289, 60, 118, /* 410 */ 139, 140, 294, 195, 254, 195, 256, 195, 255, 259, /* 420 */ 260, 73, 22, 103, 104, 105, 106, 107, 108, 109, /* 430 */ 110, 111, 112, 113, 114, 206, 218, 219, 218, 219, /* 440 */ 218, 219, 234, 103, 104, 105, 106, 107, 108, 109, /* 450 */ 110, 111, 112, 113, 114, 318, 319, 139, 140, 102, /* 460 */ 60, 318, 319, 221, 19, 117, 118, 119, 23, 195, /* 470 */ 241, 242, 313, 255, 206, 255, 317, 255, 206, 129, /* 480 */ 130, 206, 264, 254, 264, 256, 264, 195, 43, 44, /* 490 */ 45, 151, 47, 48, 49, 50, 51, 52, 53, 54, /* 500 */ 55, 56, 57, 58, 246, 213, 214, 19, 19, 241, /* 510 */ 242, 195, 23, 241, 242, 257, 241, 242, 118, 277, /* 520 */ 278, 279, 254, 29, 256, 60, 254, 33, 256, 254, /* 530 */ 206, 256, 43, 44, 45, 218, 47, 48, 49, 50, /* 540 */ 51, 52, 53, 54, 55, 56, 57, 58, 103, 104, /* 550 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, /* 560 */ 66, 19, 218, 60, 120, 241, 242, 123, 124, 125, /* 570 */ 60, 232, 77, 19, 20, 26, 22, 133, 254, 287, /* 580 */ 256, 265, 117, 118, 119, 90, 312, 313, 93, 47, /* 590 */ 36, 317, 103, 104, 105, 106, 107, 108, 109, 110, /* 600 */ 111, 112, 113, 114, 116, 117, 277, 278, 279, 60, /* 610 */ 107, 108, 19, 276, 60, 31, 23, 152, 195, 116, /* 620 */ 117, 118, 119, 39, 121, 276, 72, 117, 118, 119, /* 630 */ 166, 167, 129, 145, 237, 238, 43, 44, 45, 276, /* 640 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, /* 650 */ 57, 58, 315, 316, 144, 101, 19, 154, 116, 156, /* 660 */ 23, 107, 108, 109, 315, 316, 117, 118, 119, 115, /* 670 */ 60, 117, 118, 119, 132, 200, 122, 60, 315, 316, /* 680 */ 43, 44, 45, 272, 47, 48, 49, 50, 51, 52, /* 690 */ 53, 54, 55, 56, 57, 58, 103, 104, 105, 106, /* 700 */ 107, 108, 109, 110, 111, 112, 113, 114, 154, 155, /* 710 */ 156, 157, 158, 212, 213, 214, 22, 195, 101, 22, /* 720 */ 60, 19, 20, 60, 22, 139, 140, 117, 118, 119, /* 730 */ 22, 251, 195, 253, 117, 118, 195, 183, 36, 122, /* 740 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, /* 750 */ 113, 114, 195, 195, 60, 218, 219, 60, 195, 284, /* 760 */ 19, 25, 60, 288, 23, 237, 238, 22, 60, 109, /* 770 */ 233, 154, 155, 156, 72, 218, 219, 117, 118, 119, /* 780 */ 117, 118, 119, 116, 43, 44, 45, 265, 47, 48, /* 790 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, /* 800 */ 183, 243, 25, 101, 19, 60, 265, 144, 23, 107, /* 810 */ 108, 117, 118, 119, 117, 118, 119, 115, 151, 117, /* 820 */ 118, 119, 82, 195, 122, 117, 118, 119, 43, 44, /* 830 */ 45, 195, 47, 48, 49, 50, 51, 52, 53, 54, /* 840 */ 55, 56, 57, 58, 103, 104, 105, 106, 107, 108, /* 850 */ 109, 110, 111, 112, 113, 114, 154, 155, 156, 157, /* 860 */ 158, 121, 117, 118, 119, 307, 101, 309, 195, 22, /* 870 */ 23, 195, 25, 19, 35, 139, 140, 195, 24, 139, /* 880 */ 140, 208, 195, 118, 109, 183, 22, 122, 103, 104, /* 890 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, /* 900 */ 304, 305, 77, 230, 127, 232, 67, 195, 19, 195, /* 910 */ 195, 136, 23, 88, 75, 90, 141, 203, 93, 154, /* 920 */ 155, 156, 208, 295, 60, 243, 22, 23, 19, 25, /* 930 */ 218, 219, 43, 44, 45, 100, 47, 48, 49, 50, /* 940 */ 51, 52, 53, 54, 55, 56, 57, 58, 183, 102, /* 950 */ 96, 195, 43, 44, 45, 240, 47, 48, 49, 50, /* 960 */ 51, 52, 53, 54, 55, 56, 57, 58, 114, 134, /* 970 */ 131, 146, 25, 286, 120, 121, 122, 123, 124, 125, /* 980 */ 126, 117, 118, 119, 313, 195, 132, 195, 317, 307, /* 990 */ 195, 309, 103, 104, 105, 106, 107, 108, 109, 110, /* 1000 */ 111, 112, 113, 114, 195, 195, 102, 195, 195, 195, /* 1010 */ 218, 219, 103, 104, 105, 106, 107, 108, 109, 110, /* 1020 */ 111, 112, 113, 114, 77, 233, 195, 60, 218, 219, /* 1030 */ 218, 219, 218, 219, 23, 195, 25, 90, 243, 159, /* 1040 */ 93, 161, 19, 233, 195, 233, 23, 233, 16, 218, /* 1050 */ 219, 195, 243, 212, 213, 214, 262, 263, 218, 219, /* 1060 */ 195, 271, 19, 307, 233, 309, 43, 44, 45, 160, /* 1070 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, /* 1080 */ 57, 58, 195, 218, 219, 118, 43, 44, 45, 240, /* 1090 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, /* 1100 */ 57, 58, 307, 195, 309, 218, 219, 263, 12, 195, /* 1110 */ 78, 267, 80, 112, 113, 114, 307, 22, 309, 24, /* 1120 */ 255, 281, 266, 27, 107, 108, 103, 104, 105, 106, /* 1130 */ 107, 108, 109, 110, 111, 112, 113, 114, 42, 195, /* 1140 */ 11, 22, 255, 24, 195, 195, 103, 104, 105, 106, /* 1150 */ 107, 108, 109, 110, 111, 112, 113, 114, 19, 195, /* 1160 */ 64, 195, 218, 219, 195, 313, 195, 218, 219, 317, /* 1170 */ 74, 154, 195, 156, 195, 195, 19, 233, 23, 60, /* 1180 */ 25, 24, 218, 219, 218, 219, 195, 218, 219, 218, /* 1190 */ 219, 128, 129, 130, 162, 263, 19, 218, 219, 267, /* 1200 */ 43, 44, 45, 160, 47, 48, 49, 50, 51, 52, /* 1210 */ 53, 54, 55, 56, 57, 58, 19, 240, 228, 255, /* 1220 */ 43, 44, 45, 25, 47, 48, 49, 50, 51, 52, /* 1230 */ 53, 54, 55, 56, 57, 58, 135, 118, 137, 138, /* 1240 */ 43, 44, 45, 22, 47, 48, 49, 50, 51, 52, /* 1250 */ 53, 54, 55, 56, 57, 58, 117, 266, 129, 130, /* 1260 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, /* 1270 */ 113, 114, 195, 195, 119, 295, 195, 206, 195, 195, /* 1280 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, /* 1290 */ 113, 114, 195, 195, 195, 218, 219, 195, 195, 144, /* 1300 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, /* 1310 */ 113, 114, 241, 242, 67, 218, 219, 218, 219, 146, /* 1320 */ 19, 218, 219, 240, 215, 254, 136, 256, 107, 108, /* 1330 */ 195, 141, 255, 86, 128, 129, 130, 195, 165, 195, /* 1340 */ 19, 143, 95, 272, 25, 44, 45, 266, 47, 48, /* 1350 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, /* 1360 */ 218, 219, 218, 219, 195, 12, 45, 195, 47, 48, /* 1370 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, /* 1380 */ 27, 23, 7, 8, 9, 210, 211, 218, 219, 116, /* 1390 */ 218, 219, 228, 16, 147, 42, 195, 295, 195, 19, /* 1400 */ 20, 266, 22, 294, 103, 104, 105, 106, 107, 108, /* 1410 */ 109, 110, 111, 112, 113, 114, 36, 64, 145, 218, /* 1420 */ 219, 218, 219, 195, 103, 104, 105, 106, 107, 108, /* 1430 */ 109, 110, 111, 112, 113, 114, 195, 154, 119, 156, /* 1440 */ 60, 189, 190, 191, 192, 195, 218, 219, 195, 197, /* 1450 */ 195, 199, 72, 195, 19, 78, 195, 80, 206, 218, /* 1460 */ 219, 195, 82, 144, 210, 211, 195, 15, 218, 219, /* 1470 */ 47, 218, 219, 218, 219, 259, 260, 195, 261, 218, /* 1480 */ 219, 101, 302, 303, 218, 219, 195, 107, 108, 218, /* 1490 */ 219, 150, 151, 241, 242, 115, 25, 117, 118, 119, /* 1500 */ 218, 219, 122, 195, 146, 195, 254, 195, 256, 218, /* 1510 */ 219, 246, 25, 61, 246, 19, 20, 195, 22, 139, /* 1520 */ 140, 269, 257, 195, 266, 257, 218, 219, 218, 219, /* 1530 */ 218, 219, 36, 246, 154, 155, 156, 157, 158, 116, /* 1540 */ 218, 219, 195, 22, 257, 49, 218, 219, 23, 195, /* 1550 */ 25, 195, 117, 301, 195, 25, 60, 195, 195, 23, /* 1560 */ 195, 25, 195, 183, 24, 218, 219, 130, 72, 195, /* 1570 */ 22, 195, 218, 219, 218, 219, 195, 218, 219, 195, /* 1580 */ 218, 219, 86, 218, 219, 218, 219, 91, 19, 20, /* 1590 */ 153, 22, 218, 219, 218, 219, 195, 101, 195, 218, /* 1600 */ 219, 195, 195, 107, 108, 36, 23, 195, 25, 195, /* 1610 */ 62, 115, 195, 117, 118, 119, 195, 146, 122, 218, /* 1620 */ 219, 218, 219, 195, 218, 219, 19, 60, 122, 60, /* 1630 */ 218, 219, 218, 219, 195, 218, 219, 150, 132, 218, /* 1640 */ 219, 72, 195, 23, 195, 25, 218, 219, 195, 60, /* 1650 */ 154, 155, 156, 157, 158, 86, 23, 195, 25, 195, /* 1660 */ 91, 19, 20, 142, 22, 218, 219, 218, 219, 130, /* 1670 */ 101, 218, 219, 143, 121, 122, 107, 108, 36, 183, /* 1680 */ 218, 219, 142, 60, 115, 118, 117, 118, 119, 7, /* 1690 */ 8, 122, 153, 23, 23, 25, 25, 23, 23, 25, /* 1700 */ 25, 23, 60, 25, 23, 98, 25, 118, 84, 85, /* 1710 */ 23, 23, 25, 25, 72, 154, 23, 156, 25, 23, /* 1720 */ 228, 25, 195, 154, 155, 156, 157, 158, 86, 195, /* 1730 */ 195, 258, 195, 91, 291, 322, 195, 195, 195, 195, /* 1740 */ 195, 118, 195, 101, 195, 195, 195, 195, 238, 107, /* 1750 */ 108, 195, 183, 195, 195, 195, 290, 115, 195, 117, /* 1760 */ 118, 119, 244, 195, 122, 195, 195, 195, 195, 195, /* 1770 */ 195, 258, 258, 258, 258, 193, 245, 300, 216, 274, /* 1780 */ 247, 270, 270, 274, 296, 296, 248, 222, 262, 198, /* 1790 */ 262, 274, 61, 274, 248, 231, 154, 155, 156, 157, /* 1800 */ 158, 0, 1, 2, 247, 227, 5, 221, 221, 221, /* 1810 */ 142, 10, 11, 12, 13, 14, 262, 262, 17, 202, /* 1820 */ 300, 19, 20, 300, 22, 183, 247, 251, 251, 245, /* 1830 */ 202, 30, 38, 32, 202, 152, 151, 22, 36, 43, /* 1840 */ 236, 40, 18, 202, 239, 239, 18, 239, 239, 283, /* 1850 */ 201, 150, 236, 202, 236, 201, 159, 202, 248, 248, /* 1860 */ 248, 248, 60, 63, 201, 275, 273, 275, 273, 275, /* 1870 */ 22, 286, 71, 223, 72, 202, 223, 297, 297, 202, /* 1880 */ 79, 201, 116, 82, 220, 201, 220, 220, 65, 293, /* 1890 */ 292, 229, 22, 166, 127, 226, 24, 114, 226, 223, /* 1900 */ 99, 222, 202, 101, 285, 92, 220, 308, 83, 107, /* 1910 */ 108, 220, 220, 316, 220, 285, 268, 115, 229, 117, /* 1920 */ 118, 119, 223, 321, 122, 268, 149, 146, 22, 19, /* 1930 */ 20, 202, 22, 159, 282, 134, 321, 148, 280, 147, /* 1940 */ 139, 140, 252, 141, 25, 204, 36, 252, 13, 251, /* 1950 */ 196, 248, 250, 249, 196, 6, 154, 155, 156, 157, /* 1960 */ 158, 209, 194, 194, 163, 194, 306, 306, 303, 224, /* 1970 */ 60, 215, 215, 209, 215, 215, 215, 224, 216, 216, /* 1980 */ 4, 209, 72, 3, 22, 183, 164, 15, 23, 16, /* 1990 */ 23, 140, 152, 131, 25, 24, 143, 20, 16, 145, /* 2000 */ 1, 143, 131, 62, 131, 37, 54, 152, 54, 54, /* 2010 */ 54, 101, 131, 117, 1, 34, 142, 107, 108, 5, /* 2020 */ 22, 116, 162, 76, 41, 115, 69, 117, 118, 119, /* 2030 */ 1, 2, 122, 25, 5, 69, 142, 116, 20, 10, /* 2040 */ 11, 12, 13, 14, 24, 19, 17, 132, 5, 126, /* 2050 */ 22, 141, 68, 10, 11, 12, 13, 14, 22, 30, /* 2060 */ 17, 32, 22, 22, 154, 155, 156, 157, 158, 40, /* 2070 */ 23, 68, 60, 30, 24, 32, 97, 28, 22, 68, /* 2080 */ 23, 37, 34, 40, 150, 22, 25, 23, 23, 23, /* 2090 */ 22, 98, 142, 183, 23, 23, 34, 22, 25, 89, /* 2100 */ 71, 34, 117, 144, 34, 22, 76, 76, 79, 87, /* 2110 */ 34, 82, 34, 44, 71, 94, 34, 23, 25, 24, /* 2120 */ 34, 25, 79, 23, 23, 82, 23, 23, 99, 143, /* 2130 */ 143, 22, 25, 25, 23, 22, 11, 22, 22, 25, /* 2140 */ 23, 23, 99, 22, 22, 136, 142, 142, 142, 25, /* 2150 */ 23, 15, 1, 1, 323, 323, 323, 323, 323, 323, /* 2160 */ 323, 323, 323, 134, 323, 323, 323, 323, 139, 140, /* 2170 */ 323, 323, 323, 323, 323, 323, 323, 134, 323, 323, /* 2180 */ 323, 323, 139, 140, 323, 323, 323, 323, 323, 323, /* 2190 */ 323, 323, 163, 323, 323, 323, 323, 323, 323, 323, /* 2200 */ 323, 323, 323, 323, 323, 323, 163, 323, 323, 323, /* 2210 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2220 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2230 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2240 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2250 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2260 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2270 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2280 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2290 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2300 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2310 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2320 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2330 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, /* 2340 */ 323, 187, 187, 187, 187, 187, 187, 187, 187, 187, /* 2350 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, /* 2360 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, /* 2370 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, /* 2380 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, /* 2390 */ 187, 187, 187, 187, }; #define YY_SHIFT_COUNT (582) #define YY_SHIFT_MIN (0) #define YY_SHIFT_MAX (2152) static const unsigned short int yy_shift_ofst[] = { /* 0 */ 2029, 1801, 2043, 1380, 1380, 318, 271, 1496, 1569, 1642, /* 10 */ 702, 702, 702, 740, 318, 318, 318, 318, 318, 0, /* 20 */ 0, 216, 1177, 702, 702, 702, 702, 702, 702, 702, /* 30 */ 702, 702, 702, 702, 702, 702, 702, 702, 503, 503, /* 40 */ 111, 111, 217, 287, 348, 610, 610, 736, 736, 736, /* 50 */ 736, 40, 112, 320, 340, 445, 489, 593, 637, 741, /* 60 */ 785, 889, 909, 1023, 1043, 1157, 1177, 1177, 1177, 1177, /* 70 */ 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, /* 80 */ 1177, 1177, 1177, 1177, 1197, 1177, 1301, 1321, 1321, 554, /* 90 */ 1802, 1910, 702, 702, 702, 702, 702, 702, 702, 702, /* 100 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, /* 110 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, /* 120 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, /* 130 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, /* 140 */ 702, 702, 138, 198, 198, 198, 198, 198, 198, 198, /* 150 */ 183, 99, 169, 549, 610, 151, 542, 610, 610, 1017, /* 160 */ 1017, 610, 1001, 350, 464, 464, 464, 586, 1, 1, /* 170 */ 2207, 2207, 854, 854, 854, 465, 694, 694, 694, 694, /* 180 */ 1096, 1096, 825, 549, 847, 904, 610, 610, 610, 610, /* 190 */ 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, /* 200 */ 610, 610, 610, 610, 610, 488, 947, 947, 610, 1129, /* 210 */ 495, 495, 1139, 1139, 967, 967, 1173, 2207, 2207, 2207, /* 220 */ 2207, 2207, 2207, 2207, 617, 765, 765, 697, 444, 708, /* 230 */ 660, 745, 510, 663, 864, 610, 610, 610, 610, 610, /* 240 */ 610, 610, 610, 610, 610, 188, 610, 610, 610, 610, /* 250 */ 610, 610, 610, 610, 610, 610, 610, 610, 839, 839, /* 260 */ 839, 610, 610, 610, 1155, 610, 610, 610, 1119, 1247, /* 270 */ 610, 1353, 610, 610, 610, 610, 610, 610, 610, 610, /* 280 */ 1063, 494, 1101, 291, 291, 291, 291, 1319, 1101, 1101, /* 290 */ 775, 1221, 1375, 1452, 667, 1341, 1198, 1341, 1435, 1487, /* 300 */ 667, 667, 1487, 667, 1198, 1435, 777, 1011, 1423, 584, /* 310 */ 584, 584, 1273, 1273, 1273, 1273, 1471, 1471, 880, 1530, /* 320 */ 1190, 1095, 1731, 1731, 1668, 1668, 1794, 1794, 1668, 1683, /* 330 */ 1685, 1815, 1796, 1824, 1824, 1824, 1824, 1668, 1828, 1701, /* 340 */ 1685, 1685, 1701, 1815, 1796, 1701, 1796, 1701, 1668, 1828, /* 350 */ 1697, 1800, 1668, 1828, 1848, 1668, 1828, 1668, 1828, 1848, /* 360 */ 1766, 1766, 1766, 1823, 1870, 1870, 1848, 1766, 1767, 1766, /* 370 */ 1823, 1766, 1766, 1727, 1872, 1783, 1783, 1848, 1668, 1813, /* 380 */ 1813, 1825, 1825, 1777, 1781, 1906, 1668, 1774, 1777, 1789, /* 390 */ 1792, 1701, 1919, 1935, 1935, 1949, 1949, 1949, 2207, 2207, /* 400 */ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, /* 410 */ 2207, 2207, 2207, 69, 1032, 79, 357, 1377, 1206, 400, /* 420 */ 1525, 835, 332, 1540, 1437, 1539, 1536, 1548, 1583, 1620, /* 430 */ 1633, 1670, 1671, 1674, 1567, 1553, 1682, 1506, 1675, 1358, /* 440 */ 1607, 1589, 1678, 1681, 1624, 1687, 1688, 1283, 1561, 1693, /* 450 */ 1696, 1623, 1521, 1976, 1980, 1962, 1822, 1972, 1973, 1965, /* 460 */ 1967, 1851, 1840, 1862, 1969, 1969, 1971, 1853, 1977, 1854, /* 470 */ 1982, 1999, 1858, 1871, 1969, 1873, 1941, 1968, 1969, 1855, /* 480 */ 1952, 1954, 1955, 1956, 1881, 1896, 1981, 1874, 2013, 2014, /* 490 */ 1998, 1905, 1860, 1957, 2008, 1966, 1947, 1983, 1894, 1921, /* 500 */ 2020, 2018, 2026, 1915, 1923, 2028, 1984, 2036, 2040, 2047, /* 510 */ 2041, 2003, 2012, 2050, 1979, 2049, 2056, 2011, 2044, 2057, /* 520 */ 2048, 1934, 2063, 2064, 2065, 2061, 2066, 2068, 1993, 1950, /* 530 */ 2071, 2072, 1985, 2062, 2075, 1959, 2073, 2067, 2070, 2076, /* 540 */ 2078, 2010, 2030, 2022, 2069, 2031, 2021, 2082, 2094, 2083, /* 550 */ 2095, 2093, 2096, 2086, 1986, 1987, 2100, 2073, 2101, 2103, /* 560 */ 2104, 2109, 2107, 2108, 2111, 2113, 2125, 2115, 2116, 2117, /* 570 */ 2118, 2121, 2122, 2114, 2009, 2004, 2005, 2006, 2124, 2127, /* 580 */ 2136, 2151, 2152, }; #define YY_REDUCE_COUNT (412) #define YY_REDUCE_MIN (-277) #define YY_REDUCE_MAX (1772) static const short yy_reduce_ofst[] = { /* 0 */ -67, 1252, -64, -178, -181, 160, 1071, 143, -184, 137, /* 10 */ 218, 220, 222, -174, 229, 268, 272, 275, 324, -208, /* 20 */ 242, -277, -39, 81, 537, 792, 810, 812, -189, 814, /* 30 */ 831, 163, 865, 944, 887, 840, 964, 1077, -187, 292, /* 40 */ -133, 274, 673, 558, 682, 795, 809, -238, -232, -238, /* 50 */ -232, 329, 329, 329, 329, 329, 329, 329, 329, 329, /* 60 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, /* 70 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, /* 80 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 557, /* 90 */ 712, 949, 966, 969, 971, 979, 1097, 1099, 1103, 1142, /* 100 */ 1144, 1169, 1172, 1201, 1203, 1228, 1241, 1250, 1253, 1255, /* 110 */ 1261, 1266, 1271, 1282, 1291, 1308, 1310, 1312, 1322, 1328, /* 120 */ 1347, 1354, 1356, 1359, 1362, 1365, 1367, 1374, 1376, 1381, /* 130 */ 1401, 1403, 1406, 1412, 1414, 1417, 1421, 1428, 1447, 1449, /* 140 */ 1453, 1462, 329, 329, 329, 329, 329, 329, 329, 329, /* 150 */ 329, 329, 329, -22, -159, 475, -220, 756, 38, 501, /* 160 */ 841, 714, 329, 118, 337, 349, 363, -56, 329, 329, /* 170 */ 329, 329, -205, -205, -205, 687, -172, -130, -57, 790, /* 180 */ 397, 528, -271, 136, 596, 596, 90, 316, 522, 541, /* 190 */ -37, 715, 849, 977, 628, 856, 980, 991, 1081, 1102, /* 200 */ 1135, 1083, -162, 208, 1258, 794, -86, 159, 41, 1109, /* 210 */ 671, 852, 844, 932, 1175, 1254, 480, 1180, 100, 258, /* 220 */ 1265, 1268, 1216, 1287, -139, 317, 344, 63, 339, 423, /* 230 */ 563, 636, 676, 813, 908, 914, 950, 1078, 1084, 1098, /* 240 */ 1363, 1384, 1407, 1439, 1464, 411, 1527, 1534, 1535, 1537, /* 250 */ 1541, 1542, 1543, 1544, 1545, 1547, 1549, 1550, 990, 1164, /* 260 */ 1492, 1551, 1552, 1556, 1217, 1558, 1559, 1560, 1473, 1413, /* 270 */ 1563, 1510, 1568, 563, 1570, 1571, 1572, 1573, 1574, 1575, /* 280 */ 1443, 1466, 1518, 1513, 1514, 1515, 1516, 1217, 1518, 1518, /* 290 */ 1531, 1562, 1582, 1477, 1505, 1511, 1533, 1512, 1488, 1538, /* 300 */ 1509, 1517, 1546, 1519, 1557, 1489, 1565, 1564, 1578, 1586, /* 310 */ 1587, 1588, 1526, 1528, 1554, 1555, 1576, 1577, 1566, 1579, /* 320 */ 1584, 1591, 1520, 1523, 1617, 1628, 1580, 1581, 1632, 1585, /* 330 */ 1590, 1593, 1604, 1605, 1606, 1608, 1609, 1641, 1649, 1610, /* 340 */ 1592, 1594, 1611, 1595, 1616, 1612, 1618, 1613, 1651, 1654, /* 350 */ 1596, 1598, 1655, 1663, 1650, 1673, 1680, 1677, 1684, 1653, /* 360 */ 1664, 1666, 1667, 1662, 1669, 1672, 1676, 1686, 1679, 1691, /* 370 */ 1689, 1692, 1694, 1597, 1599, 1619, 1630, 1699, 1700, 1602, /* 380 */ 1615, 1648, 1657, 1690, 1698, 1658, 1729, 1652, 1695, 1702, /* 390 */ 1704, 1703, 1741, 1754, 1758, 1768, 1769, 1771, 1660, 1661, /* 400 */ 1665, 1752, 1756, 1757, 1759, 1760, 1764, 1745, 1753, 1762, /* 410 */ 1763, 1761, 1772, }; static const YYACTIONTYPE yy_default[] = { /* 0 */ 1663, 1663, 1663, 1491, 1254, 1367, 1254, 1254, 1254, 1254, /* 10 */ 1491, 1491, 1491, 1254, 1254, 1254, 1254, 1254, 1254, 1397, /* 20 */ 1397, 1544, 1287, 1254, 1254, 1254, 1254, 1254, 1254, 1254, /* 30 */ 1254, 1254, 1254, 1254, 1254, 1490, 1254, 1254, 1254, 1254, /* 40 */ 1578, 1578, 1254, 1254, 1254, 1254, 1254, 1563, 1562, 1254, |
︙ | ︙ | |||
175373 175374 175375 175376 175377 175378 175379 175380 175381 175382 175383 175384 175385 175386 | 0, /* SELECT_COLUMN => nothing */ 0, /* IF_NULL_ROW => nothing */ 0, /* ASTERISK => nothing */ 0, /* SPAN => nothing */ 0, /* ERROR => nothing */ 0, /* QNUMBER => nothing */ 0, /* SPACE => nothing */ 0, /* ILLEGAL => nothing */ }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** | > | 175648 175649 175650 175651 175652 175653 175654 175655 175656 175657 175658 175659 175660 175661 175662 | 0, /* SELECT_COLUMN => nothing */ 0, /* IF_NULL_ROW => nothing */ 0, /* ASTERISK => nothing */ 0, /* SPAN => nothing */ 0, /* ERROR => nothing */ 0, /* QNUMBER => nothing */ 0, /* SPACE => nothing */ 0, /* COMMENT => nothing */ 0, /* ILLEGAL => nothing */ }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** |
︙ | ︙ | |||
175642 175643 175644 175645 175646 175647 175648 | /* 178 */ "SELECT_COLUMN", /* 179 */ "IF_NULL_ROW", /* 180 */ "ASTERISK", /* 181 */ "SPAN", /* 182 */ "ERROR", /* 183 */ "QNUMBER", /* 184 */ "SPACE", | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 175918 175919 175920 175921 175922 175923 175924 175925 175926 175927 175928 175929 175930 175931 175932 175933 175934 175935 175936 175937 175938 175939 175940 175941 175942 175943 175944 175945 175946 175947 175948 175949 175950 175951 175952 175953 175954 175955 175956 175957 175958 175959 175960 175961 175962 175963 175964 175965 175966 175967 175968 175969 175970 175971 175972 175973 175974 175975 175976 175977 175978 175979 175980 175981 175982 175983 175984 175985 175986 175987 175988 175989 175990 175991 175992 175993 175994 175995 175996 175997 175998 175999 176000 176001 176002 176003 176004 176005 176006 176007 176008 176009 176010 176011 176012 176013 176014 176015 176016 176017 176018 176019 176020 176021 176022 176023 176024 176025 176026 176027 176028 176029 176030 176031 176032 176033 176034 176035 176036 176037 176038 176039 176040 176041 176042 176043 176044 176045 176046 176047 176048 176049 176050 176051 176052 176053 176054 176055 176056 176057 176058 176059 176060 176061 176062 176063 176064 176065 176066 176067 176068 176069 | /* 178 */ "SELECT_COLUMN", /* 179 */ "IF_NULL_ROW", /* 180 */ "ASTERISK", /* 181 */ "SPAN", /* 182 */ "ERROR", /* 183 */ "QNUMBER", /* 184 */ "SPACE", /* 185 */ "COMMENT", /* 186 */ "ILLEGAL", /* 187 */ "input", /* 188 */ "cmdlist", /* 189 */ "ecmd", /* 190 */ "cmdx", /* 191 */ "explain", /* 192 */ "cmd", /* 193 */ "transtype", /* 194 */ "trans_opt", /* 195 */ "nm", /* 196 */ "savepoint_opt", /* 197 */ "create_table", /* 198 */ "create_table_args", /* 199 */ "createkw", /* 200 */ "temp", /* 201 */ "ifnotexists", /* 202 */ "dbnm", /* 203 */ "columnlist", /* 204 */ "conslist_opt", /* 205 */ "table_option_set", /* 206 */ "select", /* 207 */ "table_option", /* 208 */ "columnname", /* 209 */ "carglist", /* 210 */ "typetoken", /* 211 */ "typename", /* 212 */ "signed", /* 213 */ "plus_num", /* 214 */ "minus_num", /* 215 */ "scanpt", /* 216 */ "scantok", /* 217 */ "ccons", /* 218 */ "term", /* 219 */ "expr", /* 220 */ "onconf", /* 221 */ "sortorder", /* 222 */ "autoinc", /* 223 */ "eidlist_opt", /* 224 */ "refargs", /* 225 */ "defer_subclause", /* 226 */ "generated", /* 227 */ "refarg", /* 228 */ "refact", /* 229 */ "init_deferred_pred_opt", /* 230 */ "conslist", /* 231 */ "tconscomma", /* 232 */ "tcons", /* 233 */ "sortlist", /* 234 */ "eidlist", /* 235 */ "defer_subclause_opt", /* 236 */ "orconf", /* 237 */ "resolvetype", /* 238 */ "raisetype", /* 239 */ "ifexists", /* 240 */ "fullname", /* 241 */ "selectnowith", /* 242 */ "oneselect", /* 243 */ "wqlist", /* 244 */ "multiselect_op", /* 245 */ "distinct", /* 246 */ "selcollist", /* 247 */ "from", /* 248 */ "where_opt", /* 249 */ "groupby_opt", /* 250 */ "having_opt", /* 251 */ "orderby_opt", /* 252 */ "limit_opt", /* 253 */ "window_clause", /* 254 */ "values", /* 255 */ "nexprlist", /* 256 */ "mvalues", /* 257 */ "sclp", /* 258 */ "as", /* 259 */ "seltablist", /* 260 */ "stl_prefix", /* 261 */ "joinop", /* 262 */ "on_using", /* 263 */ "indexed_by", /* 264 */ "exprlist", /* 265 */ "xfullname", /* 266 */ "idlist", /* 267 */ "indexed_opt", /* 268 */ "nulls", /* 269 */ "with", /* 270 */ "where_opt_ret", /* 271 */ "setlist", /* 272 */ "insert_cmd", /* 273 */ "idlist_opt", /* 274 */ "upsert", /* 275 */ "returning", /* 276 */ "filter_over", /* 277 */ "likeop", /* 278 */ "between_op", /* 279 */ "in_op", /* 280 */ "paren_exprlist", /* 281 */ "case_operand", /* 282 */ "case_exprlist", /* 283 */ "case_else", /* 284 */ "uniqueflag", /* 285 */ "collate", /* 286 */ "vinto", /* 287 */ "nmnum", /* 288 */ "trigger_decl", /* 289 */ "trigger_cmd_list", /* 290 */ "trigger_time", /* 291 */ "trigger_event", /* 292 */ "foreach_clause", /* 293 */ "when_clause", /* 294 */ "trigger_cmd", /* 295 */ "trnm", /* 296 */ "tridxby", /* 297 */ "database_kw_opt", /* 298 */ "key_opt", /* 299 */ "add_column_fullname", /* 300 */ "kwcolumn_opt", /* 301 */ "create_vtab", /* 302 */ "vtabarglist", /* 303 */ "vtabarg", /* 304 */ "vtabargtoken", /* 305 */ "lp", /* 306 */ "anylist", /* 307 */ "wqitem", /* 308 */ "wqas", /* 309 */ "withnm", /* 310 */ "windowdefn_list", /* 311 */ "windowdefn", /* 312 */ "window", /* 313 */ "frame_opt", /* 314 */ "part_opt", /* 315 */ "filter_clause", /* 316 */ "over_clause", /* 317 */ "range_or_rows", /* 318 */ "frame_bound", /* 319 */ "frame_bound_s", /* 320 */ "frame_bound_e", /* 321 */ "frame_exclude_opt", /* 322 */ "frame_exclude", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { |
︙ | ︙ | |||
176318 176319 176320 176321 176322 176323 176324 | ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < | | > | | | | | | | | | | | | 176595 176596 176597 176598 176599 176600 176601 176602 176603 176604 176605 176606 176607 176608 176609 176610 176611 176612 176613 176614 176615 176616 176617 176618 176619 176620 176621 176622 176623 176624 176625 176626 176627 176628 176629 176630 176631 176632 176633 176634 176635 176636 176637 176638 176639 176640 176641 176642 176643 176644 176645 176646 176647 176648 176649 176650 176651 176652 176653 176654 176655 176656 176657 176658 176659 176660 176661 176662 176663 176664 176665 176666 176667 176668 176669 176670 176671 176672 176673 176674 176675 176676 176677 176678 176679 176680 176681 176682 176683 176684 176685 176686 176687 176688 176689 176690 176691 176692 176693 176694 176695 176696 176697 176698 176699 176700 | ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ case 206: /* select */ case 241: /* selectnowith */ case 242: /* oneselect */ case 254: /* values */ case 256: /* mvalues */ { sqlite3SelectDelete(pParse->db, (yypminor->yy637)); } break; case 218: /* term */ case 219: /* expr */ case 248: /* where_opt */ case 250: /* having_opt */ case 270: /* where_opt_ret */ case 281: /* case_operand */ case 283: /* case_else */ case 286: /* vinto */ case 293: /* when_clause */ case 298: /* key_opt */ case 315: /* filter_clause */ { sqlite3ExprDelete(pParse->db, (yypminor->yy590)); } break; case 223: /* eidlist_opt */ case 233: /* sortlist */ case 234: /* eidlist */ case 246: /* selcollist */ case 249: /* groupby_opt */ case 251: /* orderby_opt */ case 255: /* nexprlist */ case 257: /* sclp */ case 264: /* exprlist */ case 271: /* setlist */ case 280: /* paren_exprlist */ case 282: /* case_exprlist */ case 314: /* part_opt */ { sqlite3ExprListDelete(pParse->db, (yypminor->yy402)); } break; case 240: /* fullname */ case 247: /* from */ case 259: /* seltablist */ case 260: /* stl_prefix */ case 265: /* xfullname */ { sqlite3SrcListDelete(pParse->db, (yypminor->yy563)); } break; case 243: /* wqlist */ { sqlite3WithDelete(pParse->db, (yypminor->yy125)); } break; case 253: /* window_clause */ case 310: /* windowdefn_list */ { sqlite3WindowListDelete(pParse->db, (yypminor->yy483)); } break; case 266: /* idlist */ case 273: /* idlist_opt */ { sqlite3IdListDelete(pParse->db, (yypminor->yy204)); } break; case 276: /* filter_over */ case 311: /* windowdefn */ case 312: /* window */ case 313: /* frame_opt */ case 316: /* over_clause */ { sqlite3WindowDelete(pParse->db, (yypminor->yy483)); } break; case 289: /* trigger_cmd_list */ case 294: /* trigger_cmd */ { sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy319)); } break; case 291: /* trigger_event */ { sqlite3IdListDelete(pParse->db, (yypminor->yy28).b); } break; case 318: /* frame_bound */ case 319: /* frame_bound_s */ case 320: /* frame_bound_e */ { sqlite3ExprDelete(pParse->db, (yypminor->yy205).pExpr); } break; /********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } |
︙ | ︙ | |||
176711 176712 176713 176714 176715 176716 176717 | yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState, "Shift"); } /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side ** of that rule */ static const YYCODETYPE yyRuleInfoLhs[] = { | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 176988 176989 176990 176991 176992 176993 176994 176995 176996 176997 176998 176999 177000 177001 177002 177003 177004 177005 177006 177007 177008 177009 177010 177011 177012 177013 177014 177015 177016 177017 177018 177019 177020 177021 177022 177023 177024 177025 177026 177027 177028 177029 177030 177031 177032 177033 177034 177035 177036 177037 177038 177039 177040 177041 177042 177043 177044 177045 177046 177047 177048 177049 177050 177051 177052 177053 177054 177055 177056 177057 177058 177059 177060 177061 177062 177063 177064 177065 177066 177067 177068 177069 177070 177071 177072 177073 177074 177075 177076 177077 177078 177079 177080 177081 177082 177083 177084 177085 177086 177087 177088 177089 177090 177091 177092 177093 177094 177095 177096 177097 177098 177099 177100 177101 177102 177103 177104 177105 177106 177107 177108 177109 177110 177111 177112 177113 177114 177115 177116 177117 177118 177119 177120 177121 177122 177123 177124 177125 177126 177127 177128 177129 177130 177131 177132 177133 177134 177135 177136 177137 177138 177139 177140 177141 177142 177143 177144 177145 177146 177147 177148 177149 177150 177151 177152 177153 177154 177155 177156 177157 177158 177159 177160 177161 177162 177163 177164 177165 177166 177167 177168 177169 177170 177171 177172 177173 177174 177175 177176 177177 177178 177179 177180 177181 177182 177183 177184 177185 177186 177187 177188 177189 177190 177191 177192 177193 177194 177195 177196 177197 177198 177199 177200 177201 177202 177203 177204 177205 177206 177207 177208 177209 177210 177211 177212 177213 177214 177215 177216 177217 177218 177219 177220 177221 177222 177223 177224 177225 177226 177227 177228 177229 177230 177231 177232 177233 177234 177235 177236 177237 177238 177239 177240 177241 177242 177243 177244 177245 177246 177247 177248 177249 177250 177251 177252 177253 177254 177255 177256 177257 177258 177259 177260 177261 177262 177263 177264 177265 177266 177267 177268 177269 177270 177271 177272 177273 177274 177275 177276 177277 177278 177279 177280 177281 177282 177283 177284 177285 177286 177287 177288 177289 177290 177291 177292 177293 177294 177295 177296 177297 177298 177299 177300 177301 177302 177303 177304 177305 177306 177307 177308 177309 177310 177311 177312 177313 177314 177315 177316 177317 177318 177319 177320 177321 177322 177323 177324 177325 177326 177327 177328 177329 177330 177331 177332 177333 177334 177335 177336 177337 177338 177339 177340 177341 177342 177343 177344 177345 177346 177347 177348 177349 177350 177351 177352 177353 177354 177355 177356 177357 177358 177359 177360 177361 177362 177363 177364 177365 177366 177367 177368 177369 177370 177371 177372 177373 177374 177375 177376 177377 177378 177379 177380 177381 177382 177383 177384 177385 177386 177387 177388 177389 177390 177391 177392 177393 177394 177395 177396 177397 177398 177399 177400 177401 177402 177403 177404 177405 177406 177407 177408 177409 177410 | yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState, "Shift"); } /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side ** of that rule */ static const YYCODETYPE yyRuleInfoLhs[] = { 191, /* (0) explain ::= EXPLAIN */ 191, /* (1) explain ::= EXPLAIN QUERY PLAN */ 190, /* (2) cmdx ::= cmd */ 192, /* (3) cmd ::= BEGIN transtype trans_opt */ 193, /* (4) transtype ::= */ 193, /* (5) transtype ::= DEFERRED */ 193, /* (6) transtype ::= IMMEDIATE */ 193, /* (7) transtype ::= EXCLUSIVE */ 192, /* (8) cmd ::= COMMIT|END trans_opt */ 192, /* (9) cmd ::= ROLLBACK trans_opt */ 192, /* (10) cmd ::= SAVEPOINT nm */ 192, /* (11) cmd ::= RELEASE savepoint_opt nm */ 192, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ 197, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ 199, /* (14) createkw ::= CREATE */ 201, /* (15) ifnotexists ::= */ 201, /* (16) ifnotexists ::= IF NOT EXISTS */ 200, /* (17) temp ::= TEMP */ 200, /* (18) temp ::= */ 198, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ 198, /* (20) create_table_args ::= AS select */ 205, /* (21) table_option_set ::= */ 205, /* (22) table_option_set ::= table_option_set COMMA table_option */ 207, /* (23) table_option ::= WITHOUT nm */ 207, /* (24) table_option ::= nm */ 208, /* (25) columnname ::= nm typetoken */ 210, /* (26) typetoken ::= */ 210, /* (27) typetoken ::= typename LP signed RP */ 210, /* (28) typetoken ::= typename LP signed COMMA signed RP */ 211, /* (29) typename ::= typename ID|STRING */ 215, /* (30) scanpt ::= */ 216, /* (31) scantok ::= */ 217, /* (32) ccons ::= CONSTRAINT nm */ 217, /* (33) ccons ::= DEFAULT scantok term */ 217, /* (34) ccons ::= DEFAULT LP expr RP */ 217, /* (35) ccons ::= DEFAULT PLUS scantok term */ 217, /* (36) ccons ::= DEFAULT MINUS scantok term */ 217, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ 217, /* (38) ccons ::= NOT NULL onconf */ 217, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ 217, /* (40) ccons ::= UNIQUE onconf */ 217, /* (41) ccons ::= CHECK LP expr RP */ 217, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ 217, /* (43) ccons ::= defer_subclause */ 217, /* (44) ccons ::= COLLATE ID|STRING */ 226, /* (45) generated ::= LP expr RP */ 226, /* (46) generated ::= LP expr RP ID */ 222, /* (47) autoinc ::= */ 222, /* (48) autoinc ::= AUTOINCR */ 224, /* (49) refargs ::= */ 224, /* (50) refargs ::= refargs refarg */ 227, /* (51) refarg ::= MATCH nm */ 227, /* (52) refarg ::= ON INSERT refact */ 227, /* (53) refarg ::= ON DELETE refact */ 227, /* (54) refarg ::= ON UPDATE refact */ 228, /* (55) refact ::= SET NULL */ 228, /* (56) refact ::= SET DEFAULT */ 228, /* (57) refact ::= CASCADE */ 228, /* (58) refact ::= RESTRICT */ 228, /* (59) refact ::= NO ACTION */ 225, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ 225, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ 229, /* (62) init_deferred_pred_opt ::= */ 229, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ 229, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ 204, /* (65) conslist_opt ::= */ 231, /* (66) tconscomma ::= COMMA */ 232, /* (67) tcons ::= CONSTRAINT nm */ 232, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ 232, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ 232, /* (70) tcons ::= CHECK LP expr RP onconf */ 232, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ 235, /* (72) defer_subclause_opt ::= */ 220, /* (73) onconf ::= */ 220, /* (74) onconf ::= ON CONFLICT resolvetype */ 236, /* (75) orconf ::= */ 236, /* (76) orconf ::= OR resolvetype */ 237, /* (77) resolvetype ::= IGNORE */ 237, /* (78) resolvetype ::= REPLACE */ 192, /* (79) cmd ::= DROP TABLE ifexists fullname */ 239, /* (80) ifexists ::= IF EXISTS */ 239, /* (81) ifexists ::= */ 192, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ 192, /* (83) cmd ::= DROP VIEW ifexists fullname */ 192, /* (84) cmd ::= select */ 206, /* (85) select ::= WITH wqlist selectnowith */ 206, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ 206, /* (87) select ::= selectnowith */ 241, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ 244, /* (89) multiselect_op ::= UNION */ 244, /* (90) multiselect_op ::= UNION ALL */ 244, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ 242, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ 242, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ 254, /* (94) values ::= VALUES LP nexprlist RP */ 242, /* (95) oneselect ::= mvalues */ 256, /* (96) mvalues ::= values COMMA LP nexprlist RP */ 256, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */ 245, /* (98) distinct ::= DISTINCT */ 245, /* (99) distinct ::= ALL */ 245, /* (100) distinct ::= */ 257, /* (101) sclp ::= */ 246, /* (102) selcollist ::= sclp scanpt expr scanpt as */ 246, /* (103) selcollist ::= sclp scanpt STAR */ 246, /* (104) selcollist ::= sclp scanpt nm DOT STAR */ 258, /* (105) as ::= AS nm */ 258, /* (106) as ::= */ 247, /* (107) from ::= */ 247, /* (108) from ::= FROM seltablist */ 260, /* (109) stl_prefix ::= seltablist joinop */ 260, /* (110) stl_prefix ::= */ 259, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */ 259, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ 259, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ 259, /* (114) seltablist ::= stl_prefix LP select RP as on_using */ 259, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */ 202, /* (116) dbnm ::= */ 202, /* (117) dbnm ::= DOT nm */ 240, /* (118) fullname ::= nm */ 240, /* (119) fullname ::= nm DOT nm */ 265, /* (120) xfullname ::= nm */ 265, /* (121) xfullname ::= nm DOT nm */ 265, /* (122) xfullname ::= nm DOT nm AS nm */ 265, /* (123) xfullname ::= nm AS nm */ 261, /* (124) joinop ::= COMMA|JOIN */ 261, /* (125) joinop ::= JOIN_KW JOIN */ 261, /* (126) joinop ::= JOIN_KW nm JOIN */ 261, /* (127) joinop ::= JOIN_KW nm nm JOIN */ 262, /* (128) on_using ::= ON expr */ 262, /* (129) on_using ::= USING LP idlist RP */ 262, /* (130) on_using ::= */ 267, /* (131) indexed_opt ::= */ 263, /* (132) indexed_by ::= INDEXED BY nm */ 263, /* (133) indexed_by ::= NOT INDEXED */ 251, /* (134) orderby_opt ::= */ 251, /* (135) orderby_opt ::= ORDER BY sortlist */ 233, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */ 233, /* (137) sortlist ::= expr sortorder nulls */ 221, /* (138) sortorder ::= ASC */ 221, /* (139) sortorder ::= DESC */ 221, /* (140) sortorder ::= */ 268, /* (141) nulls ::= NULLS FIRST */ 268, /* (142) nulls ::= NULLS LAST */ 268, /* (143) nulls ::= */ 249, /* (144) groupby_opt ::= */ 249, /* (145) groupby_opt ::= GROUP BY nexprlist */ 250, /* (146) having_opt ::= */ 250, /* (147) having_opt ::= HAVING expr */ 252, /* (148) limit_opt ::= */ 252, /* (149) limit_opt ::= LIMIT expr */ 252, /* (150) limit_opt ::= LIMIT expr OFFSET expr */ 252, /* (151) limit_opt ::= LIMIT expr COMMA expr */ 192, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ 248, /* (153) where_opt ::= */ 248, /* (154) where_opt ::= WHERE expr */ 270, /* (155) where_opt_ret ::= */ 270, /* (156) where_opt_ret ::= WHERE expr */ 270, /* (157) where_opt_ret ::= RETURNING selcollist */ 270, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */ 192, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ 271, /* (160) setlist ::= setlist COMMA nm EQ expr */ 271, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */ 271, /* (162) setlist ::= nm EQ expr */ 271, /* (163) setlist ::= LP idlist RP EQ expr */ 192, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ 192, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ 274, /* (166) upsert ::= */ 274, /* (167) upsert ::= RETURNING selcollist */ 274, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ 274, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ 274, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */ 274, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ 275, /* (172) returning ::= RETURNING selcollist */ 272, /* (173) insert_cmd ::= INSERT orconf */ 272, /* (174) insert_cmd ::= REPLACE */ 273, /* (175) idlist_opt ::= */ 273, /* (176) idlist_opt ::= LP idlist RP */ 266, /* (177) idlist ::= idlist COMMA nm */ 266, /* (178) idlist ::= nm */ 219, /* (179) expr ::= LP expr RP */ 219, /* (180) expr ::= ID|INDEXED|JOIN_KW */ 219, /* (181) expr ::= nm DOT nm */ 219, /* (182) expr ::= nm DOT nm DOT nm */ 218, /* (183) term ::= NULL|FLOAT|BLOB */ 218, /* (184) term ::= STRING */ 218, /* (185) term ::= INTEGER */ 219, /* (186) expr ::= VARIABLE */ 219, /* (187) expr ::= expr COLLATE ID|STRING */ 219, /* (188) expr ::= CAST LP expr AS typetoken RP */ 219, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ 219, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ 219, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ 219, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ 219, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ 219, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ 218, /* (195) term ::= CTIME_KW */ 219, /* (196) expr ::= LP nexprlist COMMA expr RP */ 219, /* (197) expr ::= expr AND expr */ 219, /* (198) expr ::= expr OR expr */ 219, /* (199) expr ::= expr LT|GT|GE|LE expr */ 219, /* (200) expr ::= expr EQ|NE expr */ 219, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ 219, /* (202) expr ::= expr PLUS|MINUS expr */ 219, /* (203) expr ::= expr STAR|SLASH|REM expr */ 219, /* (204) expr ::= expr CONCAT expr */ 277, /* (205) likeop ::= NOT LIKE_KW|MATCH */ 219, /* (206) expr ::= expr likeop expr */ 219, /* (207) expr ::= expr likeop expr ESCAPE expr */ 219, /* (208) expr ::= expr ISNULL|NOTNULL */ 219, /* (209) expr ::= expr NOT NULL */ 219, /* (210) expr ::= expr IS expr */ 219, /* (211) expr ::= expr IS NOT expr */ 219, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */ 219, /* (213) expr ::= expr IS DISTINCT FROM expr */ 219, /* (214) expr ::= NOT expr */ 219, /* (215) expr ::= BITNOT expr */ 219, /* (216) expr ::= PLUS|MINUS expr */ 219, /* (217) expr ::= expr PTR expr */ 278, /* (218) between_op ::= BETWEEN */ 278, /* (219) between_op ::= NOT BETWEEN */ 219, /* (220) expr ::= expr between_op expr AND expr */ 279, /* (221) in_op ::= IN */ 279, /* (222) in_op ::= NOT IN */ 219, /* (223) expr ::= expr in_op LP exprlist RP */ 219, /* (224) expr ::= LP select RP */ 219, /* (225) expr ::= expr in_op LP select RP */ 219, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */ 219, /* (227) expr ::= EXISTS LP select RP */ 219, /* (228) expr ::= CASE case_operand case_exprlist case_else END */ 282, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */ 282, /* (230) case_exprlist ::= WHEN expr THEN expr */ 283, /* (231) case_else ::= ELSE expr */ 283, /* (232) case_else ::= */ 281, /* (233) case_operand ::= */ 264, /* (234) exprlist ::= */ 255, /* (235) nexprlist ::= nexprlist COMMA expr */ 255, /* (236) nexprlist ::= expr */ 280, /* (237) paren_exprlist ::= */ 280, /* (238) paren_exprlist ::= LP exprlist RP */ 192, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ 284, /* (240) uniqueflag ::= UNIQUE */ 284, /* (241) uniqueflag ::= */ 223, /* (242) eidlist_opt ::= */ 223, /* (243) eidlist_opt ::= LP eidlist RP */ 234, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */ 234, /* (245) eidlist ::= nm collate sortorder */ 285, /* (246) collate ::= */ 285, /* (247) collate ::= COLLATE ID|STRING */ 192, /* (248) cmd ::= DROP INDEX ifexists fullname */ 192, /* (249) cmd ::= VACUUM vinto */ 192, /* (250) cmd ::= VACUUM nm vinto */ 286, /* (251) vinto ::= INTO expr */ 286, /* (252) vinto ::= */ 192, /* (253) cmd ::= PRAGMA nm dbnm */ 192, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */ 192, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */ 192, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */ 192, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */ 213, /* (258) plus_num ::= PLUS INTEGER|FLOAT */ 214, /* (259) minus_num ::= MINUS INTEGER|FLOAT */ 192, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ 288, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ 290, /* (262) trigger_time ::= BEFORE|AFTER */ 290, /* (263) trigger_time ::= INSTEAD OF */ 290, /* (264) trigger_time ::= */ 291, /* (265) trigger_event ::= DELETE|INSERT */ 291, /* (266) trigger_event ::= UPDATE */ 291, /* (267) trigger_event ::= UPDATE OF idlist */ 293, /* (268) when_clause ::= */ 293, /* (269) when_clause ::= WHEN expr */ 289, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ 289, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */ 295, /* (272) trnm ::= nm DOT nm */ 296, /* (273) tridxby ::= INDEXED BY nm */ 296, /* (274) tridxby ::= NOT INDEXED */ 294, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ 294, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ 294, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ 294, /* (278) trigger_cmd ::= scanpt select scanpt */ 219, /* (279) expr ::= RAISE LP IGNORE RP */ 219, /* (280) expr ::= RAISE LP raisetype COMMA expr RP */ 238, /* (281) raisetype ::= ROLLBACK */ 238, /* (282) raisetype ::= ABORT */ 238, /* (283) raisetype ::= FAIL */ 192, /* (284) cmd ::= DROP TRIGGER ifexists fullname */ 192, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ 192, /* (286) cmd ::= DETACH database_kw_opt expr */ 298, /* (287) key_opt ::= */ 298, /* (288) key_opt ::= KEY expr */ 192, /* (289) cmd ::= REINDEX */ 192, /* (290) cmd ::= REINDEX nm dbnm */ 192, /* (291) cmd ::= ANALYZE */ 192, /* (292) cmd ::= ANALYZE nm dbnm */ 192, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */ 192, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ 192, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ 299, /* (296) add_column_fullname ::= fullname */ 192, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ 192, /* (298) cmd ::= create_vtab */ 192, /* (299) cmd ::= create_vtab LP vtabarglist RP */ 301, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ 303, /* (301) vtabarg ::= */ 304, /* (302) vtabargtoken ::= ANY */ 304, /* (303) vtabargtoken ::= lp anylist RP */ 305, /* (304) lp ::= LP */ 269, /* (305) with ::= WITH wqlist */ 269, /* (306) with ::= WITH RECURSIVE wqlist */ 308, /* (307) wqas ::= AS */ 308, /* (308) wqas ::= AS MATERIALIZED */ 308, /* (309) wqas ::= AS NOT MATERIALIZED */ 307, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */ 309, /* (311) withnm ::= nm */ 243, /* (312) wqlist ::= wqitem */ 243, /* (313) wqlist ::= wqlist COMMA wqitem */ 310, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */ 311, /* (315) windowdefn ::= nm AS LP window RP */ 312, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ 312, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ 312, /* (318) window ::= ORDER BY sortlist frame_opt */ 312, /* (319) window ::= nm ORDER BY sortlist frame_opt */ 312, /* (320) window ::= nm frame_opt */ 313, /* (321) frame_opt ::= */ 313, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ 313, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ 317, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */ 319, /* (325) frame_bound_s ::= frame_bound */ 319, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */ 320, /* (327) frame_bound_e ::= frame_bound */ 320, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */ 318, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */ 318, /* (330) frame_bound ::= CURRENT ROW */ 321, /* (331) frame_exclude_opt ::= */ 321, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */ 322, /* (333) frame_exclude ::= NO OTHERS */ 322, /* (334) frame_exclude ::= CURRENT ROW */ 322, /* (335) frame_exclude ::= GROUP|TIES */ 253, /* (336) window_clause ::= WINDOW windowdefn_list */ 276, /* (337) filter_over ::= filter_clause over_clause */ 276, /* (338) filter_over ::= over_clause */ 276, /* (339) filter_over ::= filter_clause */ 316, /* (340) over_clause ::= OVER LP window RP */ 316, /* (341) over_clause ::= OVER nm */ 315, /* (342) filter_clause ::= FILTER LP WHERE expr RP */ 218, /* (343) term ::= QNUMBER */ 187, /* (344) input ::= cmdlist */ 188, /* (345) cmdlist ::= cmdlist ecmd */ 188, /* (346) cmdlist ::= ecmd */ 189, /* (347) ecmd ::= SEMI */ 189, /* (348) ecmd ::= cmdx SEMI */ 189, /* (349) ecmd ::= explain cmdx SEMI */ 194, /* (350) trans_opt ::= */ 194, /* (351) trans_opt ::= TRANSACTION */ 194, /* (352) trans_opt ::= TRANSACTION nm */ 196, /* (353) savepoint_opt ::= SAVEPOINT */ 196, /* (354) savepoint_opt ::= */ 192, /* (355) cmd ::= create_table create_table_args */ 205, /* (356) table_option_set ::= table_option */ 203, /* (357) columnlist ::= columnlist COMMA columnname carglist */ 203, /* (358) columnlist ::= columnname carglist */ 195, /* (359) nm ::= ID|INDEXED|JOIN_KW */ 195, /* (360) nm ::= STRING */ 210, /* (361) typetoken ::= typename */ 211, /* (362) typename ::= ID|STRING */ 212, /* (363) signed ::= plus_num */ 212, /* (364) signed ::= minus_num */ 209, /* (365) carglist ::= carglist ccons */ 209, /* (366) carglist ::= */ 217, /* (367) ccons ::= NULL onconf */ 217, /* (368) ccons ::= GENERATED ALWAYS AS generated */ 217, /* (369) ccons ::= AS generated */ 204, /* (370) conslist_opt ::= COMMA conslist */ 230, /* (371) conslist ::= conslist tconscomma tcons */ 230, /* (372) conslist ::= tcons */ 231, /* (373) tconscomma ::= */ 235, /* (374) defer_subclause_opt ::= defer_subclause */ 237, /* (375) resolvetype ::= raisetype */ 241, /* (376) selectnowith ::= oneselect */ 242, /* (377) oneselect ::= values */ 257, /* (378) sclp ::= selcollist COMMA */ 258, /* (379) as ::= ID|STRING */ 267, /* (380) indexed_opt ::= indexed_by */ 275, /* (381) returning ::= */ 219, /* (382) expr ::= term */ 277, /* (383) likeop ::= LIKE_KW|MATCH */ 281, /* (384) case_operand ::= expr */ 264, /* (385) exprlist ::= nexprlist */ 287, /* (386) nmnum ::= plus_num */ 287, /* (387) nmnum ::= nm */ 287, /* (388) nmnum ::= ON */ 287, /* (389) nmnum ::= DELETE */ 287, /* (390) nmnum ::= DEFAULT */ 213, /* (391) plus_num ::= INTEGER|FLOAT */ 292, /* (392) foreach_clause ::= */ 292, /* (393) foreach_clause ::= FOR EACH ROW */ 295, /* (394) trnm ::= nm */ 296, /* (395) tridxby ::= */ 297, /* (396) database_kw_opt ::= DATABASE */ 297, /* (397) database_kw_opt ::= */ 300, /* (398) kwcolumn_opt ::= */ 300, /* (399) kwcolumn_opt ::= COLUMNKW */ 302, /* (400) vtabarglist ::= vtabarg */ 302, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ 303, /* (402) vtabarg ::= vtabarg vtabargtoken */ 306, /* (403) anylist ::= */ 306, /* (404) anylist ::= anylist LP anylist RP */ 306, /* (405) anylist ::= anylist ANY */ 269, /* (406) with ::= */ 310, /* (407) windowdefn_list ::= windowdefn */ 312, /* (408) window ::= frame_opt */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number ** of symbols on the right-hand side of that rule. */ static const signed char yyRuleInfoNRhs[] = { -1, /* (0) explain ::= EXPLAIN */ -3, /* (1) explain ::= EXPLAIN QUERY PLAN */ |
︙ | ︙ | |||
177585 177586 177587 177588 177589 177590 177591 | case 1: /* explain ::= EXPLAIN QUERY PLAN */ { if( pParse->pReprepare==0 ) pParse->explain = 2; } break; case 2: /* cmdx ::= cmd */ { sqlite3FinishCoding(pParse); } break; case 3: /* cmd ::= BEGIN transtype trans_opt */ | | | | | 177862 177863 177864 177865 177866 177867 177868 177869 177870 177871 177872 177873 177874 177875 177876 177877 177878 177879 177880 177881 177882 177883 177884 177885 | case 1: /* explain ::= EXPLAIN QUERY PLAN */ { if( pParse->pReprepare==0 ) pParse->explain = 2; } break; case 2: /* cmdx ::= cmd */ { sqlite3FinishCoding(pParse); } break; case 3: /* cmd ::= BEGIN transtype trans_opt */ {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy502);} break; case 4: /* transtype ::= */ {yymsp[1].minor.yy502 = TK_DEFERRED;} break; case 5: /* transtype ::= DEFERRED */ case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); case 324: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==324); {yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/} break; case 8: /* cmd ::= COMMIT|END trans_opt */ case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); {sqlite3EndTransaction(pParse,yymsp[-1].major);} break; case 10: /* cmd ::= SAVEPOINT nm */ { |
︙ | ︙ | |||
177617 177618 177619 177620 177621 177622 177623 | case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ { sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); } break; case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { | | | | | | | | | | | | | | | | | 177894 177895 177896 177897 177898 177899 177900 177901 177902 177903 177904 177905 177906 177907 177908 177909 177910 177911 177912 177913 177914 177915 177916 177917 177918 177919 177920 177921 177922 177923 177924 177925 177926 177927 177928 177929 177930 177931 177932 177933 177934 177935 177936 177937 177938 177939 177940 177941 177942 177943 177944 177945 177946 177947 177948 177949 177950 177951 177952 177953 177954 177955 177956 177957 177958 177959 177960 177961 177962 177963 177964 177965 177966 177967 | case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ { sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); } break; case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy502,0,0,yymsp[-2].minor.yy502); } break; case 14: /* createkw ::= CREATE */ {disableLookaside(pParse);} break; case 15: /* ifnotexists ::= */ case 18: /* temp ::= */ yytestcase(yyruleno==18); case 47: /* autoinc ::= */ yytestcase(yyruleno==47); case 62: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==62); case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72); case 81: /* ifexists ::= */ yytestcase(yyruleno==81); case 100: /* distinct ::= */ yytestcase(yyruleno==100); case 246: /* collate ::= */ yytestcase(yyruleno==246); {yymsp[1].minor.yy502 = 0;} break; case 16: /* ifnotexists ::= IF NOT EXISTS */ {yymsp[-2].minor.yy502 = 1;} break; case 17: /* temp ::= TEMP */ {yymsp[0].minor.yy502 = pParse->db->init.busy==0;} break; case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */ { sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy9,0); } break; case 20: /* create_table_args ::= AS select */ { sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy637); sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637); } break; case 21: /* table_option_set ::= */ {yymsp[1].minor.yy9 = 0;} break; case 22: /* table_option_set ::= table_option_set COMMA table_option */ {yylhsminor.yy9 = yymsp[-2].minor.yy9|yymsp[0].minor.yy9;} yymsp[-2].minor.yy9 = yylhsminor.yy9; break; case 23: /* table_option ::= WITHOUT nm */ { if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ yymsp[-1].minor.yy9 = TF_WithoutRowid | TF_NoVisibleRowid; }else{ yymsp[-1].minor.yy9 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } break; case 24: /* table_option ::= nm */ { if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){ yylhsminor.yy9 = TF_Strict; }else{ yylhsminor.yy9 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } yymsp[0].minor.yy9 = yylhsminor.yy9; break; case 25: /* columnname ::= nm typetoken */ {sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);} break; case 26: /* typetoken ::= */ case 65: /* conslist_opt ::= */ yytestcase(yyruleno==65); case 106: /* as ::= */ yytestcase(yyruleno==106); |
︙ | ︙ | |||
177702 177703 177704 177705 177706 177707 177708 | break; case 29: /* typename ::= typename ID|STRING */ {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} break; case 30: /* scanpt ::= */ { assert( yyLookahead!=YYNOCODE ); | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 177979 177980 177981 177982 177983 177984 177985 177986 177987 177988 177989 177990 177991 177992 177993 177994 177995 177996 177997 177998 177999 178000 178001 178002 178003 178004 178005 178006 178007 178008 178009 178010 178011 178012 178013 178014 178015 178016 178017 178018 178019 178020 178021 178022 178023 178024 178025 178026 178027 178028 178029 178030 178031 178032 178033 178034 178035 178036 178037 178038 178039 178040 178041 178042 178043 178044 178045 178046 178047 178048 178049 178050 178051 178052 178053 178054 178055 178056 178057 178058 178059 178060 178061 178062 178063 178064 178065 178066 178067 178068 178069 178070 178071 178072 178073 178074 178075 178076 178077 178078 178079 178080 178081 178082 178083 178084 178085 178086 178087 178088 178089 178090 178091 178092 178093 178094 178095 178096 178097 178098 178099 178100 178101 178102 178103 178104 178105 178106 178107 178108 178109 178110 178111 178112 178113 178114 178115 178116 178117 178118 178119 178120 178121 178122 178123 178124 178125 178126 178127 178128 178129 178130 178131 178132 178133 178134 178135 178136 178137 178138 178139 178140 178141 178142 178143 178144 178145 178146 178147 178148 178149 178150 178151 178152 178153 178154 178155 178156 178157 178158 178159 178160 178161 178162 178163 178164 178165 178166 178167 178168 178169 178170 178171 178172 178173 178174 178175 178176 178177 178178 178179 178180 178181 178182 178183 178184 178185 178186 178187 178188 178189 178190 178191 178192 178193 178194 178195 178196 178197 178198 178199 178200 178201 178202 178203 178204 178205 178206 178207 178208 178209 178210 178211 178212 178213 178214 178215 178216 178217 178218 178219 178220 178221 178222 178223 178224 178225 178226 178227 178228 178229 178230 178231 178232 178233 178234 178235 178236 178237 178238 178239 178240 178241 178242 178243 178244 178245 178246 178247 178248 178249 178250 178251 178252 178253 178254 178255 178256 178257 178258 178259 178260 178261 178262 178263 178264 178265 178266 178267 178268 178269 178270 178271 178272 178273 178274 178275 178276 178277 178278 178279 178280 178281 178282 178283 178284 178285 178286 178287 178288 178289 178290 178291 178292 178293 178294 178295 178296 178297 178298 178299 178300 178301 178302 178303 178304 178305 178306 178307 178308 178309 178310 178311 178312 178313 178314 178315 178316 178317 178318 178319 178320 178321 178322 178323 178324 178325 178326 178327 178328 178329 178330 178331 178332 178333 178334 178335 178336 178337 | break; case 29: /* typename ::= typename ID|STRING */ {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} break; case 30: /* scanpt ::= */ { assert( yyLookahead!=YYNOCODE ); yymsp[1].minor.yy342 = yyLookaheadToken.z; } break; case 31: /* scantok ::= */ { assert( yyLookahead!=YYNOCODE ); yymsp[1].minor.yy0 = yyLookaheadToken; } break; case 32: /* ccons ::= CONSTRAINT nm */ case 67: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==67); {pParse->constraintName = yymsp[0].minor.yy0;} break; case 33: /* ccons ::= DEFAULT scantok term */ {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} break; case 34: /* ccons ::= DEFAULT LP expr RP */ {sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} break; case 35: /* ccons ::= DEFAULT PLUS scantok term */ {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} break; case 36: /* ccons ::= DEFAULT MINUS scantok term */ { Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy590, 0); sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]); } break; case 37: /* ccons ::= DEFAULT scantok ID|INDEXED */ { Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0); if( p ){ sqlite3ExprIdToTrueFalse(p); testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); } sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); } break; case 38: /* ccons ::= NOT NULL onconf */ {sqlite3AddNotNull(pParse, yymsp[0].minor.yy502);} break; case 39: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy502,yymsp[0].minor.yy502,yymsp[-2].minor.yy502);} break; case 40: /* ccons ::= UNIQUE onconf */ {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy502,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 41: /* ccons ::= CHECK LP expr RP */ {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);} break; case 42: /* ccons ::= REFERENCES nm eidlist_opt refargs */ {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy402,yymsp[0].minor.yy502);} break; case 43: /* ccons ::= defer_subclause */ {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy502);} break; case 44: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; case 45: /* generated ::= LP expr RP */ {sqlite3AddGenerated(pParse,yymsp[-1].minor.yy590,0);} break; case 46: /* generated ::= LP expr RP ID */ {sqlite3AddGenerated(pParse,yymsp[-2].minor.yy590,&yymsp[0].minor.yy0);} break; case 48: /* autoinc ::= AUTOINCR */ {yymsp[0].minor.yy502 = 1;} break; case 49: /* refargs ::= */ { yymsp[1].minor.yy502 = OE_None*0x0101; /* EV: R-19803-45884 */} break; case 50: /* refargs ::= refargs refarg */ { yymsp[-1].minor.yy502 = (yymsp[-1].minor.yy502 & ~yymsp[0].minor.yy481.mask) | yymsp[0].minor.yy481.value; } break; case 51: /* refarg ::= MATCH nm */ { yymsp[-1].minor.yy481.value = 0; yymsp[-1].minor.yy481.mask = 0x000000; } break; case 52: /* refarg ::= ON INSERT refact */ { yymsp[-2].minor.yy481.value = 0; yymsp[-2].minor.yy481.mask = 0x000000; } break; case 53: /* refarg ::= ON DELETE refact */ { yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502; yymsp[-2].minor.yy481.mask = 0x0000ff; } break; case 54: /* refarg ::= ON UPDATE refact */ { yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502<<8; yymsp[-2].minor.yy481.mask = 0x00ff00; } break; case 55: /* refact ::= SET NULL */ { yymsp[-1].minor.yy502 = OE_SetNull; /* EV: R-33326-45252 */} break; case 56: /* refact ::= SET DEFAULT */ { yymsp[-1].minor.yy502 = OE_SetDflt; /* EV: R-33326-45252 */} break; case 57: /* refact ::= CASCADE */ { yymsp[0].minor.yy502 = OE_Cascade; /* EV: R-33326-45252 */} break; case 58: /* refact ::= RESTRICT */ { yymsp[0].minor.yy502 = OE_Restrict; /* EV: R-33326-45252 */} break; case 59: /* refact ::= NO ACTION */ { yymsp[-1].minor.yy502 = OE_None; /* EV: R-33326-45252 */} break; case 60: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ {yymsp[-2].minor.yy502 = 0;} break; case 61: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ case 76: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==76); case 173: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==173); {yymsp[-1].minor.yy502 = yymsp[0].minor.yy502;} break; case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80); case 219: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==219); case 222: /* in_op ::= NOT IN */ yytestcase(yyruleno==222); case 247: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==247); {yymsp[-1].minor.yy502 = 1;} break; case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ {yymsp[-1].minor.yy502 = 0;} break; case 66: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; case 68: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy402,yymsp[0].minor.yy502,yymsp[-2].minor.yy502,0);} break; case 69: /* tcons ::= UNIQUE LP sortlist RP onconf */ {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy402,yymsp[0].minor.yy502,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 70: /* tcons ::= CHECK LP expr RP onconf */ {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy590,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);} break; case 71: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy402, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[-1].minor.yy502); sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy502); } break; case 73: /* onconf ::= */ case 75: /* orconf ::= */ yytestcase(yyruleno==75); {yymsp[1].minor.yy502 = OE_Default;} break; case 74: /* onconf ::= ON CONFLICT resolvetype */ {yymsp[-2].minor.yy502 = yymsp[0].minor.yy502;} break; case 77: /* resolvetype ::= IGNORE */ {yymsp[0].minor.yy502 = OE_Ignore;} break; case 78: /* resolvetype ::= REPLACE */ case 174: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==174); {yymsp[0].minor.yy502 = OE_Replace;} break; case 79: /* cmd ::= DROP TABLE ifexists fullname */ { sqlite3DropTable(pParse, yymsp[0].minor.yy563, 0, yymsp[-1].minor.yy502); } break; case 82: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[0].minor.yy637, yymsp[-7].minor.yy502, yymsp[-5].minor.yy502); } break; case 83: /* cmd ::= DROP VIEW ifexists fullname */ { sqlite3DropTable(pParse, yymsp[0].minor.yy563, 1, yymsp[-1].minor.yy502); } break; case 84: /* cmd ::= select */ { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; if( (pParse->db->mDbFlags & DBFLAG_EncodingFixed)!=0 || sqlite3ReadSchema(pParse)==SQLITE_OK ){ sqlite3Select(pParse, yymsp[0].minor.yy637, &dest); } sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637); } break; case 85: /* select ::= WITH wqlist selectnowith */ {yymsp[-2].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);} break; case 86: /* select ::= WITH RECURSIVE wqlist selectnowith */ {yymsp[-3].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);} break; case 87: /* select ::= selectnowith */ { Select *p = yymsp[0].minor.yy637; if( p ){ parserDoubleLinkSelect(pParse, p); } } break; case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */ { Select *pRhs = yymsp[0].minor.yy637; Select *pLhs = yymsp[-2].minor.yy637; if( pRhs && pRhs->pPrior ){ SrcList *pFrom; Token x; x.n = 0; parserDoubleLinkSelect(pParse, pRhs); pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0); pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); } if( pRhs ){ pRhs->op = (u8)yymsp[-1].minor.yy502; pRhs->pPrior = pLhs; if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue; pRhs->selFlags &= ~SF_MultiValue; if( yymsp[-1].minor.yy502!=TK_ALL ) pParse->hasCompound = 1; }else{ sqlite3SelectDelete(pParse->db, pLhs); } yymsp[-2].minor.yy637 = pRhs; } break; case 89: /* multiselect_op ::= UNION */ case 91: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==91); {yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-OP*/} break; case 90: /* multiselect_op ::= UNION ALL */ {yymsp[-1].minor.yy502 = TK_ALL;} break; case 92: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { yymsp[-8].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy402,yymsp[-5].minor.yy563,yymsp[-4].minor.yy590,yymsp[-3].minor.yy402,yymsp[-2].minor.yy590,yymsp[-1].minor.yy402,yymsp[-7].minor.yy502,yymsp[0].minor.yy590); } break; case 93: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ { yymsp[-9].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy402,yymsp[-6].minor.yy563,yymsp[-5].minor.yy590,yymsp[-4].minor.yy402,yymsp[-3].minor.yy590,yymsp[-1].minor.yy402,yymsp[-8].minor.yy502,yymsp[0].minor.yy590); if( yymsp[-9].minor.yy637 ){ yymsp[-9].minor.yy637->pWinDefn = yymsp[-2].minor.yy483; }else{ sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy483); } } break; case 94: /* values ::= VALUES LP nexprlist RP */ { yymsp[-3].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy402,0,0,0,0,0,SF_Values,0); } break; case 95: /* oneselect ::= mvalues */ { sqlite3MultiValuesEnd(pParse, yymsp[0].minor.yy637); } break; case 96: /* mvalues ::= values COMMA LP nexprlist RP */ case 97: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==97); { yymsp[-4].minor.yy637 = sqlite3MultiValues(pParse, yymsp[-4].minor.yy637, yymsp[-1].minor.yy402); } break; case 98: /* distinct ::= DISTINCT */ {yymsp[0].minor.yy502 = SF_Distinct;} break; case 99: /* distinct ::= ALL */ {yymsp[0].minor.yy502 = SF_All;} break; case 101: /* sclp ::= */ case 134: /* orderby_opt ::= */ yytestcase(yyruleno==134); case 144: /* groupby_opt ::= */ yytestcase(yyruleno==144); case 234: /* exprlist ::= */ yytestcase(yyruleno==234); case 237: /* paren_exprlist ::= */ yytestcase(yyruleno==237); case 242: /* eidlist_opt ::= */ yytestcase(yyruleno==242); {yymsp[1].minor.yy402 = 0;} break; case 102: /* selcollist ::= sclp scanpt expr scanpt as */ { yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[-2].minor.yy590); if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[0].minor.yy0, 1); sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy402,yymsp[-3].minor.yy342,yymsp[-1].minor.yy342); } break; case 103: /* selcollist ::= sclp scanpt STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy402, p); } break; case 104: /* selcollist ::= sclp scanpt nm DOT STAR */ { Expr *pRight, *pLeft, *pDot; pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, pDot); } break; case 105: /* as ::= AS nm */ case 117: /* dbnm ::= DOT nm */ yytestcase(yyruleno==117); case 258: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==258); case 259: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==259); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; case 107: /* from ::= */ case 110: /* stl_prefix ::= */ yytestcase(yyruleno==110); {yymsp[1].minor.yy563 = 0;} break; case 108: /* from ::= FROM seltablist */ { yymsp[-1].minor.yy563 = yymsp[0].minor.yy563; sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy563); } break; case 109: /* stl_prefix ::= seltablist joinop */ { if( ALWAYS(yymsp[-1].minor.yy563 && yymsp[-1].minor.yy563->nSrc>0) ) yymsp[-1].minor.yy563->a[yymsp[-1].minor.yy563->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy502; } break; case 111: /* seltablist ::= stl_prefix nm dbnm as on_using */ { yymsp[-4].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy563,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); } break; case 112: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ { yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy421); sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-1].minor.yy0); } break; case 113: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ { yymsp[-7].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy563,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy563, yymsp[-3].minor.yy402); } break; case 114: /* seltablist ::= stl_prefix LP select RP as on_using */ { yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy637,&yymsp[0].minor.yy421); } break; case 115: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ { if( yymsp[-5].minor.yy563==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy421.pOn==0 && yymsp[0].minor.yy421.pUsing==0 ){ yymsp[-5].minor.yy563 = yymsp[-3].minor.yy563; }else if( ALWAYS(yymsp[-3].minor.yy563!=0) && yymsp[-3].minor.yy563->nSrc==1 ){ yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); if( yymsp[-5].minor.yy563 ){ SrcItem *pNew = &yymsp[-5].minor.yy563->a[yymsp[-5].minor.yy563->nSrc-1]; SrcItem *pOld = yymsp[-3].minor.yy563->a; assert( pOld->fg.fixedSchema==0 ); pNew->zName = pOld->zName; assert( pOld->fg.fixedSchema==0 ); if( pOld->fg.isSubquery ){ pNew->fg.isSubquery = 1; pNew->u4.pSubq = pOld->u4.pSubq; pOld->u4.pSubq = 0; |
︙ | ︙ | |||
178071 178072 178073 178074 178075 178076 178077 | pNew->u1.pFuncArg = pOld->u1.pFuncArg; pOld->u1.pFuncArg = 0; pOld->fg.isTabFunc = 0; pNew->fg.isTabFunc = 1; } pOld->zName = 0; } | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 178348 178349 178350 178351 178352 178353 178354 178355 178356 178357 178358 178359 178360 178361 178362 178363 178364 178365 178366 178367 178368 178369 178370 178371 178372 178373 178374 178375 178376 178377 178378 178379 178380 178381 178382 178383 178384 178385 178386 178387 178388 178389 178390 178391 178392 178393 178394 178395 178396 178397 178398 178399 178400 178401 178402 178403 178404 178405 178406 178407 178408 178409 178410 178411 178412 178413 178414 178415 178416 178417 178418 178419 178420 178421 178422 178423 178424 178425 178426 178427 178428 178429 178430 178431 178432 178433 178434 178435 178436 178437 178438 178439 178440 178441 178442 178443 178444 178445 178446 178447 178448 178449 178450 178451 178452 178453 178454 178455 178456 178457 178458 178459 178460 178461 178462 178463 178464 178465 178466 178467 178468 178469 178470 178471 178472 178473 178474 178475 178476 178477 178478 178479 178480 178481 178482 178483 178484 178485 178486 178487 178488 178489 178490 178491 178492 178493 178494 178495 178496 178497 178498 178499 178500 178501 178502 178503 178504 178505 178506 178507 178508 178509 178510 178511 178512 178513 178514 178515 178516 178517 178518 178519 178520 178521 178522 178523 178524 178525 178526 178527 178528 178529 178530 178531 178532 178533 178534 178535 178536 178537 178538 178539 178540 178541 178542 178543 178544 178545 178546 178547 178548 178549 178550 178551 178552 178553 178554 178555 178556 178557 178558 178559 178560 178561 178562 178563 178564 178565 178566 178567 178568 178569 178570 178571 178572 178573 178574 178575 178576 178577 178578 178579 178580 178581 178582 178583 178584 178585 178586 178587 178588 178589 178590 178591 178592 178593 178594 178595 178596 178597 178598 178599 178600 178601 178602 178603 178604 178605 178606 178607 178608 178609 178610 178611 178612 178613 178614 178615 178616 178617 178618 178619 178620 178621 178622 178623 178624 178625 178626 178627 178628 178629 178630 178631 178632 178633 178634 178635 178636 178637 178638 178639 178640 178641 178642 178643 178644 178645 178646 178647 178648 178649 178650 178651 178652 178653 178654 178655 178656 178657 178658 178659 178660 178661 178662 178663 178664 178665 178666 178667 178668 178669 178670 178671 178672 178673 178674 178675 178676 178677 178678 178679 178680 178681 178682 178683 178684 178685 178686 178687 178688 178689 178690 178691 178692 178693 178694 178695 178696 178697 178698 178699 178700 178701 178702 178703 178704 178705 178706 178707 178708 178709 178710 178711 178712 178713 178714 178715 178716 178717 178718 178719 178720 178721 178722 178723 178724 178725 178726 178727 178728 178729 178730 178731 178732 178733 178734 178735 178736 178737 178738 178739 178740 178741 178742 178743 178744 178745 178746 178747 178748 178749 178750 178751 178752 178753 178754 178755 178756 178757 178758 178759 178760 178761 178762 178763 178764 178765 178766 178767 178768 178769 178770 178771 178772 178773 178774 178775 178776 178777 178778 178779 178780 178781 178782 178783 178784 178785 178786 178787 178788 178789 178790 178791 178792 178793 178794 178795 178796 178797 178798 178799 178800 178801 178802 178803 178804 178805 178806 178807 178808 178809 178810 178811 178812 178813 178814 178815 178816 178817 178818 178819 178820 178821 178822 178823 178824 178825 178826 178827 178828 178829 178830 178831 178832 178833 178834 178835 178836 178837 178838 178839 178840 178841 178842 178843 178844 178845 178846 178847 178848 178849 178850 178851 178852 178853 178854 178855 178856 178857 178858 178859 178860 178861 178862 178863 178864 178865 178866 178867 178868 178869 178870 178871 178872 178873 178874 178875 178876 178877 178878 178879 178880 178881 178882 178883 178884 178885 178886 178887 178888 178889 178890 178891 178892 178893 178894 178895 178896 178897 178898 178899 178900 178901 178902 178903 178904 178905 178906 178907 178908 178909 178910 178911 178912 178913 178914 178915 178916 178917 178918 178919 178920 178921 178922 178923 178924 178925 178926 178927 178928 178929 178930 178931 178932 178933 178934 178935 178936 178937 178938 178939 178940 178941 178942 178943 178944 178945 178946 178947 178948 178949 178950 178951 178952 178953 178954 178955 178956 178957 178958 178959 178960 178961 178962 178963 178964 178965 178966 178967 178968 178969 178970 178971 178972 178973 178974 178975 178976 178977 178978 | pNew->u1.pFuncArg = pOld->u1.pFuncArg; pOld->u1.pFuncArg = 0; pOld->fg.isTabFunc = 0; pNew->fg.isTabFunc = 1; } pOld->zName = 0; } sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy563); }else{ Select *pSubquery; sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy563); pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy563,0,0,0,0,SF_NestedFrom,0); yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy421); } } break; case 116: /* dbnm ::= */ case 131: /* indexed_opt ::= */ yytestcase(yyruleno==131); {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} break; case 118: /* fullname ::= nm */ { yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0); } yymsp[0].minor.yy563 = yylhsminor.yy563; break; case 119: /* fullname ::= nm DOT nm */ { yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0); } yymsp[-2].minor.yy563 = yylhsminor.yy563; break; case 120: /* xfullname ::= nm */ {yymsp[0].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} break; case 121: /* xfullname ::= nm DOT nm */ {yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} break; case 122: /* xfullname ::= nm DOT nm AS nm */ { yymsp[-4].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ if( yymsp[-4].minor.yy563 ) yymsp[-4].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; case 123: /* xfullname ::= nm AS nm */ { yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ if( yymsp[-2].minor.yy563 ) yymsp[-2].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; case 124: /* joinop ::= COMMA|JOIN */ { yymsp[0].minor.yy502 = JT_INNER; } break; case 125: /* joinop ::= JOIN_KW JOIN */ {yymsp[-1].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} break; case 126: /* joinop ::= JOIN_KW nm JOIN */ {yymsp[-2].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} break; case 127: /* joinop ::= JOIN_KW nm nm JOIN */ {yymsp[-3].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} break; case 128: /* on_using ::= ON expr */ {yymsp[-1].minor.yy421.pOn = yymsp[0].minor.yy590; yymsp[-1].minor.yy421.pUsing = 0;} break; case 129: /* on_using ::= USING LP idlist RP */ {yymsp[-3].minor.yy421.pOn = 0; yymsp[-3].minor.yy421.pUsing = yymsp[-1].minor.yy204;} break; case 130: /* on_using ::= */ {yymsp[1].minor.yy421.pOn = 0; yymsp[1].minor.yy421.pUsing = 0;} break; case 132: /* indexed_by ::= INDEXED BY nm */ {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} break; case 133: /* indexed_by ::= NOT INDEXED */ {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} break; case 135: /* orderby_opt ::= ORDER BY sortlist */ case 145: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==145); {yymsp[-2].minor.yy402 = yymsp[0].minor.yy402;} break; case 136: /* sortlist ::= sortlist COMMA expr sortorder nulls */ { yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402,yymsp[-2].minor.yy590); sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502); } break; case 137: /* sortlist ::= expr sortorder nulls */ { yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy590); /*A-overwrites-Y*/ sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502); } break; case 138: /* sortorder ::= ASC */ {yymsp[0].minor.yy502 = SQLITE_SO_ASC;} break; case 139: /* sortorder ::= DESC */ {yymsp[0].minor.yy502 = SQLITE_SO_DESC;} break; case 140: /* sortorder ::= */ case 143: /* nulls ::= */ yytestcase(yyruleno==143); {yymsp[1].minor.yy502 = SQLITE_SO_UNDEFINED;} break; case 141: /* nulls ::= NULLS FIRST */ {yymsp[-1].minor.yy502 = SQLITE_SO_ASC;} break; case 142: /* nulls ::= NULLS LAST */ {yymsp[-1].minor.yy502 = SQLITE_SO_DESC;} break; case 146: /* having_opt ::= */ case 148: /* limit_opt ::= */ yytestcase(yyruleno==148); case 153: /* where_opt ::= */ yytestcase(yyruleno==153); case 155: /* where_opt_ret ::= */ yytestcase(yyruleno==155); case 232: /* case_else ::= */ yytestcase(yyruleno==232); case 233: /* case_operand ::= */ yytestcase(yyruleno==233); case 252: /* vinto ::= */ yytestcase(yyruleno==252); {yymsp[1].minor.yy590 = 0;} break; case 147: /* having_opt ::= HAVING expr */ case 154: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==154); case 156: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==156); case 231: /* case_else ::= ELSE expr */ yytestcase(yyruleno==231); case 251: /* vinto ::= INTO expr */ yytestcase(yyruleno==251); {yymsp[-1].minor.yy590 = yymsp[0].minor.yy590;} break; case 149: /* limit_opt ::= LIMIT expr */ {yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,0);} break; case 150: /* limit_opt ::= LIMIT expr OFFSET expr */ {yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} break; case 151: /* limit_opt ::= LIMIT expr COMMA expr */ {yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,yymsp[-2].minor.yy590);} break; case 152: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ { sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy563, &yymsp[-1].minor.yy0); sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy563,yymsp[0].minor.yy590,0,0); } break; case 157: /* where_opt_ret ::= RETURNING selcollist */ {sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-1].minor.yy590 = 0;} break; case 158: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ {sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-3].minor.yy590 = yymsp[-2].minor.yy590;} break; case 159: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ { sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-4].minor.yy0); sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy402,"set list"); if( yymsp[-1].minor.yy563 ){ SrcList *pFromClause = yymsp[-1].minor.yy563; if( pFromClause->nSrc>1 ){ Select *pSubquery; Token as; pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0); as.n = 0; as.z = 0; pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); } yymsp[-5].minor.yy563 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy563, pFromClause); } sqlite3Update(pParse,yymsp[-5].minor.yy563,yymsp[-2].minor.yy402,yymsp[0].minor.yy590,yymsp[-6].minor.yy502,0,0,0); } break; case 160: /* setlist ::= setlist COMMA nm EQ expr */ { yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[0].minor.yy590); sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, 1); } break; case 161: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { yymsp[-6].minor.yy402 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy402, yymsp[-3].minor.yy204, yymsp[0].minor.yy590); } break; case 162: /* setlist ::= nm EQ expr */ { yylhsminor.yy402 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy590); sqlite3ExprListSetName(pParse, yylhsminor.yy402, &yymsp[-2].minor.yy0, 1); } yymsp[-2].minor.yy402 = yylhsminor.yy402; break; case 163: /* setlist ::= LP idlist RP EQ expr */ { yymsp[-4].minor.yy402 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy204, yymsp[0].minor.yy590); } break; case 164: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ { sqlite3Insert(pParse, yymsp[-3].minor.yy563, yymsp[-1].minor.yy637, yymsp[-2].minor.yy204, yymsp[-5].minor.yy502, yymsp[0].minor.yy403); } break; case 165: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ { sqlite3Insert(pParse, yymsp[-4].minor.yy563, 0, yymsp[-3].minor.yy204, yymsp[-6].minor.yy502, 0); } break; case 166: /* upsert ::= */ { yymsp[1].minor.yy403 = 0; } break; case 167: /* upsert ::= RETURNING selcollist */ { yymsp[-1].minor.yy403 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy402); } break; case 168: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ { yymsp[-11].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy402,yymsp[-6].minor.yy590,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,yymsp[0].minor.yy403);} break; case 169: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ { yymsp[-8].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy402,yymsp[-3].minor.yy590,0,0,yymsp[0].minor.yy403); } break; case 170: /* upsert ::= ON CONFLICT DO NOTHING returning */ { yymsp[-4].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } break; case 171: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ { yymsp[-7].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,0);} break; case 172: /* returning ::= RETURNING selcollist */ {sqlite3AddReturning(pParse,yymsp[0].minor.yy402);} break; case 175: /* idlist_opt ::= */ {yymsp[1].minor.yy204 = 0;} break; case 176: /* idlist_opt ::= LP idlist RP */ {yymsp[-2].minor.yy204 = yymsp[-1].minor.yy204;} break; case 177: /* idlist ::= idlist COMMA nm */ {yymsp[-2].minor.yy204 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy204,&yymsp[0].minor.yy0);} break; case 178: /* idlist ::= nm */ {yymsp[0].minor.yy204 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} break; case 179: /* expr ::= LP expr RP */ {yymsp[-2].minor.yy590 = yymsp[-1].minor.yy590;} break; case 180: /* expr ::= ID|INDEXED|JOIN_KW */ {yymsp[0].minor.yy590=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; case 181: /* expr ::= nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } yymsp[-2].minor.yy590 = yylhsminor.yy590; break; case 182: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); Expr *temp3 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); if( IN_RENAME_OBJECT ){ sqlite3RenameTokenRemap(pParse, 0, temp1); } yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } yymsp[-4].minor.yy590 = yylhsminor.yy590; break; case 183: /* term ::= NULL|FLOAT|BLOB */ case 184: /* term ::= STRING */ yytestcase(yyruleno==184); {yymsp[0].minor.yy590=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; case 185: /* term ::= INTEGER */ { yylhsminor.yy590 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); if( yylhsminor.yy590 ) yylhsminor.yy590->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); } yymsp[0].minor.yy590 = yylhsminor.yy590; break; case 186: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; yymsp[0].minor.yy590 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy590, n); }else{ /* 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. */ Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/ assert( t.n>=2 ); if( pParse->nested==0 ){ parserSyntaxError(pParse, &t); yymsp[0].minor.yy590 = 0; }else{ yymsp[0].minor.yy590 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); if( yymsp[0].minor.yy590 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy590->iTable); } } } break; case 187: /* expr ::= expr COLLATE ID|STRING */ { yymsp[-2].minor.yy590 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy590, &yymsp[0].minor.yy0, 1); } break; case 188: /* expr ::= CAST LP expr AS typetoken RP */ { yymsp[-5].minor.yy590 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy590, yymsp[-3].minor.yy590, 0); } break; case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy502); } yymsp[-4].minor.yy590 = yylhsminor.yy590; break; case 190: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy402, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy502); sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-1].minor.yy402); } yymsp[-7].minor.yy590 = yylhsminor.yy590; break; case 191: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); } yymsp[-3].minor.yy590 = yylhsminor.yy590; break; case 192: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy402, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy502); sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); } yymsp[-5].minor.yy590 = yylhsminor.yy590; break; case 193: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy402, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy502); sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-2].minor.yy402); } yymsp[-8].minor.yy590 = yylhsminor.yy590; break; case 194: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); } yymsp[-4].minor.yy590 = yylhsminor.yy590; break; case 195: /* term ::= CTIME_KW */ { yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); } yymsp[0].minor.yy590 = yylhsminor.yy590; break; case 196: /* expr ::= LP nexprlist COMMA expr RP */ { ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590); yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); if( yymsp[-4].minor.yy590 ){ yymsp[-4].minor.yy590->x.pList = pList; if( ALWAYS(pList->nExpr) ){ yymsp[-4].minor.yy590->flags |= pList->a[0].pExpr->flags & EP_Propagate; } }else{ sqlite3ExprListDelete(pParse->db, pList); } } break; case 197: /* expr ::= expr AND expr */ {yymsp[-2].minor.yy590=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} break; case 198: /* expr ::= expr OR expr */ case 199: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==199); case 200: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==200); case 201: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==201); case 202: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==202); case 203: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==203); case 204: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==204); {yymsp[-2].minor.yy590=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} break; case 205: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; case 206: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; yymsp[-1].minor.yy0.n &= 0x7fffffff; pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy590); pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy590); yymsp[-2].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); if( bNot ) yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy590, 0); if( yymsp[-2].minor.yy590 ) yymsp[-2].minor.yy590->flags |= EP_InfixFunc; } break; case 207: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; yymsp[-3].minor.yy0.n &= 0x7fffffff; pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy590); pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590); yymsp[-4].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); if( bNot ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); if( yymsp[-4].minor.yy590 ) yymsp[-4].minor.yy590->flags |= EP_InfixFunc; } break; case 208: /* expr ::= expr ISNULL|NOTNULL */ {yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy590,0);} break; case 209: /* expr ::= expr NOT NULL */ {yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy590,0);} break; case 210: /* expr ::= expr IS expr */ { yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy590,yymsp[0].minor.yy590); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-2].minor.yy590, TK_ISNULL); } break; case 211: /* expr ::= expr IS NOT expr */ { yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy590,yymsp[0].minor.yy590); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-3].minor.yy590, TK_NOTNULL); } break; case 212: /* expr ::= expr IS NOT DISTINCT FROM expr */ { yymsp[-5].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy590,yymsp[0].minor.yy590); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-5].minor.yy590, TK_ISNULL); } break; case 213: /* expr ::= expr IS DISTINCT FROM expr */ { yymsp[-4].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy590,yymsp[0].minor.yy590); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-4].minor.yy590, TK_NOTNULL); } break; case 214: /* expr ::= NOT expr */ case 215: /* expr ::= BITNOT expr */ yytestcase(yyruleno==215); {yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy590, 0);/*A-overwrites-B*/} break; case 216: /* expr ::= PLUS|MINUS expr */ { Expr *p = yymsp[0].minor.yy590; u8 op = yymsp[-1].major + (TK_UPLUS-TK_PLUS); assert( TK_UPLUS>TK_PLUS ); assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) ); if( p && p->op==TK_UPLUS ){ p->op = op; yymsp[-1].minor.yy590 = p; }else{ yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, op, p, 0); /*A-overwrites-B*/ } } break; case 217: /* expr ::= expr PTR expr */ { ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy590); pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy590); yylhsminor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); } yymsp[-2].minor.yy590 = yylhsminor.yy590; break; case 218: /* between_op ::= BETWEEN */ case 221: /* in_op ::= IN */ yytestcase(yyruleno==221); {yymsp[0].minor.yy502 = 0;} break; case 220: /* expr ::= expr between_op expr AND expr */ { ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590); yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy590, 0); if( yymsp[-4].minor.yy590 ){ yymsp[-4].minor.yy590->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); } break; case 223: /* expr ::= expr in_op LP exprlist RP */ { if( yymsp[-1].minor.yy402==0 ){ /* Expressions of the form ** ** expr1 IN () ** expr1 NOT IN () ** ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy590); yymsp[-4].minor.yy590 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy502 ? "true" : "false"); if( yymsp[-4].minor.yy590 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy590); }else{ Expr *pRHS = yymsp[-1].minor.yy402->a[0].pExpr; if( yymsp[-1].minor.yy402->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && yymsp[-4].minor.yy590->op!=TK_VECTOR ){ yymsp[-1].minor.yy402->a[0].pExpr = 0; sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy590, pRHS); }else if( yymsp[-1].minor.yy402->nExpr==1 && pRHS->op==TK_SELECT ){ yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pRHS->x.pSelect); pRHS->x.pSelect = 0; sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); }else{ yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); if( yymsp[-4].minor.yy590==0 ){ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); }else if( yymsp[-4].minor.yy590->pLeft->op==TK_VECTOR ){ int nExpr = yymsp[-4].minor.yy590->pLeft->x.pList->nExpr; Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy402); if( pSelectRHS ){ parserDoubleLinkSelect(pParse, pSelectRHS); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelectRHS); } }else{ yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy402; sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590); } } if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); } } break; case 224: /* expr ::= LP select RP */ { yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy590, yymsp[-1].minor.yy637); } break; case 225: /* expr ::= expr in_op LP select RP */ { yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, yymsp[-1].minor.yy637); if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); } break; case 226: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); if( yymsp[0].minor.yy402 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy402); yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelect); if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); } break; case 227: /* expr ::= EXISTS LP select RP */ { Expr *p; p = yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy637); } break; case 228: /* expr ::= CASE case_operand case_exprlist case_else END */ { yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy590, 0); if( yymsp[-4].minor.yy590 ){ yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy590 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590) : yymsp[-2].minor.yy402; sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590); }else{ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy402); sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590); } } break; case 229: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[-2].minor.yy590); yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[0].minor.yy590); } break; case 230: /* case_exprlist ::= WHEN expr THEN expr */ { yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy402, yymsp[0].minor.yy590); } break; case 235: /* nexprlist ::= nexprlist COMMA expr */ {yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[0].minor.yy590);} break; case 236: /* nexprlist ::= expr */ {yymsp[0].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy590); /*A-overwrites-Y*/} break; case 238: /* paren_exprlist ::= LP exprlist RP */ case 243: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==243); {yymsp[-2].minor.yy402 = yymsp[-1].minor.yy402;} break; case 239: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy402, yymsp[-10].minor.yy502, &yymsp[-11].minor.yy0, yymsp[0].minor.yy590, SQLITE_SO_ASC, yymsp[-8].minor.yy502, SQLITE_IDXTYPE_APPDEF); if( IN_RENAME_OBJECT && pParse->pNewIndex ){ sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0); } } break; case 240: /* uniqueflag ::= UNIQUE */ case 282: /* raisetype ::= ABORT */ yytestcase(yyruleno==282); {yymsp[0].minor.yy502 = OE_Abort;} break; case 241: /* uniqueflag ::= */ {yymsp[1].minor.yy502 = OE_None;} break; case 244: /* eidlist ::= eidlist COMMA nm collate sortorder */ { yymsp[-4].minor.yy402 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); } break; case 245: /* eidlist ::= nm collate sortorder */ { yymsp[-2].minor.yy402 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); /*A-overwrites-Y*/ } break; case 248: /* cmd ::= DROP INDEX ifexists fullname */ {sqlite3DropIndex(pParse, yymsp[0].minor.yy563, yymsp[-1].minor.yy502);} break; case 249: /* cmd ::= VACUUM vinto */ {sqlite3Vacuum(pParse,0,yymsp[0].minor.yy590);} break; case 250: /* cmd ::= VACUUM nm vinto */ {sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy590);} break; case 253: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; case 254: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; |
︙ | ︙ | |||
178709 178710 178711 178712 178713 178714 178715 | {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; case 260: /* 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; | | | | | | | | | | | | | | | | 178986 178987 178988 178989 178990 178991 178992 178993 178994 178995 178996 178997 178998 178999 179000 179001 179002 179003 179004 179005 179006 179007 179008 179009 179010 179011 179012 179013 179014 179015 179016 179017 179018 179019 179020 179021 179022 179023 179024 179025 179026 179027 179028 179029 179030 179031 179032 179033 179034 179035 179036 179037 179038 179039 179040 179041 179042 179043 | {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; case 260: /* 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.yy319, &all); } break; case 261: /* 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.yy502, yymsp[-4].minor.yy28.a, yymsp[-4].minor.yy28.b, yymsp[-2].minor.yy563, yymsp[0].minor.yy590, yymsp[-10].minor.yy502, yymsp[-8].minor.yy502); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; case 262: /* trigger_time ::= BEFORE|AFTER */ { yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/ } break; case 263: /* trigger_time ::= INSTEAD OF */ { yymsp[-1].minor.yy502 = TK_INSTEAD;} break; case 264: /* trigger_time ::= */ { yymsp[1].minor.yy502 = TK_BEFORE; } break; case 265: /* trigger_event ::= DELETE|INSERT */ case 266: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==266); {yymsp[0].minor.yy28.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy28.b = 0;} break; case 267: /* trigger_event ::= UPDATE OF idlist */ {yymsp[-2].minor.yy28.a = TK_UPDATE; yymsp[-2].minor.yy28.b = yymsp[0].minor.yy204;} break; case 268: /* when_clause ::= */ case 287: /* key_opt ::= */ yytestcase(yyruleno==287); { yymsp[1].minor.yy590 = 0; } break; case 269: /* when_clause ::= WHEN expr */ case 288: /* key_opt ::= KEY expr */ yytestcase(yyruleno==288); { yymsp[-1].minor.yy590 = yymsp[0].minor.yy590; } break; case 270: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { assert( yymsp[-2].minor.yy319!=0 ); yymsp[-2].minor.yy319->pLast->pNext = yymsp[-1].minor.yy319; yymsp[-2].minor.yy319->pLast = yymsp[-1].minor.yy319; } break; case 271: /* trigger_cmd_list ::= trigger_cmd SEMI */ { assert( yymsp[-1].minor.yy319!=0 ); yymsp[-1].minor.yy319->pLast = yymsp[-1].minor.yy319; } break; case 272: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, "qualified table names are not allowed on INSERT, UPDATE, and DELETE " |
︙ | ︙ | |||
178778 178779 178780 178781 178782 178783 178784 | { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; case 275: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 179055 179056 179057 179058 179059 179060 179061 179062 179063 179064 179065 179066 179067 179068 179069 179070 179071 179072 179073 179074 179075 179076 179077 179078 179079 179080 179081 179082 179083 179084 179085 179086 179087 179088 179089 179090 179091 179092 179093 179094 179095 179096 179097 179098 179099 179100 179101 179102 179103 179104 179105 179106 179107 179108 179109 179110 179111 179112 179113 179114 179115 179116 179117 179118 179119 179120 179121 179122 179123 179124 179125 179126 179127 179128 179129 179130 179131 179132 179133 179134 179135 179136 179137 179138 179139 179140 179141 179142 179143 179144 179145 179146 179147 179148 179149 179150 179151 179152 179153 179154 179155 179156 179157 179158 179159 179160 179161 179162 179163 179164 179165 179166 179167 179168 179169 179170 179171 179172 179173 179174 179175 179176 179177 179178 179179 179180 179181 179182 179183 179184 179185 179186 179187 179188 179189 179190 179191 179192 179193 179194 179195 179196 179197 179198 179199 179200 179201 179202 179203 179204 179205 179206 179207 179208 179209 179210 179211 179212 179213 179214 179215 179216 179217 179218 179219 179220 179221 179222 179223 179224 179225 179226 179227 179228 179229 179230 179231 179232 179233 179234 179235 179236 179237 179238 179239 179240 179241 179242 179243 179244 179245 179246 179247 179248 179249 179250 179251 179252 179253 179254 179255 179256 179257 179258 179259 179260 179261 179262 179263 179264 179265 179266 179267 179268 179269 179270 179271 179272 179273 179274 179275 179276 179277 179278 179279 179280 179281 179282 179283 179284 179285 179286 179287 179288 179289 179290 179291 179292 179293 179294 179295 179296 179297 179298 179299 179300 179301 179302 179303 179304 179305 179306 179307 179308 179309 179310 179311 179312 179313 179314 179315 179316 179317 179318 179319 179320 179321 179322 179323 179324 179325 179326 179327 179328 179329 179330 179331 179332 179333 179334 179335 179336 179337 179338 179339 179340 179341 179342 179343 179344 179345 179346 179347 179348 179349 179350 179351 179352 179353 179354 179355 179356 179357 | { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; case 275: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ {yylhsminor.yy319 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy563, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590, yymsp[-7].minor.yy502, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy342);} yymsp[-8].minor.yy319 = yylhsminor.yy319; break; case 276: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ { yylhsminor.yy319 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy204,yymsp[-2].minor.yy637,yymsp[-6].minor.yy502,yymsp[-1].minor.yy403,yymsp[-7].minor.yy342,yymsp[0].minor.yy342);/*yylhsminor.yy319-overwrites-yymsp[-6].minor.yy502*/ } yymsp[-7].minor.yy319 = yylhsminor.yy319; break; case 277: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ {yylhsminor.yy319 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy590, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy342);} yymsp[-5].minor.yy319 = yylhsminor.yy319; break; case 278: /* trigger_cmd ::= scanpt select scanpt */ {yylhsminor.yy319 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy637, yymsp[-2].minor.yy342, yymsp[0].minor.yy342); /*yylhsminor.yy319-overwrites-yymsp[-1].minor.yy637*/} yymsp[-2].minor.yy319 = yylhsminor.yy319; break; case 279: /* expr ::= RAISE LP IGNORE RP */ { yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); if( yymsp[-3].minor.yy590 ){ yymsp[-3].minor.yy590->affExpr = OE_Ignore; } } break; case 280: /* expr ::= RAISE LP raisetype COMMA expr RP */ { yymsp[-5].minor.yy590 = sqlite3PExpr(pParse, TK_RAISE, yymsp[-1].minor.yy590, 0); if( yymsp[-5].minor.yy590 ) { yymsp[-5].minor.yy590->affExpr = (char)yymsp[-3].minor.yy502; } } break; case 281: /* raisetype ::= ROLLBACK */ {yymsp[0].minor.yy502 = OE_Rollback;} break; case 283: /* raisetype ::= FAIL */ {yymsp[0].minor.yy502 = OE_Fail;} break; case 284: /* cmd ::= DROP TRIGGER ifexists fullname */ { sqlite3DropTrigger(pParse,yymsp[0].minor.yy563,yymsp[-1].minor.yy502); } break; case 285: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { sqlite3Attach(pParse, yymsp[-3].minor.yy590, yymsp[-1].minor.yy590, yymsp[0].minor.yy590); } break; case 286: /* cmd ::= DETACH database_kw_opt expr */ { sqlite3Detach(pParse, yymsp[0].minor.yy590); } break; case 289: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; case 290: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; case 291: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; case 292: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; case 293: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy563,&yymsp[0].minor.yy0); } break; case 294: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; case 295: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ { sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy563, &yymsp[0].minor.yy0); } break; case 296: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy563); } break; case 297: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ { sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy563, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; case 298: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; case 299: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; case 300: /* 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.yy502); } break; case 301: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; case 302: /* vtabargtoken ::= ANY */ case 303: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==303); case 304: /* lp ::= LP */ yytestcase(yyruleno==304); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; case 305: /* with ::= WITH wqlist */ case 306: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==306); { sqlite3WithPush(pParse, yymsp[0].minor.yy125, 1); } break; case 307: /* wqas ::= AS */ {yymsp[0].minor.yy444 = M10d_Any;} break; case 308: /* wqas ::= AS MATERIALIZED */ {yymsp[-1].minor.yy444 = M10d_Yes;} break; case 309: /* wqas ::= AS NOT MATERIALIZED */ {yymsp[-2].minor.yy444 = M10d_No;} break; case 310: /* wqitem ::= withnm eidlist_opt wqas LP select RP */ { yymsp[-5].minor.yy361 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy402, yymsp[-1].minor.yy637, yymsp[-3].minor.yy444); /*A-overwrites-X*/ } break; case 311: /* withnm ::= nm */ {pParse->bHasWith = 1;} break; case 312: /* wqlist ::= wqitem */ { yymsp[0].minor.yy125 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy361); /*A-overwrites-X*/ } break; case 313: /* wqlist ::= wqlist COMMA wqitem */ { yymsp[-2].minor.yy125 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy125, yymsp[0].minor.yy361); } break; case 314: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ { assert( yymsp[0].minor.yy483!=0 ); sqlite3WindowChain(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy483); yymsp[0].minor.yy483->pNextWin = yymsp[-2].minor.yy483; yylhsminor.yy483 = yymsp[0].minor.yy483; } yymsp[-2].minor.yy483 = yylhsminor.yy483; break; case 315: /* windowdefn ::= nm AS LP window RP */ { if( ALWAYS(yymsp[-1].minor.yy483) ){ yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); } yylhsminor.yy483 = yymsp[-1].minor.yy483; } yymsp[-4].minor.yy483 = yylhsminor.yy483; break; case 316: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ { yymsp[-4].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, 0); } break; case 317: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ { yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, &yymsp[-5].minor.yy0); } yymsp[-5].minor.yy483 = yylhsminor.yy483; break; case 318: /* window ::= ORDER BY sortlist frame_opt */ { yymsp[-3].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, 0); } break; case 319: /* window ::= nm ORDER BY sortlist frame_opt */ { yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0); } yymsp[-4].minor.yy483 = yylhsminor.yy483; break; case 320: /* window ::= nm frame_opt */ { yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, 0, &yymsp[-1].minor.yy0); } yymsp[-1].minor.yy483 = yylhsminor.yy483; break; case 321: /* frame_opt ::= */ { yymsp[1].minor.yy483 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); } break; case 322: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ { yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy502, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy444); } yymsp[-2].minor.yy483 = yylhsminor.yy483; break; case 323: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ { yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy502, yymsp[-3].minor.yy205.eType, yymsp[-3].minor.yy205.pExpr, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, yymsp[0].minor.yy444); } yymsp[-5].minor.yy483 = yylhsminor.yy483; break; case 325: /* frame_bound_s ::= frame_bound */ case 327: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==327); {yylhsminor.yy205 = yymsp[0].minor.yy205;} yymsp[0].minor.yy205 = yylhsminor.yy205; break; case 326: /* frame_bound_s ::= UNBOUNDED PRECEDING */ case 328: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==328); case 330: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==330); {yylhsminor.yy205.eType = yymsp[-1].major; yylhsminor.yy205.pExpr = 0;} yymsp[-1].minor.yy205 = yylhsminor.yy205; break; case 329: /* frame_bound ::= expr PRECEDING|FOLLOWING */ {yylhsminor.yy205.eType = yymsp[0].major; yylhsminor.yy205.pExpr = yymsp[-1].minor.yy590;} yymsp[-1].minor.yy205 = yylhsminor.yy205; break; case 331: /* frame_exclude_opt ::= */ {yymsp[1].minor.yy444 = 0;} break; case 332: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ {yymsp[-1].minor.yy444 = yymsp[0].minor.yy444;} break; case 333: /* frame_exclude ::= NO OTHERS */ case 334: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==334); {yymsp[-1].minor.yy444 = yymsp[-1].major; /*A-overwrites-X*/} break; case 335: /* frame_exclude ::= GROUP|TIES */ {yymsp[0].minor.yy444 = yymsp[0].major; /*A-overwrites-X*/} break; case 336: /* window_clause ::= WINDOW windowdefn_list */ { yymsp[-1].minor.yy483 = yymsp[0].minor.yy483; } break; case 337: /* filter_over ::= filter_clause over_clause */ { if( yymsp[0].minor.yy483 ){ yymsp[0].minor.yy483->pFilter = yymsp[-1].minor.yy590; }else{ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590); } yylhsminor.yy483 = yymsp[0].minor.yy483; } yymsp[-1].minor.yy483 = yylhsminor.yy483; break; case 338: /* filter_over ::= over_clause */ { yylhsminor.yy483 = yymsp[0].minor.yy483; } yymsp[0].minor.yy483 = yylhsminor.yy483; break; case 339: /* filter_over ::= filter_clause */ { yylhsminor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); if( yylhsminor.yy483 ){ yylhsminor.yy483->eFrmType = TK_FILTER; yylhsminor.yy483->pFilter = yymsp[0].minor.yy590; }else{ sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy590); } } yymsp[0].minor.yy483 = yylhsminor.yy483; break; case 340: /* over_clause ::= OVER LP window RP */ { yymsp[-3].minor.yy483 = yymsp[-1].minor.yy483; assert( yymsp[-3].minor.yy483!=0 ); } break; case 341: /* over_clause ::= OVER nm */ { yymsp[-1].minor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); if( yymsp[-1].minor.yy483 ){ yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); } } break; case 342: /* filter_clause ::= FILTER LP WHERE expr RP */ { yymsp[-4].minor.yy590 = yymsp[-1].minor.yy590; } break; case 343: /* term ::= QNUMBER */ { yylhsminor.yy590=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); sqlite3DequoteNumber(pParse, yylhsminor.yy590); } yymsp[0].minor.yy590 = yylhsminor.yy590; break; default: /* (344) input ::= cmdlist */ yytestcase(yyruleno==344); /* (345) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==345); /* (346) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=346); /* (347) ecmd ::= SEMI */ yytestcase(yyruleno==347); /* (348) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==348); |
︙ | ︙ | |||
180247 180248 180249 180250 180251 180252 180253 | for(i=1; sqlite3Isspace(z[i]); i++){} *tokenType = TK_SPACE; return i; } case CC_MINUS: { if( z[1]=='-' ){ for(i=2; (c=z[i])!=0 && c!='\n'; i++){} | | | 180524 180525 180526 180527 180528 180529 180530 180531 180532 180533 180534 180535 180536 180537 180538 | for(i=1; sqlite3Isspace(z[i]); i++){} *tokenType = TK_SPACE; return i; } case CC_MINUS: { if( z[1]=='-' ){ for(i=2; (c=z[i])!=0 && c!='\n'; i++){} *tokenType = TK_COMMENT; return i; }else if( z[1]=='>' ){ *tokenType = TK_PTR; return 2 + (z[2]=='>'); } *tokenType = TK_MINUS; return 1; |
︙ | ︙ | |||
180283 180284 180285 180286 180287 180288 180289 | case CC_SLASH: { if( z[1]!='*' || z[2]==0 ){ *tokenType = TK_SLASH; return 1; } for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} if( c ) i++; | | | 180560 180561 180562 180563 180564 180565 180566 180567 180568 180569 180570 180571 180572 180573 180574 | case CC_SLASH: { if( z[1]!='*' || z[2]==0 ){ *tokenType = TK_SLASH; return 1; } for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} if( c ) i++; *tokenType = TK_COMMENT; return i; } case CC_PERCENT: { *tokenType = TK_REM; return 1; } case CC_EQ: { |
︙ | ︙ | |||
180612 180613 180614 180615 180616 180617 180618 | pParse->nErr++; break; } #ifndef SQLITE_OMIT_WINDOWFUNC if( tokenType>=TK_WINDOW ){ assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW | | | | 180889 180890 180891 180892 180893 180894 180895 180896 180897 180898 180899 180900 180901 180902 180903 180904 180905 180906 180907 180908 | pParse->nErr++; break; } #ifndef SQLITE_OMIT_WINDOWFUNC if( tokenType>=TK_WINDOW ){ assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW || tokenType==TK_QNUMBER || tokenType==TK_COMMENT ); #else if( tokenType>=TK_SPACE ){ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL || tokenType==TK_QNUMBER || tokenType==TK_COMMENT ); #endif /* SQLITE_OMIT_WINDOWFUNC */ if( AtomicLoad(&db->u1.isInterrupted) ){ pParse->rc = SQLITE_INTERRUPT; pParse->nErr++; break; } |
︙ | ︙ | |||
180651 180652 180653 180654 180655 180656 180657 180658 180659 180660 180661 180662 180663 180664 | }else if( tokenType==TK_OVER ){ assert( n==4 ); tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); }else if( tokenType==TK_FILTER ){ assert( n==6 ); tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); #endif /* SQLITE_OMIT_WINDOWFUNC */ }else if( tokenType!=TK_QNUMBER ){ Token x; x.z = zSql; x.n = n; sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", &x); break; } | > > > | 180928 180929 180930 180931 180932 180933 180934 180935 180936 180937 180938 180939 180940 180941 180942 180943 180944 | }else if( tokenType==TK_OVER ){ assert( n==4 ); tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); }else if( tokenType==TK_FILTER ){ assert( n==6 ); tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); #endif /* SQLITE_OMIT_WINDOWFUNC */ }else if( tokenType==TK_COMMENT && (db->flags & SQLITE_Comments)!=0 ){ zSql += n; continue; }else if( tokenType!=TK_QNUMBER ){ Token x; x.z = zSql; x.n = n; sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", &x); break; } |
︙ | ︙ | |||
180757 180758 180759 180760 180761 180762 180763 180764 180765 180766 180767 180768 180769 180770 | for(i=0; zSql[i] && pStr->accError==0; i+=n){ if( tokenType!=TK_SPACE ){ prevType = tokenType; } n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType); if( NEVER(n<=0) ) break; switch( tokenType ){ case TK_SPACE: { break; } case TK_NULL: { if( prevType==TK_IS || prevType==TK_NOT ){ sqlite3_str_append(pStr, " NULL", 5); break; | > | 181037 181038 181039 181040 181041 181042 181043 181044 181045 181046 181047 181048 181049 181050 181051 | for(i=0; zSql[i] && pStr->accError==0; i+=n){ if( tokenType!=TK_SPACE ){ prevType = tokenType; } n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType); if( NEVER(n<=0) ) break; switch( tokenType ){ case TK_COMMENT: case TK_SPACE: { break; } case TK_NULL: { if( prevType==TK_IS || prevType==TK_NOT ){ sqlite3_str_append(pStr, " NULL", 5); break; |
︙ | ︙ | |||
182198 182199 182200 182201 182202 182203 182204 | int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */ rc = setupLookaside(db, pBuf, sz, cnt); break; } default: { static const struct { int op; /* The opcode */ | | > > > | 182479 182480 182481 182482 182483 182484 182485 182486 182487 182488 182489 182490 182491 182492 182493 182494 182495 182496 182497 182498 182499 182500 182501 182502 182503 182504 182505 182506 182507 182508 182509 182510 182511 182512 182513 182514 182515 182516 | int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */ rc = setupLookaside(db, pBuf, sz, cnt); break; } default: { static const struct { int op; /* The opcode */ u64 mask; /* Mask of the bit in sqlite3.flags to set/clear */ } aFlagOp[] = { { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys }, { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger }, { SQLITE_DBCONFIG_ENABLE_VIEW, SQLITE_EnableView }, { SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, SQLITE_Fts3Tokenizer }, { SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, SQLITE_LoadExtension }, { SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE, SQLITE_NoCkptOnClose }, { SQLITE_DBCONFIG_ENABLE_QPSG, SQLITE_EnableQPSG }, { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP }, { SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase }, { SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive }, { SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema| SQLITE_NoSchemaError }, { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter }, { SQLITE_DBCONFIG_DQS_DDL, SQLITE_DqsDDL }, { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML }, { SQLITE_DBCONFIG_LEGACY_FILE_FORMAT, SQLITE_LegacyFileFmt }, { SQLITE_DBCONFIG_TRUSTED_SCHEMA, SQLITE_TrustedSchema }, { SQLITE_DBCONFIG_STMT_SCANSTATUS, SQLITE_StmtScanStatus }, { SQLITE_DBCONFIG_REVERSE_SCANORDER, SQLITE_ReverseOrder }, { SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE, SQLITE_AttachCreate }, { SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE, SQLITE_AttachWrite }, { SQLITE_DBCONFIG_ENABLE_COMMENTS, SQLITE_Comments }, }; unsigned int i; rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ for(i=0; i<ArraySize(aFlagOp); i++){ if( aFlagOp[i].op==op ){ int onoff = va_arg(ap, int); int *pRes = va_arg(ap, int*); |
︙ | ︙ | |||
184560 184561 184562 184563 184564 184565 184566 184567 184568 184569 184570 184571 184572 184573 | ** SQLITE_TESTCTRL_SORTER_MMAP test-control at runtime. */ db->nMaxSorterMmap = 0x7FFFFFFF; #endif db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_EnableView | SQLITE_CacheSpill #if !defined(SQLITE_TRUSTED_SCHEMA) || SQLITE_TRUSTED_SCHEMA+0!=0 | SQLITE_TrustedSchema #endif /* The SQLITE_DQS compile-time option determines the default settings ** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML. ** ** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML | > > > | 184844 184845 184846 184847 184848 184849 184850 184851 184852 184853 184854 184855 184856 184857 184858 184859 184860 | ** SQLITE_TESTCTRL_SORTER_MMAP test-control at runtime. */ db->nMaxSorterMmap = 0x7FFFFFFF; #endif db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_EnableView | SQLITE_CacheSpill | SQLITE_AttachCreate | SQLITE_AttachWrite | SQLITE_Comments #if !defined(SQLITE_TRUSTED_SCHEMA) || SQLITE_TRUSTED_SCHEMA+0!=0 | SQLITE_TrustedSchema #endif /* The SQLITE_DQS compile-time option determines the default settings ** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML. ** ** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML |
︙ | ︙ | |||
226356 226357 226358 226359 226360 226361 226362 226363 226364 226365 226366 226367 226368 226369 | }else{ pTab->pgnoTrunc = 0; } sqlite3PagerUnref(pDbPage); return rc; update_fail: sqlite3_free(pVtab->zErrMsg); pVtab->zErrMsg = sqlite3_mprintf("%s", zErr); return SQLITE_ERROR; } static int dbpageBegin(sqlite3_vtab *pVtab){ DbpageTable *pTab = (DbpageTable *)pVtab; | > | 226643 226644 226645 226646 226647 226648 226649 226650 226651 226652 226653 226654 226655 226656 226657 | }else{ pTab->pgnoTrunc = 0; } sqlite3PagerUnref(pDbPage); return rc; update_fail: pTab->pgnoTrunc = 0; sqlite3_free(pVtab->zErrMsg); pVtab->zErrMsg = sqlite3_mprintf("%s", zErr); return SQLITE_ERROR; } static int dbpageBegin(sqlite3_vtab *pVtab){ DbpageTable *pTab = (DbpageTable *)pVtab; |
︙ | ︙ | |||
226573 226574 226575 226576 226577 226578 226579 | ** then this variable is the compiled version of: ** ** SELECT 1, NULL, 'abc' */ struct SessionTable { SessionTable *pNext; char *zName; /* Local name of table */ | | > > | 226861 226862 226863 226864 226865 226866 226867 226868 226869 226870 226871 226872 226873 226874 226875 226876 226877 226878 226879 226880 226881 | ** then this variable is the compiled version of: ** ** SELECT 1, NULL, 'abc' */ struct SessionTable { SessionTable *pNext; char *zName; /* Local name of table */ int nCol; /* Number of non-hidden columns */ int nTotalCol; /* Number of columns including hidden */ int bStat1; /* True if this is sqlite_stat1 */ int bRowid; /* True if this table uses rowid for PK */ const char **azCol; /* Column names */ const char **azDflt; /* Default value expressions */ int *aiIdx; /* Index to pass to xNew/xOld */ u8 *abPK; /* Array of primary key flags */ int nEntry; /* Total number of entries in hash table */ int nChange; /* Size of apChange[] array */ SessionChange **apChange; /* Hash table buckets */ sqlite3_stmt *pDfltStmt; }; |
︙ | ︙ | |||
226980 226981 226982 226983 226984 226985 226986 226987 | int bNew, /* True to hash the new.* PK */ int *piHash, /* OUT: Hash value */ int *pbNullPK /* OUT: True if there are NULL values in PK */ ){ unsigned int h = 0; /* Hash value to return */ int i; /* Used to iterate through columns */ if( pTab->bRowid ){ | > < < > | | | 227270 227271 227272 227273 227274 227275 227276 227277 227278 227279 227280 227281 227282 227283 227284 227285 227286 227287 227288 227289 227290 227291 227292 227293 227294 227295 227296 227297 227298 227299 | int bNew, /* True to hash the new.* PK */ int *piHash, /* OUT: Hash value */ int *pbNullPK /* OUT: True if there are NULL values in PK */ ){ unsigned int h = 0; /* Hash value to return */ int i; /* Used to iterate through columns */ assert( pTab->nTotalCol==pSession->hook.xCount(pSession->hook.pCtx) ); if( pTab->bRowid ){ h = sessionHashAppendI64(h, iRowid); }else{ assert( *pbNullPK==0 ); for(i=0; i<pTab->nCol; i++){ if( pTab->abPK[i] ){ int rc; int eType; sqlite3_value *pVal; int iIdx = pTab->aiIdx[i]; if( bNew ){ rc = pSession->hook.xNew(pSession->hook.pCtx, iIdx, &pVal); }else{ rc = pSession->hook.xOld(pSession->hook.pCtx, iIdx, &pVal); } if( rc!=SQLITE_OK ) return rc; eType = sqlite3_value_type(pVal); h = sessionHashAppendType(h, eType); if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ i64 iVal; |
︙ | ︙ | |||
227332 227333 227334 227335 227336 227337 227338 227339 227340 227341 227342 227343 227344 227345 227346 | for(iCol=0; iCol<pTab->nCol; iCol++){ if( !pTab->abPK[iCol] ){ a += sessionSerialLen(a); }else{ sqlite3_value *pVal; /* Value returned by preupdate_new/old */ int rc; /* Error code from preupdate_new/old */ int eType = *a++; /* Type of value from change record */ /* The following calls to preupdate_new() and preupdate_old() can not ** fail. This is because they cache their return values, and by the ** time control flows to here they have already been called once from ** within sessionPreupdateHash(). The first two asserts below verify ** this (that the method has already been called). */ if( op==SQLITE_INSERT ){ /* assert( db->pPreUpdate->pNewUnpacked || db->pPreUpdate->aNew ); */ | > | | | 227622 227623 227624 227625 227626 227627 227628 227629 227630 227631 227632 227633 227634 227635 227636 227637 227638 227639 227640 227641 227642 227643 227644 227645 227646 227647 227648 | for(iCol=0; iCol<pTab->nCol; iCol++){ if( !pTab->abPK[iCol] ){ a += sessionSerialLen(a); }else{ sqlite3_value *pVal; /* Value returned by preupdate_new/old */ int rc; /* Error code from preupdate_new/old */ int eType = *a++; /* Type of value from change record */ int iIdx = pTab->aiIdx[iCol]; /* The following calls to preupdate_new() and preupdate_old() can not ** fail. This is because they cache their return values, and by the ** time control flows to here they have already been called once from ** within sessionPreupdateHash(). The first two asserts below verify ** this (that the method has already been called). */ if( op==SQLITE_INSERT ){ /* assert( db->pPreUpdate->pNewUnpacked || db->pPreUpdate->aNew ); */ rc = pSession->hook.xNew(pSession->hook.pCtx, iIdx, &pVal); }else{ /* assert( db->pPreUpdate->pUnpacked ); */ rc = pSession->hook.xOld(pSession->hook.pCtx, iIdx, &pVal); } assert( rc==SQLITE_OK ); (void)rc; /* Suppress warning about unused variable */ if( sqlite3_value_type(pVal)!=eType ) return 0; /* A SessionChange object never has a NULL value in a PK column */ assert( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT |
︙ | ︙ | |||
227468 227469 227470 227471 227472 227473 227474 227475 227476 227477 227478 227479 227480 227481 227482 227483 227484 227485 227486 227487 227488 227489 227490 227491 227492 227493 227494 227495 227496 227497 227498 227499 227500 227501 227502 227503 227504 227505 227506 227507 | */ static int sessionTableInfo( sqlite3_session *pSession, /* For memory accounting. May be NULL */ sqlite3 *db, /* Database connection */ const char *zDb, /* Name of attached database (e.g. "main") */ const char *zThis, /* Table name */ int *pnCol, /* OUT: number of columns */ const char **pzTab, /* OUT: Copy of zThis */ const char ***pazCol, /* OUT: Array of column names for table */ const char ***pazDflt, /* OUT: Array of default value expressions */ u8 **pabPK, /* OUT: Array of booleans - true for PK col */ int *pbRowid /* OUT: True if only PK is a rowid */ ){ char *zPragma; sqlite3_stmt *pStmt; int rc; sqlite3_int64 nByte; int nDbCol = 0; int nThis; int i; u8 *pAlloc = 0; char **azCol = 0; char **azDflt = 0; u8 *abPK = 0; int bRowid = 0; /* Set to true to use rowid as PK */ assert( pazCol && pabPK ); *pazCol = 0; *pabPK = 0; *pnCol = 0; if( pzTab ) *pzTab = 0; if( pazDflt ) *pazDflt = 0; nThis = sqlite3Strlen30(zThis); if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){ rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0); if( rc==SQLITE_OK ){ /* For sqlite_stat1, pretend that (tbl,idx) is the PRIMARY KEY. */ zPragma = sqlite3_mprintf( | > > > > > | | | | > | > | | | > > | | | | | | | | | | | | | | | | > | > > > | 227759 227760 227761 227762 227763 227764 227765 227766 227767 227768 227769 227770 227771 227772 227773 227774 227775 227776 227777 227778 227779 227780 227781 227782 227783 227784 227785 227786 227787 227788 227789 227790 227791 227792 227793 227794 227795 227796 227797 227798 227799 227800 227801 227802 227803 227804 227805 227806 227807 227808 227809 227810 227811 227812 227813 227814 227815 227816 227817 227818 227819 227820 227821 227822 227823 227824 227825 227826 227827 227828 227829 227830 227831 227832 227833 227834 227835 227836 227837 227838 227839 227840 227841 227842 227843 227844 227845 227846 227847 227848 227849 227850 227851 227852 227853 227854 227855 227856 227857 227858 227859 227860 227861 227862 227863 227864 227865 227866 227867 227868 227869 227870 227871 227872 227873 227874 227875 227876 227877 227878 227879 227880 227881 227882 227883 227884 227885 227886 227887 227888 227889 227890 227891 227892 227893 227894 227895 227896 227897 227898 227899 227900 227901 227902 227903 227904 227905 227906 227907 227908 227909 227910 227911 227912 227913 227914 | */ static int sessionTableInfo( sqlite3_session *pSession, /* For memory accounting. May be NULL */ sqlite3 *db, /* Database connection */ const char *zDb, /* Name of attached database (e.g. "main") */ const char *zThis, /* Table name */ int *pnCol, /* OUT: number of columns */ int *pnTotalCol, /* OUT: number of hidden columns */ const char **pzTab, /* OUT: Copy of zThis */ const char ***pazCol, /* OUT: Array of column names for table */ const char ***pazDflt, /* OUT: Array of default value expressions */ int **paiIdx, /* OUT: Array of xNew/xOld indexes */ u8 **pabPK, /* OUT: Array of booleans - true for PK col */ int *pbRowid /* OUT: True if only PK is a rowid */ ){ char *zPragma; sqlite3_stmt *pStmt; int rc; sqlite3_int64 nByte; int nDbCol = 0; int nThis; int i; u8 *pAlloc = 0; char **azCol = 0; char **azDflt = 0; u8 *abPK = 0; int *aiIdx = 0; int bRowid = 0; /* Set to true to use rowid as PK */ assert( pazCol && pabPK ); *pazCol = 0; *pabPK = 0; *pnCol = 0; if( pnTotalCol ) *pnTotalCol = 0; if( paiIdx ) *paiIdx = 0; if( pzTab ) *pzTab = 0; if( pazDflt ) *pazDflt = 0; nThis = sqlite3Strlen30(zThis); if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){ rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0); if( rc==SQLITE_OK ){ /* For sqlite_stat1, pretend that (tbl,idx) is the PRIMARY KEY. */ zPragma = sqlite3_mprintf( "SELECT 0, 'tbl', '', 0, '', 1, 0 UNION ALL " "SELECT 1, 'idx', '', 0, '', 2, 0 UNION ALL " "SELECT 2, 'stat', '', 0, '', 0, 0" ); }else if( rc==SQLITE_ERROR ){ zPragma = sqlite3_mprintf(""); }else{ return rc; } }else{ zPragma = sqlite3_mprintf("PRAGMA '%q'.table_xinfo('%q')", zDb, zThis); } if( !zPragma ){ return SQLITE_NOMEM; } rc = sqlite3_prepare_v2(db, zPragma, -1, &pStmt, 0); sqlite3_free(zPragma); if( rc!=SQLITE_OK ){ return rc; } nByte = nThis + 1; bRowid = (pbRowid!=0); while( SQLITE_ROW==sqlite3_step(pStmt) ){ nByte += sqlite3_column_bytes(pStmt, 1); /* name */ nByte += sqlite3_column_bytes(pStmt, 4); /* dflt_value */ if( sqlite3_column_int(pStmt, 6)==0 ){ /* !hidden */ nDbCol++; } if( sqlite3_column_int(pStmt, 5) ) bRowid = 0; /* pk */ } if( nDbCol==0 ) bRowid = 0; nDbCol += bRowid; nByte += strlen(SESSIONS_ROWID); rc = sqlite3_reset(pStmt); if( rc==SQLITE_OK ){ nByte += nDbCol * (sizeof(const char *)*2 +sizeof(int)+sizeof(u8) + 1 + 1); pAlloc = sessionMalloc64(pSession, nByte); if( pAlloc==0 ){ rc = SQLITE_NOMEM; }else{ memset(pAlloc, 0, nByte); } } if( rc==SQLITE_OK ){ azCol = (char **)pAlloc; azDflt = (char**)&azCol[nDbCol]; aiIdx = (int*)&azDflt[nDbCol]; abPK = (u8 *)&aiIdx[nDbCol]; pAlloc = &abPK[nDbCol]; if( pzTab ){ memcpy(pAlloc, zThis, nThis+1); *pzTab = (char *)pAlloc; pAlloc += nThis+1; } i = 0; if( bRowid ){ size_t nName = strlen(SESSIONS_ROWID); memcpy(pAlloc, SESSIONS_ROWID, nName+1); azCol[i] = (char*)pAlloc; pAlloc += nName+1; abPK[i] = 1; aiIdx[i] = -1; i++; } while( SQLITE_ROW==sqlite3_step(pStmt) ){ if( sqlite3_column_int(pStmt, 6)==0 ){ /* !hidden */ int nName = sqlite3_column_bytes(pStmt, 1); int nDflt = sqlite3_column_bytes(pStmt, 4); const unsigned char *zName = sqlite3_column_text(pStmt, 1); const unsigned char *zDflt = sqlite3_column_text(pStmt, 4); if( zName==0 ) break; memcpy(pAlloc, zName, nName+1); azCol[i] = (char *)pAlloc; pAlloc += nName+1; if( zDflt ){ memcpy(pAlloc, zDflt, nDflt+1); azDflt[i] = (char *)pAlloc; pAlloc += nDflt+1; }else{ azDflt[i] = 0; } abPK[i] = sqlite3_column_int(pStmt, 5); aiIdx[i] = sqlite3_column_int(pStmt, 0); i++; } if( pnTotalCol ) (*pnTotalCol)++; } rc = sqlite3_reset(pStmt); } /* If successful, populate the output variables. Otherwise, zero them and ** free any allocation made. An error code will be returned in this case. */ if( rc==SQLITE_OK ){ *pazCol = (const char**)azCol; if( pazDflt ) *pazDflt = (const char**)azDflt; *pabPK = abPK; *pnCol = nDbCol; if( paiIdx ) *paiIdx = aiIdx; }else{ sessionFree(pSession, azCol); } if( pbRowid ) *pbRowid = bRowid; sqlite3_finalize(pStmt); return rc; } |
︙ | ︙ | |||
227628 227629 227630 227631 227632 227633 227634 | ){ int rc = SQLITE_OK; if( pTab->nCol==0 ){ u8 *abPK; assert( pTab->azCol==0 || pTab->abPK==0 ); rc = sessionTableInfo(pSession, db, zDb, | | > | 227932 227933 227934 227935 227936 227937 227938 227939 227940 227941 227942 227943 227944 227945 227946 227947 | ){ int rc = SQLITE_OK; if( pTab->nCol==0 ){ u8 *abPK; assert( pTab->azCol==0 || pTab->abPK==0 ); rc = sessionTableInfo(pSession, db, zDb, pTab->zName, &pTab->nCol, &pTab->nTotalCol, 0, &pTab->azCol, &pTab->azDflt, &pTab->aiIdx, &abPK, ((pSession==0 || pSession->bImplicitPK) ? &pTab->bRowid : 0) ); if( rc==SQLITE_OK ){ int i; for(i=0; i<pTab->nCol; i++){ if( abPK[i] ){ pTab->abPK = abPK; |
︙ | ︙ | |||
227663 227664 227665 227666 227667 227668 227669 227670 227671 227672 227673 227674 227675 227676 227677 | } /* ** Re-initialize table object pTab. */ static int sessionReinitTable(sqlite3_session *pSession, SessionTable *pTab){ int nCol = 0; const char **azCol = 0; const char **azDflt = 0; u8 *abPK = 0; int bRowid = 0; assert( pSession->rc==SQLITE_OK ); pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb, | > > | | 227968 227969 227970 227971 227972 227973 227974 227975 227976 227977 227978 227979 227980 227981 227982 227983 227984 227985 227986 227987 227988 227989 227990 227991 227992 | } /* ** Re-initialize table object pTab. */ static int sessionReinitTable(sqlite3_session *pSession, SessionTable *pTab){ int nCol = 0; int nTotalCol = 0; const char **azCol = 0; const char **azDflt = 0; int *aiIdx = 0; u8 *abPK = 0; int bRowid = 0; assert( pSession->rc==SQLITE_OK ); pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb, pTab->zName, &nCol, &nTotalCol, 0, &azCol, &azDflt, &aiIdx, &abPK, (pSession->bImplicitPK ? &bRowid : 0) ); if( pSession->rc==SQLITE_OK ){ if( pTab->nCol>nCol || pTab->bRowid!=bRowid ){ pSession->rc = SQLITE_SCHEMA; }else{ int ii; |
︙ | ︙ | |||
227694 227695 227696 227697 227698 227699 227700 227701 227702 227703 227704 227705 227706 227707 227708 227709 | } } if( pSession->rc==SQLITE_OK ){ const char **a = pTab->azCol; pTab->azCol = azCol; pTab->nCol = nCol; pTab->azDflt = azDflt; pTab->abPK = abPK; azCol = a; } if( pSession->bEnableSize ){ pSession->nMaxChangesetSize += (nCol - nOldCol); pSession->nMaxChangesetSize += sessionVarintLen(nCol); pSession->nMaxChangesetSize -= sessionVarintLen(nOldCol); } | > > | 228001 228002 228003 228004 228005 228006 228007 228008 228009 228010 228011 228012 228013 228014 228015 228016 228017 228018 | } } if( pSession->rc==SQLITE_OK ){ const char **a = pTab->azCol; pTab->azCol = azCol; pTab->nCol = nCol; pTab->nTotalCol = nTotalCol; pTab->azDflt = azDflt; pTab->abPK = abPK; pTab->aiIdx = aiIdx; azCol = a; } if( pSession->bEnableSize ){ pSession->nMaxChangesetSize += (nCol - nOldCol); pSession->nMaxChangesetSize += sessionVarintLen(nCol); pSession->nMaxChangesetSize -= sessionVarintLen(nOldCol); } |
︙ | ︙ | |||
228013 228014 228015 228016 228017 228018 228019 | i64 nNew = 2; if( pC->op==SQLITE_INSERT ){ if( pTab->bRowid ) nNew += 9; if( op!=SQLITE_DELETE ){ int ii; for(ii=0; ii<pTab->nCol; ii++){ sqlite3_value *p = 0; | | > | | 228322 228323 228324 228325 228326 228327 228328 228329 228330 228331 228332 228333 228334 228335 228336 228337 228338 228339 228340 228341 228342 228343 228344 228345 228346 228347 228348 228349 228350 228351 228352 228353 228354 228355 228356 228357 228358 | i64 nNew = 2; if( pC->op==SQLITE_INSERT ){ if( pTab->bRowid ) nNew += 9; if( op!=SQLITE_DELETE ){ int ii; for(ii=0; ii<pTab->nCol; ii++){ sqlite3_value *p = 0; pSession->hook.xNew(pSession->hook.pCtx, pTab->aiIdx[ii], &p); sessionSerializeValue(0, p, &nNew); } } }else if( op==SQLITE_DELETE ){ nNew += pC->nRecord; if( sqlite3_preupdate_blobwrite(pSession->db)>=0 ){ nNew += pC->nRecord; } }else{ int ii; u8 *pCsr = pC->aRecord; if( pTab->bRowid ){ nNew += 9 + 1; pCsr += 9; } for(ii=pTab->bRowid; ii<pTab->nCol; ii++){ int bChanged = 1; int nOld = 0; int eType; int iIdx = pTab->aiIdx[ii]; sqlite3_value *p = 0; pSession->hook.xNew(pSession->hook.pCtx, iIdx, &p); if( p==0 ){ return SQLITE_NOMEM; } eType = *pCsr++; switch( eType ){ case SQLITE_NULL: |
︙ | ︙ | |||
228131 228132 228133 228134 228135 228136 228137 | /* Load table details if required */ if( sessionInitTable(pSession, pTab, pSession->db, pSession->zDb) ) return; /* Check the number of columns in this xPreUpdate call matches the ** number of columns in the table. */ nExpect = pSession->hook.xCount(pSession->hook.pCtx); | | | | 228441 228442 228443 228444 228445 228446 228447 228448 228449 228450 228451 228452 228453 228454 228455 228456 228457 228458 228459 | /* Load table details if required */ if( sessionInitTable(pSession, pTab, pSession->db, pSession->zDb) ) return; /* Check the number of columns in this xPreUpdate call matches the ** number of columns in the table. */ nExpect = pSession->hook.xCount(pSession->hook.pCtx); if( pTab->nTotalCol<nExpect ){ if( sessionReinitTable(pSession, pTab) ) return; if( sessionUpdateChanges(pSession, pTab) ) return; } if( pTab->nTotalCol!=nExpect ){ pSession->rc = SQLITE_SCHEMA; return; } /* Grow the hash table if required */ if( sessionGrowHash(pSession, 0, pTab) ){ pSession->rc = SQLITE_NOMEM; |
︙ | ︙ | |||
228192 228193 228194 228195 228196 228197 228198 | int i; /* Used to iterate through columns */ assert( rc==SQLITE_OK ); pTab->nEntry++; /* Figure out how large an allocation is required */ nByte = sizeof(SessionChange); | | > | | | 228502 228503 228504 228505 228506 228507 228508 228509 228510 228511 228512 228513 228514 228515 228516 228517 228518 228519 228520 228521 228522 228523 228524 | int i; /* Used to iterate through columns */ assert( rc==SQLITE_OK ); pTab->nEntry++; /* Figure out how large an allocation is required */ nByte = sizeof(SessionChange); for(i=pTab->bRowid; i<pTab->nCol; i++){ int iIdx = pTab->aiIdx[i]; sqlite3_value *p = 0; if( op!=SQLITE_INSERT ){ /* This may fail if the column has a non-NULL default and was added ** using ALTER TABLE ADD COLUMN after this record was created. */ rc = pSession->hook.xOld(pSession->hook.pCtx, iIdx, &p); }else if( pTab->abPK[i] ){ TESTONLY(int trc = ) pSession->hook.xNew(pSession->hook.pCtx,iIdx,&p); assert( trc==SQLITE_OK ); } if( rc==SQLITE_OK ){ /* This may fail if SQLite value p contains a utf-16 string that must ** be converted to utf-8 and an OOM error occurs while doing so. */ rc = sessionSerializeValue(0, p, &nByte); |
︙ | ︙ | |||
228234 228235 228236 228237 228238 228239 228240 | ** It is not possible for an OOM to occur in this block. */ nByte = 0; if( pTab->bRowid ){ pC->aRecord[0] = SQLITE_INTEGER; sessionPutI64(&pC->aRecord[1], iRowid); nByte = 9; } | | > | | | 228545 228546 228547 228548 228549 228550 228551 228552 228553 228554 228555 228556 228557 228558 228559 228560 228561 228562 228563 228564 228565 | ** It is not possible for an OOM to occur in this block. */ nByte = 0; if( pTab->bRowid ){ pC->aRecord[0] = SQLITE_INTEGER; sessionPutI64(&pC->aRecord[1], iRowid); nByte = 9; } for(i=pTab->bRowid; i<pTab->nCol; i++){ sqlite3_value *p = 0; int iIdx = pTab->aiIdx[i]; if( op!=SQLITE_INSERT ){ pSession->hook.xOld(pSession->hook.pCtx, iIdx, &p); }else if( pTab->abPK[i] ){ pSession->hook.xNew(pSession->hook.pCtx, iIdx, &p); } sessionSerializeValue(&pC->aRecord[nByte], p, &nByte); } /* Add the change to the hash-table */ if( pSession->bIndirect || pSession->hook.xDepth(pSession->hook.pCtx) ){ pC->bIndirect = 1; |
︙ | ︙ | |||
228641 228642 228643 228644 228645 228646 228647 | if( rc==SQLITE_OK ){ int bHasPk = 0; int bMismatch = 0; int nCol; /* Columns in zFrom.zTbl */ int bRowid = 0; u8 *abPK; const char **azCol = 0; | | > | 228953 228954 228955 228956 228957 228958 228959 228960 228961 228962 228963 228964 228965 228966 228967 228968 | if( rc==SQLITE_OK ){ int bHasPk = 0; int bMismatch = 0; int nCol; /* Columns in zFrom.zTbl */ int bRowid = 0; u8 *abPK; const char **azCol = 0; rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, 0, &azCol, 0, 0, &abPK, pSession->bImplicitPK ? &bRowid : 0 ); if( rc==SQLITE_OK ){ if( pTo->nCol!=nCol ){ bMismatch = 1; }else{ int i; |
︙ | ︙ | |||
229218 229219 229220 229221 229222 229223 229224 | const char **azCol, /* Names of table columns */ u8 *abPK, /* PRIMARY KEY array */ sqlite3_stmt **ppStmt /* OUT: Prepared SELECT statement */ ){ int rc = SQLITE_OK; char *zSql = 0; const char *zSep = ""; | < > | > > > > > > > | | 229531 229532 229533 229534 229535 229536 229537 229538 229539 229540 229541 229542 229543 229544 229545 229546 229547 229548 229549 229550 229551 229552 229553 229554 229555 229556 229557 229558 229559 229560 229561 229562 229563 229564 229565 229566 229567 229568 229569 229570 229571 229572 229573 229574 229575 229576 229577 229578 229579 229580 229581 229582 229583 229584 229585 229586 229587 229588 | const char **azCol, /* Names of table columns */ u8 *abPK, /* PRIMARY KEY array */ sqlite3_stmt **ppStmt /* OUT: Prepared SELECT statement */ ){ int rc = SQLITE_OK; char *zSql = 0; const char *zSep = ""; int nSql = -1; int i; SessionBuffer cols = {0, 0, 0}; SessionBuffer nooptest = {0, 0, 0}; SessionBuffer pkfield = {0, 0, 0}; SessionBuffer pkvar = {0, 0, 0}; sessionAppendStr(&nooptest, ", 1", &rc); if( 0==sqlite3_stricmp("sqlite_stat1", zTab) ){ sessionAppendStr(&nooptest, " AND (?6 OR ?3 IS stat)", &rc); sessionAppendStr(&pkfield, "tbl, idx", &rc); sessionAppendStr(&pkvar, "?1, (CASE WHEN ?2=X'' THEN NULL ELSE ?2 END)", &rc ); sessionAppendStr(&cols, "tbl, ?2, stat", &rc); }else{ #if 0 if( bRowid ){ sessionAppendStr(&cols, SESSIONS_ROWID, &rc); } #endif for(i=0; i<nCol; i++){ if( cols.nBuf ) sessionAppendStr(&cols, ", ", &rc); sessionAppendIdent(&cols, azCol[i], &rc); if( abPK[i] ){ sessionAppendStr(&pkfield, zSep, &rc); sessionAppendStr(&pkvar, zSep, &rc); zSep = ", "; sessionAppendIdent(&pkfield, azCol[i], &rc); sessionAppendPrintf(&pkvar, &rc, "?%d", i+1); }else{ sessionAppendPrintf(&nooptest, &rc, " AND (?%d OR ?%d IS %w.%w)", i+1+nCol, i+1, zTab, azCol[i] ); } } } if( rc==SQLITE_OK ){ zSql = sqlite3_mprintf( "SELECT %s%s FROM %Q.%Q WHERE (%s) IS (%s)", (char*)cols.aBuf, (bIgnoreNoop ? (char*)nooptest.aBuf : ""), zDb, zTab, (char*)pkfield.aBuf, (char*)pkvar.aBuf ); if( zSql==0 ) rc = SQLITE_NOMEM; } #if 0 if( 0==sqlite3_stricmp("sqlite_stat1", zTab) ){ |
︙ | ︙ | |||
229297 229298 229299 229300 229301 229302 229303 229304 229305 229306 229307 229308 229309 229310 | if( rc==SQLITE_OK ){ rc = sqlite3_prepare_v2(db, zSql, nSql, ppStmt, 0); } sqlite3_free(zSql); sqlite3_free(nooptest.aBuf); sqlite3_free(pkfield.aBuf); sqlite3_free(pkvar.aBuf); return rc; } /* ** Bind the PRIMARY KEY values from the change passed in argument pChange ** to the SELECT statement passed as the first argument. The SELECT statement ** is as prepared by function sessionSelectStmt(). | > | 229617 229618 229619 229620 229621 229622 229623 229624 229625 229626 229627 229628 229629 229630 229631 | if( rc==SQLITE_OK ){ rc = sqlite3_prepare_v2(db, zSql, nSql, ppStmt, 0); } sqlite3_free(zSql); sqlite3_free(nooptest.aBuf); sqlite3_free(pkfield.aBuf); sqlite3_free(pkvar.aBuf); sqlite3_free(cols.aBuf); return rc; } /* ** Bind the PRIMARY KEY values from the change passed in argument pChange ** to the SELECT statement passed as the first argument. The SELECT statement ** is as prepared by function sessionSelectStmt(). |
︙ | ︙ | |||
231637 231638 231639 231640 231641 231642 231643 | sApply.azCol = (const char **)zTab; }else{ int nMinCol = 0; int i; sqlite3changeset_pk(pIter, &abPK, 0); rc = sessionTableInfo(0, db, "main", zNew, | > | | 231958 231959 231960 231961 231962 231963 231964 231965 231966 231967 231968 231969 231970 231971 231972 231973 | sApply.azCol = (const char **)zTab; }else{ int nMinCol = 0; int i; sqlite3changeset_pk(pIter, &abPK, 0); rc = sessionTableInfo(0, db, "main", zNew, &sApply.nCol, 0, &zTab, &sApply.azCol, 0, 0, &sApply.abPK, &sApply.bRowid ); if( rc!=SQLITE_OK ) break; for(i=0; i<sApply.nCol; i++){ if( sApply.abPK[i] ) nMinCol = i+1; } if( sApply.nCol==0 ){ |
︙ | ︙ | |||
231717 231718 231719 231720 231721 231722 231723 231724 231725 231726 231727 231728 231729 231730 | sIter.nCol = nFk; res = xConflict(pCtx, SQLITE_CHANGESET_FOREIGN_KEY, &sIter); if( res!=SQLITE_CHANGESET_OMIT ){ rc = SQLITE_CONSTRAINT; } } } if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ if( rc==SQLITE_OK ){ rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); } if( rc!=SQLITE_OK ){ sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); | > > > > > | 232039 232040 232041 232042 232043 232044 232045 232046 232047 232048 232049 232050 232051 232052 232053 232054 232055 232056 232057 | sIter.nCol = nFk; res = xConflict(pCtx, SQLITE_CHANGESET_FOREIGN_KEY, &sIter); if( res!=SQLITE_CHANGESET_OMIT ){ rc = SQLITE_CONSTRAINT; } } } { int rc2 = sqlite3_exec(db, "PRAGMA defer_foreign_keys = 0", 0, 0, 0); if( rc==SQLITE_OK ) rc = rc2; } if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ if( rc==SQLITE_OK ){ rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); } if( rc!=SQLITE_OK ){ sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); |
︙ | ︙ | |||
243229 243230 243231 243232 243233 243234 243235 | fts5GetVarint32(&pLeaf->p[pLeaf->szLeaf], ret); return ret; } /* ** Close the read-only blob handle, if it is open. */ | | > | > | 243556 243557 243558 243559 243560 243561 243562 243563 243564 243565 243566 243567 243568 243569 243570 243571 243572 243573 243574 243575 243576 | fts5GetVarint32(&pLeaf->p[pLeaf->szLeaf], ret); return ret; } /* ** Close the read-only blob handle, if it is open. */ static void fts5IndexCloseReader(Fts5Index *p){ if( p->pReader ){ int rc; sqlite3_blob *pReader = p->pReader; p->pReader = 0; rc = sqlite3_blob_close(pReader); if( p->rc==SQLITE_OK ) p->rc = rc; } } /* ** Retrieve a record from the %_data table. ** ** If an error occurs, NULL is returned and an error left in the |
︙ | ︙ | |||
243258 243259 243260 243261 243262 243263 243264 | ** is required. */ sqlite3_blob *pBlob = p->pReader; p->pReader = 0; rc = sqlite3_blob_reopen(pBlob, iRowid); assert( p->pReader==0 ); p->pReader = pBlob; if( rc!=SQLITE_OK ){ | | | 243587 243588 243589 243590 243591 243592 243593 243594 243595 243596 243597 243598 243599 243600 243601 | ** is required. */ sqlite3_blob *pBlob = p->pReader; p->pReader = 0; rc = sqlite3_blob_reopen(pBlob, iRowid); assert( p->pReader==0 ); p->pReader = pBlob; if( rc!=SQLITE_OK ){ fts5IndexCloseReader(p); } if( rc==SQLITE_ABORT ) rc = SQLITE_OK; } /* If the blob handle is not open at this point, open it and seek ** to the requested entry. */ if( p->pReader==0 && rc==SQLITE_OK ){ |
︙ | ︙ | |||
247459 247460 247461 247462 247463 247464 247465 247466 247467 247468 247469 247470 247471 247472 | } static int fts5IndexReturn(Fts5Index *p){ int rc = p->rc; p->rc = SQLITE_OK; return rc; } typedef struct Fts5FlushCtx Fts5FlushCtx; struct Fts5FlushCtx { Fts5Index *pIdx; Fts5SegWriter writer; }; | > > > > > > > > | 247788 247789 247790 247791 247792 247793 247794 247795 247796 247797 247798 247799 247800 247801 247802 247803 247804 247805 247806 247807 247808 247809 | } static int fts5IndexReturn(Fts5Index *p){ int rc = p->rc; p->rc = SQLITE_OK; return rc; } /* ** Close the read-only blob handle, if it is open. */ static void sqlite3Fts5IndexCloseReader(Fts5Index *p){ fts5IndexCloseReader(p); fts5IndexReturn(p); } typedef struct Fts5FlushCtx Fts5FlushCtx; struct Fts5FlushCtx { Fts5Index *pIdx; Fts5SegWriter writer; }; |
︙ | ︙ | |||
249181 249182 249183 249184 249185 249186 249187 | /* ** Commit data to disk. */ static int sqlite3Fts5IndexSync(Fts5Index *p){ assert( p->rc==SQLITE_OK ); fts5IndexFlush(p); | | | < | | 249518 249519 249520 249521 249522 249523 249524 249525 249526 249527 249528 249529 249530 249531 249532 249533 249534 249535 249536 249537 249538 249539 249540 249541 249542 249543 249544 249545 249546 | /* ** Commit data to disk. */ static int sqlite3Fts5IndexSync(Fts5Index *p){ assert( p->rc==SQLITE_OK ); fts5IndexFlush(p); fts5IndexCloseReader(p); return fts5IndexReturn(p); } /* ** Discard any data stored in the in-memory hash tables. Do not write it ** to the database. Additionally, assume that the contents of the %_data ** table may have changed on disk. So any in-memory caches of %_data ** records must be invalidated. */ static int sqlite3Fts5IndexRollback(Fts5Index *p){ fts5IndexCloseReader(p); fts5IndexDiscardData(p); fts5StructureInvalidate(p); return fts5IndexReturn(p); } /* ** The %_data table is completely empty when this function is called. This ** function populates it with the initial structure objects for each index, ** and the initial version of the "averages" record (a zero-byte blob). */ |
︙ | ︙ | |||
249396 249397 249398 249399 249400 249401 249402 249403 249404 249405 249406 249407 249408 249409 | /* ** Ensure the segment-iterator passed as the only argument points to EOF. */ static void fts5SegIterSetEOF(Fts5SegIter *pSeg){ fts5DataRelease(pSeg->pLeaf); pSeg->pLeaf = 0; } /* ** This function appends iterator pAppend to Fts5TokenDataIter pIn and ** returns the result. */ static Fts5TokenDataIter *fts5AppendTokendataIter( Fts5Index *p, /* Index object (for error code) */ | > > > > > > > > > > | 249732 249733 249734 249735 249736 249737 249738 249739 249740 249741 249742 249743 249744 249745 249746 249747 249748 249749 249750 249751 249752 249753 249754 249755 | /* ** Ensure the segment-iterator passed as the only argument points to EOF. */ static void fts5SegIterSetEOF(Fts5SegIter *pSeg){ fts5DataRelease(pSeg->pLeaf); pSeg->pLeaf = 0; } static void fts5IterClose(Fts5IndexIter *pIndexIter){ if( pIndexIter ){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; Fts5Index *pIndex = pIter->pIndex; fts5TokendataIterDelete(pIter->pTokenDataIter); fts5MultiIterFree(pIter); fts5IndexCloseReader(pIndex); } } /* ** This function appends iterator pAppend to Fts5TokenDataIter pIn and ** returns the result. */ static Fts5TokenDataIter *fts5AppendTokendataIter( Fts5Index *p, /* Index object (for error code) */ |
︙ | ︙ | |||
249424 249425 249426 249427 249428 249429 249430 | if( pIn==0 ) memset(pNew, 0, nByte); pRet = pNew; pNew->nIterAlloc = nAlloc; } } } if( p->rc ){ | | | 249770 249771 249772 249773 249774 249775 249776 249777 249778 249779 249780 249781 249782 249783 249784 | if( pIn==0 ) memset(pNew, 0, nByte); pRet = pNew; pNew->nIterAlloc = nAlloc; } } } if( p->rc ){ fts5IterClose((Fts5IndexIter*)pAppend); }else{ pRet->apIter[pRet->nIter++] = pAppend; } assert( pRet==0 || pRet->nIter<=pRet->nIterAlloc ); return pRet; } |
︙ | ︙ | |||
249637 249638 249639 249640 249641 249642 249643 | if( pSmall ){ fts5BufferSet(&p->rc, &bSeek, pSmall->n, pSmall->p); fts5BufferAppendBlob(&p->rc, &bSeek, 1, (const u8*)"\0"); }else{ fts5BufferSet(&p->rc, &bSeek, nToken, pToken); } if( p->rc ){ | | | 249983 249984 249985 249986 249987 249988 249989 249990 249991 249992 249993 249994 249995 249996 249997 | if( pSmall ){ fts5BufferSet(&p->rc, &bSeek, pSmall->n, pSmall->p); fts5BufferAppendBlob(&p->rc, &bSeek, 1, (const u8*)"\0"); }else{ fts5BufferSet(&p->rc, &bSeek, nToken, pToken); } if( p->rc ){ fts5IterClose((Fts5IndexIter*)pNew); break; } pNewIter = &pNew->aSeg[0]; pPrevIter = (pPrev ? &pPrev->aSeg[0] : 0); for(iLvl=0; iLvl<pStruct->nLevel; iLvl++){ for(iSeg=pStruct->aLevel[iLvl].nSeg-1; iSeg>=0; iSeg--){ |
︙ | ︙ | |||
249702 249703 249704 249705 249706 249707 249708 | } } /* If pSmall is still NULL at this point, then the new iterator does ** not point to any terms that match the query. So delete it and break ** out of the loop - all required iterators have been collected. */ if( pSmall==0 ){ | | | 250048 250049 250050 250051 250052 250053 250054 250055 250056 250057 250058 250059 250060 250061 250062 | } } /* If pSmall is still NULL at this point, then the new iterator does ** not point to any terms that match the query. So delete it and break ** out of the loop - all required iterators have been collected. */ if( pSmall==0 ){ fts5IterClose((Fts5IndexIter*)pNew); break; } /* Append this iterator to the set and continue. */ pSet = fts5AppendTokendataIter(p, pSet, pNew); } |
︙ | ︙ | |||
249831 249832 249833 249834 249835 249836 249837 | Fts5SegIter *pSeg = &pRet->aSeg[pRet->aFirst[1].iFirst]; if( pSeg->pLeaf ) pRet->xSetOutputs(pRet, pSeg); } } } if( p->rc ){ | | | | 250177 250178 250179 250180 250181 250182 250183 250184 250185 250186 250187 250188 250189 250190 250191 250192 250193 | Fts5SegIter *pSeg = &pRet->aSeg[pRet->aFirst[1].iFirst]; if( pSeg->pLeaf ) pRet->xSetOutputs(pRet, pSeg); } } } if( p->rc ){ fts5IterClose((Fts5IndexIter*)pRet); pRet = 0; fts5IndexCloseReader(p); } *ppIter = (Fts5IndexIter*)pRet; sqlite3Fts5BufferFree(&buf); } return fts5IndexReturn(p); } |
︙ | ︙ | |||
250083 250084 250085 250086 250087 250088 250089 | } /* ** Close an iterator opened by an earlier call to sqlite3Fts5IndexQuery(). */ static void sqlite3Fts5IterClose(Fts5IndexIter *pIndexIter){ if( pIndexIter ){ | < | < | | | 250429 250430 250431 250432 250433 250434 250435 250436 250437 250438 250439 250440 250441 250442 250443 250444 250445 | } /* ** Close an iterator opened by an earlier call to sqlite3Fts5IndexQuery(). */ static void sqlite3Fts5IterClose(Fts5IndexIter *pIndexIter){ if( pIndexIter ){ Fts5Index *pIndex = ((Fts5Iter*)pIndexIter)->pIndex; fts5IterClose(pIndexIter); fts5IndexReturn(pIndex); } } /* ** Read and decode the "averages" record from the database. ** ** Parameter anSize must point to an array of size nCol, where nCol is |
︙ | ︙ | |||
250617 250618 250619 250620 250621 250622 250623 | cksum ^= sqlite3Fts5IndexEntryCksum(rowid, iCol, iOff, iIdx, z, n); } } if( rc==SQLITE_OK ){ rc = sqlite3Fts5IterNext(pIter); } } | | | 250961 250962 250963 250964 250965 250966 250967 250968 250969 250970 250971 250972 250973 250974 250975 | cksum ^= sqlite3Fts5IndexEntryCksum(rowid, iCol, iOff, iIdx, z, n); } } if( rc==SQLITE_OK ){ rc = sqlite3Fts5IterNext(pIter); } } fts5IterClose(pIter); *pCksum = cksum; return rc; } /* ** Check if buffer z[], size n bytes, contains as series of valid utf-8 |
︙ | ︙ | |||
255461 255462 255463 255464 255465 255466 255467 | static void fts5SourceIdFunc( sqlite3_context *pCtx, /* Function call context */ int nArg, /* Number of args */ sqlite3_value **apUnused /* Function arguments */ ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); | | | 255805 255806 255807 255808 255809 255810 255811 255812 255813 255814 255815 255816 255817 255818 255819 | static void fts5SourceIdFunc( sqlite3_context *pCtx, /* Function call context */ int nArg, /* Number of args */ sqlite3_value **apUnused /* Function arguments */ ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); sqlite3_result_text(pCtx, "fts5: 2025-02-03 14:55:56 d693c2dddbd10a2e0b77893b04b11502e30b768f1b06814105f7f35172845fb9", -1, SQLITE_TRANSIENT); } /* ** Implementation of fts5_locale(LOCALE, TEXT) function. ** ** If parameter LOCALE is NULL, or a zero-length string, then a copy of ** TEXT is returned. Otherwise, both LOCALE and TEXT are interpreted as |
︙ | ︙ | |||
261552 261553 261554 261555 261556 261557 261558 | ** faster. ** ** Scripts that are safe to use with Tcl_EvalObjv() consists of a ** command name followed by zero or more arguments with no [...] or $ ** or {...} or ; to be seen anywhere. Most callback scripts consist ** of just a single procedure name and they meet this requirement. */ | | | 261896 261897 261898 261899 261900 261901 261902 261903 261904 261905 261906 261907 261908 261909 261910 | ** faster. ** ** Scripts that are safe to use with Tcl_EvalObjv() consists of a ** command name followed by zero or more arguments with no [...] or $ ** or {...} or ; to be seen anywhere. Most callback scripts consist ** of just a single procedure name and they meet this requirement. */ static int safeToUseEvalObjv(Tcl_Obj *pCmd){ /* We could try to do something with Tcl_Parse(). But we will instead ** just do a search for forbidden characters. If any of the forbidden ** characters appear in pCmd, we will report the string as unsafe. */ const char *z; Tcl_Size n; z = Tcl_GetStringFromObj(pCmd, &n); |
︙ | ︙ | |||
263006 263007 263008 263009 263010 263011 263012 | if( pArg ){ Tcl_DecrRefCount(*ppHook); *ppHook = 0; } } if( pArg ){ assert( !(*ppHook) ); | | | 263350 263351 263352 263353 263354 263355 263356 263357 263358 263359 263360 263361 263362 263363 263364 | if( pArg ){ Tcl_DecrRefCount(*ppHook); *ppHook = 0; } } if( pArg ){ assert( !(*ppHook) ); if( Tcl_GetString(pArg)[0] ){ *ppHook = pArg; Tcl_IncrRefCount(*ppHook); } } #ifdef SQLITE_ENABLE_PREUPDATE_HOOK sqlite3_preupdate_hook(db, (pDb->pPreUpdateHook?DbPreUpdateHandler:0), pDb); |
︙ | ︙ | |||
264035 264036 264037 264038 264039 264040 264041 | pFunc = findSqlFunc(pDb, zName); if( pFunc==0 ) return TCL_ERROR; if( pFunc->pScript ){ Tcl_DecrRefCount(pFunc->pScript); } pFunc->pScript = pScript; Tcl_IncrRefCount(pScript); | | | 264379 264380 264381 264382 264383 264384 264385 264386 264387 264388 264389 264390 264391 264392 264393 | pFunc = findSqlFunc(pDb, zName); if( pFunc==0 ) return TCL_ERROR; if( pFunc->pScript ){ Tcl_DecrRefCount(pFunc->pScript); } pFunc->pScript = pScript; Tcl_IncrRefCount(pScript); pFunc->useEvalObjv = safeToUseEvalObjv(pScript); pFunc->eType = eType; rc = sqlite3_create_function(pDb->db, zName, nArg, flags, pFunc, tclSqlFunc, 0, 0); if( rc!=SQLITE_OK ){ rc = TCL_ERROR; Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE); } |
︙ | ︙ | |||
265063 265064 265065 265066 265067 265068 265069 | EXTERN int Sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} EXTERN int Tclsqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } EXTERN int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Sqlite_SafeInit(Tcl_Interp *interp){ return TCL_ERROR; } EXTERN int Sqlite_SafeUnload(Tcl_Interp *interp, int flags){return TCL_ERROR;} | | > > | 265407 265408 265409 265410 265411 265412 265413 265414 265415 265416 265417 265418 265419 265420 265421 265422 265423 | EXTERN int Sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} EXTERN int Tclsqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } EXTERN int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } EXTERN int Sqlite_SafeInit(Tcl_Interp *interp){ return TCL_ERROR; } EXTERN int Sqlite_SafeUnload(Tcl_Interp *interp, int flags){return TCL_ERROR;} /* Also variants with a lowercase "s". I'm told that these are ** deprecated in Tcl9, but they continue to be included for backwards ** compatibility. */ EXTERN int sqlite3_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} EXTERN int sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} /* ** If the TCLSH macro is defined, add code to make a stand-alone program. */ |
︙ | ︙ |