fix(sqlite) enable order by and limit in delete/update statements on windows (#23227)

### What does this PR do?

Enable compiler flags
Update SQLite amalgamation using https://www.sqlite.org/download.html
source code
[sqlite-src-3500400.zip](https://www.sqlite.org/2025/sqlite-src-3500400.zip)
with:

```bash
./configure CFLAGS="-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT"
make sqlite3.c
```

This is the same version that before just with this adicional flag that
must be enabled when generating the amalgamation so we are actually able
to use this option. You can also see that without this the build will
happen but the feature will not be enable
https://buildkite.com/bun/bun/builds/27940, as informed in
https://www.sqlite.org/howtocompile.html topic 5.

### How did you verify your code works?
Add in CI two tests that check if the feature is enabled on windows

---------

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Ciro Spaciari
2025-10-04 02:48:50 -07:00
committed by GitHub
parent 4424c5ed08
commit 3c9433f9af
5 changed files with 465 additions and 387 deletions

View File

@@ -70,24 +70,7 @@ jobs:
- name: Update SQLite if needed
if: success() && steps.check-version.outputs.current_num < steps.check-version.outputs.latest_num
run: |
set -euo pipefail
TEMP_DIR=$(mktemp -d)
cd $TEMP_DIR
echo "Downloading from: https://sqlite.org/${{ steps.check-version.outputs.latest_year }}/sqlite-amalgamation-${{ steps.check-version.outputs.latest_num }}.zip"
# Download and extract latest version
wget "https://sqlite.org/${{ steps.check-version.outputs.latest_year }}/sqlite-amalgamation-${{ steps.check-version.outputs.latest_num }}.zip"
unzip "sqlite-amalgamation-${{ steps.check-version.outputs.latest_num }}.zip"
cd "sqlite-amalgamation-${{ steps.check-version.outputs.latest_num }}"
# Add header comment and copy files
echo "// clang-format off" > $GITHUB_WORKSPACE/src/bun.js/bindings/sqlite/sqlite3.c
cat sqlite3.c >> $GITHUB_WORKSPACE/src/bun.js/bindings/sqlite/sqlite3.c
echo "// clang-format off" > $GITHUB_WORKSPACE/src/bun.js/bindings/sqlite/sqlite3_local.h
cat sqlite3.h >> $GITHUB_WORKSPACE/src/bun.js/bindings/sqlite/sqlite3_local.h
./scripts/update-sqlite-amalgamation.sh ${{ steps.check-version.outputs.latest_num }} ${{ steps.check-version.outputs.latest_year }}
- name: Create Pull Request
if: success() && steps.check-version.outputs.current_num < steps.check-version.outputs.latest_num

View File

@@ -0,0 +1,60 @@
#!/usr/bin/env bash
set -euo pipefail
# This script updates SQLite amalgamation files with the required compiler flags.
# It downloads the SQLite source, configures it with necessary flags, builds the
# amalgamation, and copies the generated files to the Bun source tree.
#
# Usage:
# ./scripts/update-sqlite-amalgamation.sh <version_number> <year>
#
# Example:
# ./scripts/update-sqlite-amalgamation.sh 3500400 2025
#
# The version number is a 7-digit SQLite version (e.g., 3500400 for 3.50.4)
# The year is the release year found in the download URL
if [ $# -ne 2 ]; then
echo "Usage: $0 <version_number> <year>"
echo "Example: $0 3500400 2025"
exit 1
fi
VERSION_NUM="$1"
YEAR="$2"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Create temporary directory
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
cd "$TEMP_DIR"
echo "Downloading SQLite source version $VERSION_NUM from year $YEAR..."
DOWNLOAD_URL="https://sqlite.org/$YEAR/sqlite-src-$VERSION_NUM.zip"
echo "URL: $DOWNLOAD_URL"
wget -q "$DOWNLOAD_URL"
unzip -q "sqlite-src-$VERSION_NUM.zip"
cd "sqlite-src-$VERSION_NUM"
echo "Configuring SQLite with required flags..."
# These flags must be set during amalgamation generation for them to take effect
# in the parser and other compile-time generated code
CFLAGS="-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 -DSQLITE_ENABLE_COLUMN_METADATA=1"
./configure CFLAGS="$CFLAGS" > /dev/null 2>&1
echo "Building amalgamation..."
make sqlite3.c > /dev/null 2>&1
echo "Copying files to Bun source tree..."
# Add clang-format off directive and copy the amalgamation
echo "// clang-format off" > "$REPO_ROOT/src/bun.js/bindings/sqlite/sqlite3.c"
cat sqlite3.c >> "$REPO_ROOT/src/bun.js/bindings/sqlite/sqlite3.c"
echo "// clang-format off" > "$REPO_ROOT/src/bun.js/bindings/sqlite/sqlite3_local.h"
cat sqlite3.h >> "$REPO_ROOT/src/bun.js/bindings/sqlite/sqlite3_local.h"
echo "✓ Successfully updated SQLite amalgamation files"

View File

@@ -12,6 +12,8 @@ target_compile_definitions(sqlite3 PRIVATE
"SQLITE_ENABLE_FTS5=1"
"SQLITE_ENABLE_JSON1=1"
"SQLITE_ENABLE_MATH_FUNCTIONS=1"
"SQLITE_ENABLE_UPDATE_DELETE_LIMIT=1"
"SQLITE_UDL_CAPABLE_PARSER=1"
)
if(WIN32)

View File

@@ -29,6 +29,7 @@
#ifndef SQLITE_PRIVATE
# define SQLITE_PRIVATE static
#endif
#define SQLITE_UDL_CAPABLE_PARSER 1
/************** Begin file sqliteInt.h ***************************************/
/*
** 2001 September 15
@@ -175265,7 +175266,9 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep(
/************** End of window.c **********************************************/
/************** Begin file parse.c *******************************************/
/* This file is automatically generated by Lemon from input grammar
** source file "parse.y".
** source file "parse.y" with these options:
**
** -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT
*/
/*
** 2001-09-15
@@ -175811,18 +175814,18 @@ typedef union {
#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse;
#define sqlite3ParserCTX_STORE yypParser->pParse=pParse;
#define YYFALLBACK 1
#define YYNSTATE 583
#define YYNSTATE 587
#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_MAX_SHIFT 586
#define YY_MIN_SHIFTREDUCE 849
#define YY_MAX_SHIFTREDUCE 1257
#define YY_ERROR_ACTION 1258
#define YY_ACCEPT_ACTION 1259
#define YY_NO_ACTION 1260
#define YY_MIN_REDUCE 1261
#define YY_MAX_REDUCE 1669
#define YY_MIN_DSTRCTR 206
#define YY_MAX_DSTRCTR 320
/************* End control #defines *******************************************/
@@ -175909,227 +175912,227 @@ typedef union {
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (2207)
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 130, 127, 234, 282, 282, 1328, 576, 1307, 460, 289,
/* 10 */ 289, 576, 1622, 381, 576, 1328, 573, 576, 562, 413,
/* 20 */ 1300, 1542, 573, 481, 562, 524, 460, 459, 558, 82,
/* 30 */ 82, 983, 294, 375, 51, 51, 498, 61, 61, 984,
/* 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,
/* 0 */ 130, 127, 234, 282, 282, 1332, 580, 1311, 464, 289,
/* 10 */ 289, 580, 1626, 385, 580, 1332, 577, 580, 566, 417,
/* 20 */ 1304, 1546, 577, 485, 566, 528, 464, 463, 562, 82,
/* 30 */ 82, 987, 294, 379, 51, 51, 502, 61, 61, 988,
/* 40 */ 82, 82, 1581, 137, 138, 91, 7, 1232, 1232, 1067,
/* 50 */ 1070, 1057, 1057, 135, 135, 136, 136, 136, 136, 417,
/* 60 */ 288, 288, 182, 288, 288, 485, 540, 288, 288, 130,
/* 70 */ 127, 234, 436, 577, 529, 566, 577, 561, 566, 1294,
/* 80 */ 577, 425, 566, 137, 138, 91, 563, 1232, 1232, 1067,
/* 90 */ 1070, 1057, 1057, 135, 135, 136, 136, 136, 136, 296,
/* 100 */ 464, 402, 1253, 134, 134, 134, 134, 133, 133, 132,
/* 110 */ 132, 132, 131, 128, 455, 455, 1054, 1054, 1068, 1071,
/* 120 */ 1259, 1, 1, 586, 2, 1263, 585, 1178, 1263, 1178,
/* 130 */ 321, 417, 155, 321, 1588, 155, 383, 112, 485, 1345,
/* 140 */ 460, 299, 1345, 134, 134, 134, 134, 133, 133, 132,
/* 150 */ 132, 132, 131, 128, 455, 137, 138, 91, 502, 1232,
/* 160 */ 1232, 1067, 1070, 1057, 1057, 135, 135, 136, 136, 136,
/* 170 */ 136, 1208, 866, 1285, 288, 288, 283, 288, 288, 527,
/* 180 */ 527, 1254, 139, 582, 7, 582, 1349, 577, 1173, 566,
/* 190 */ 577, 1058, 566, 136, 136, 136, 136, 129, 577, 551,
/* 200 */ 566, 1173, 245, 1545, 1173, 245, 133, 133, 132, 132,
/* 210 */ 132, 131, 128, 455, 302, 134, 134, 134, 134, 133,
/* 220 */ 133, 132, 132, 132, 131, 128, 455, 1579, 1208, 1209,
/* 230 */ 1208, 7, 474, 554, 459, 417, 554, 459, 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,
/* 250 */ 131, 128, 455, 136, 136, 136, 136, 542, 487, 137,
/* 260 */ 138, 91, 1023, 1232, 1232, 1067, 1070, 1057, 1057, 135,
/* 270 */ 135, 136, 136, 136, 136, 1089, 580, 1208, 132, 132,
/* 280 */ 132, 131, 128, 455, 93, 214, 134, 134, 134, 134,
/* 290 */ 133, 133, 132, 132, 132, 131, 128, 455, 405, 19,
/* 300 */ 19, 134, 134, 134, 134, 133, 133, 132, 132, 132,
/* 310 */ 131, 128, 451, 1498, 426, 267, 344, 467, 332, 134,
/* 310 */ 131, 128, 455, 1502, 430, 267, 348, 471, 334, 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,
/* 330 */ 455, 1285, 580, 6, 1208, 1209, 1208, 257, 580, 417,
/* 340 */ 515, 512, 511, 1283, 94, 1023, 468, 1208, 555, 555,
/* 350 */ 510, 1228, 1575, 44, 38, 51, 51, 415, 580, 417,
/* 360 */ 45, 51, 51, 137, 138, 91, 534, 1232, 1232, 1067,
/* 370 */ 1070, 1057, 1057, 135, 135, 136, 136, 136, 136, 402,
/* 380 */ 1152, 82, 82, 137, 138, 91, 39, 1232, 1232, 1067,
/* 390 */ 1070, 1057, 1057, 135, 135, 136, 136, 136, 136, 348,
/* 400 */ 44, 288, 288, 379, 1208, 1209, 1208, 209, 1208, 1228,
/* 410 */ 320, 571, 475, 580, 577, 580, 566, 580, 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,
/* 430 */ 132, 132, 131, 128, 455, 303, 82, 82, 82, 82,
/* 440 */ 82, 82, 446, 134, 134, 134, 134, 133, 133, 132,
/* 450 */ 132, 132, 131, 128, 455, 1586, 548, 320, 571, 1254,
/* 460 */ 878, 1586, 384, 386, 417, 1208, 1209, 1208, 364, 182,
/* 470 */ 288, 288, 1580, 561, 1343, 561, 7, 561, 1281, 476,
/* 480 */ 350, 530, 535, 577, 560, 566, 443, 1515, 137, 138,
/* 490 */ 91, 219, 1232, 1232, 1067, 1070, 1057, 1057, 135, 135,
/* 500 */ 136, 136, 136, 136, 469, 1515, 1517, 536, 417, 288,
/* 510 */ 288, 427, 516, 288, 288, 415, 288, 288, 878, 130,
/* 520 */ 127, 234, 577, 1111, 566, 1208, 577, 1111, 566, 577,
/* 530 */ 564, 566, 137, 138, 91, 1297, 1232, 1232, 1067, 1070,
/* 540 */ 1057, 1057, 135, 135, 136, 136, 136, 136, 134, 134,
/* 550 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 455,
/* 560 */ 497, 507, 1296, 1208, 257, 288, 288, 515, 512, 511,
/* 570 */ 1208, 1632, 1173, 123, 572, 275, 4, 510, 577, 1515,
/* 580 */ 566, 331, 1208, 1209, 1208, 1173, 552, 552, 1173, 261,
/* 590 */ 575, 7, 134, 134, 134, 134, 133, 133, 132, 132,
/* 600 */ 132, 131, 128, 455, 108, 537, 130, 127, 234, 1208,
/* 610 */ 452, 451, 417, 1455, 456, 987, 890, 96, 1602, 1237,
/* 620 */ 1208, 1209, 1208, 988, 1239, 1454, 569, 1208, 1209, 1208,
/* 630 */ 229, 526, 1238, 538, 1337, 1337, 137, 138, 91, 1453,
/* 640 */ 1232, 1232, 1067, 1070, 1057, 1057, 135, 135, 136, 136,
/* 650 */ 136, 136, 377, 1599, 975, 1044, 417, 1240, 422, 1240,
/* 660 */ 883, 121, 121, 952, 377, 1599, 1208, 1209, 1208, 122,
/* 670 */ 1208, 456, 581, 456, 367, 421, 1032, 886, 377, 1599,
/* 680 */ 137, 138, 91, 466, 1232, 1232, 1067, 1070, 1057, 1057,
/* 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,
/* 700 */ 133, 133, 132, 132, 132, 131, 128, 455, 1032, 1032,
/* 710 */ 1034, 1035, 35, 574, 574, 574, 197, 427, 1044, 198,
/* 720 */ 1208, 123, 572, 1208, 4, 320, 571, 1208, 1209, 1208,
/* 730 */ 40, 392, 580, 388, 886, 1033, 427, 1192, 575, 1032,
/* 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,
/* 750 */ 128, 455, 533, 1572, 1208, 19, 19, 1208, 579, 496,
/* 760 */ 417, 157, 456, 493, 1191, 1335, 1335, 5, 1208, 953,
/* 770 */ 435, 1032, 1032, 1034, 569, 22, 22, 1208, 1209, 1208,
/* 780 */ 1208, 1209, 1208, 481, 137, 138, 91, 212, 1232, 1232,
/* 790 */ 1067, 1070, 1057, 1057, 135, 135, 136, 136, 136, 136,
/* 800 */ 1192, 48, 111, 1044, 417, 1208, 213, 974, 1045, 121,
/* 810 */ 121, 1208, 1209, 1208, 1208, 1209, 1208, 122, 221, 456,
/* 820 */ 581, 456, 44, 491, 1032, 1208, 1209, 1208, 137, 138,
/* 830 */ 91, 382, 1232, 1232, 1067, 1070, 1057, 1057, 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,
/* 850 */ 132, 132, 132, 131, 128, 455, 1032, 1032, 1034, 1035,
/* 860 */ 35, 465, 1208, 1209, 1208, 1573, 1044, 381, 214, 1153,
/* 870 */ 1661, 539, 1661, 441, 906, 320, 571, 1572, 368, 320,
/* 880 */ 571, 416, 329, 1033, 523, 1192, 3, 1032, 134, 134,
/* 890 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 455,
/* 900 */ 1663, 403, 1173, 307, 897, 307, 519, 580, 417, 214,
/* 910 */ 502, 948, 1028, 544, 907, 1173, 947, 396, 1173, 1032,
/* 920 */ 1032, 1034, 410, 298, 1208, 50, 1153, 1662, 417, 1662,
/* 930 */ 145, 145, 137, 138, 91, 293, 1232, 1232, 1067, 1070,
/* 940 */ 1057, 1057, 135, 135, 136, 136, 136, 136, 1192, 1151,
/* 950 */ 518, 1572, 137, 138, 91, 1509, 1232, 1232, 1067, 1070,
/* 960 */ 1057, 1057, 135, 135, 136, 136, 136, 136, 438, 323,
/* 970 */ 439, 543, 111, 1510, 274, 291, 376, 521, 371, 520,
/* 980 */ 262, 1208, 1209, 1208, 1578, 485, 367, 580, 7, 1573,
/* 990 */ 1572, 381, 134, 134, 134, 134, 133, 133, 132, 132,
/* 1000 */ 132, 131, 128, 455, 1572, 580, 1151, 580, 232, 580,
/* 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,
/* 1020 */ 132, 131, 128, 455, 1173, 437, 580, 1211, 19, 19,
/* 1030 */ 19, 19, 19, 19, 1631, 580, 915, 1173, 47, 120,
/* 1040 */ 1173, 117, 417, 306, 502, 442, 1129, 206, 340, 19,
/* 1050 */ 19, 1439, 49, 453, 453, 453, 1372, 315, 81, 81,
/* 1060 */ 580, 304, 417, 1574, 207, 381, 137, 138, 91, 115,
/* 1070 */ 1232, 1232, 1067, 1070, 1057, 1057, 135, 135, 136, 136,
/* 1080 */ 136, 136, 580, 82, 82, 1211, 137, 138, 91, 1344,
/* 1090 */ 1232, 1232, 1067, 1070, 1057, 1057, 135, 135, 136, 136,
/* 1100 */ 136, 136, 1573, 390, 381, 82, 82, 467, 1130, 1556,
/* 1110 */ 337, 467, 339, 131, 128, 455, 1573, 161, 381, 16,
/* 1120 */ 317, 391, 432, 1131, 452, 451, 134, 134, 134, 134,
/* 1130 */ 133, 133, 132, 132, 132, 131, 128, 455, 1132, 580,
/* 1140 */ 1109, 10, 449, 267, 580, 1558, 134, 134, 134, 134,
/* 1150 */ 133, 133, 132, 132, 132, 131, 128, 455, 536, 580,
/* 1160 */ 926, 580, 19, 19, 580, 1577, 580, 147, 147, 7,
/* 1170 */ 927, 1240, 502, 1240, 580, 491, 417, 556, 285, 1228,
/* 1180 */ 973, 215, 82, 82, 66, 66, 1439, 67, 67, 21,
/* 1190 */ 21, 1114, 1114, 499, 338, 297, 417, 53, 53, 297,
/* 1200 */ 137, 138, 91, 119, 1232, 1232, 1067, 1070, 1057, 1057,
/* 1210 */ 135, 135, 136, 136, 136, 136, 417, 1340, 1315, 450,
/* 1220 */ 137, 138, 91, 227, 1232, 1232, 1067, 1070, 1057, 1057,
/* 1230 */ 135, 135, 136, 136, 136, 136, 578, 1228, 940, 940,
/* 1240 */ 137, 126, 91, 141, 1232, 1232, 1067, 1070, 1057, 1057,
/* 1250 */ 135, 135, 136, 136, 136, 136, 537, 433, 476, 350,
/* 1260 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131,
/* 1270 */ 128, 451, 576, 457, 233, 343, 1435, 403, 498, 1550,
/* 1270 */ 128, 455, 580, 461, 233, 347, 1439, 407, 502, 1554,
/* 1280 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131,
/* 1290 */ 128, 451, 576, 324, 576, 82, 82, 487, 576, 969,
/* 1290 */ 128, 455, 580, 324, 580, 82, 82, 491, 580, 973,
/* 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,
/* 1310 */ 128, 455, 288, 288, 550, 68, 68, 54, 54, 557,
/* 1320 */ 417, 69, 69, 355, 6, 577, 948, 566, 414, 413,
/* 1330 */ 1439, 947, 454, 549, 260, 259, 258, 580, 158, 580,
/* 1340 */ 417, 222, 1184, 483, 973, 138, 91, 434, 1232, 1232,
/* 1350 */ 1067, 1070, 1057, 1057, 135, 135, 136, 136, 136, 136,
/* 1360 */ 70, 70, 71, 71, 580, 1130, 91, 580, 1232, 1232,
/* 1370 */ 1067, 1070, 1057, 1057, 135, 135, 136, 136, 136, 136,
/* 1380 */ 1131, 166, 854, 855, 856, 1286, 423, 72, 72, 108,
/* 1390 */ 73, 73, 1314, 362, 1184, 1132, 580, 305, 580, 123,
/* 1400 */ 572, 498, 4, 492, 134, 134, 134, 134, 133, 133,
/* 1410 */ 132, 132, 132, 131, 128, 455, 575, 568, 538, 55,
/* 1420 */ 55, 56, 56, 580, 134, 134, 134, 134, 133, 133,
/* 1430 */ 132, 132, 132, 131, 128, 455, 580, 1108, 233, 1108,
/* 1440 */ 456, 1606, 586, 2, 1263, 580, 57, 57, 580, 321,
/* 1450 */ 580, 155, 569, 1439, 489, 357, 580, 360, 1345, 59,
/* 1460 */ 59, 580, 44, 973, 573, 423, 580, 238, 60, 60,
/* 1470 */ 261, 74, 74, 75, 75, 287, 231, 580, 1370, 76,
/* 1480 */ 76, 1044, 424, 184, 20, 20, 580, 121, 121, 77,
/* 1490 */ 77, 97, 218, 288, 288, 122, 125, 456, 581, 456,
/* 1500 */ 143, 143, 1032, 580, 524, 580, 577, 580, 566, 144,
/* 1510 */ 144, 478, 227, 1248, 482, 123, 572, 580, 4, 320,
/* 1520 */ 571, 245, 415, 580, 447, 415, 78, 78, 62, 62,
/* 1530 */ 79, 79, 575, 319, 1032, 1032, 1034, 1035, 35, 422,
/* 1540 */ 63, 63, 580, 290, 415, 9, 80, 80, 1148, 580,
/* 1550 */ 404, 580, 490, 459, 580, 1227, 456, 580, 325, 346,
/* 1560 */ 580, 111, 580, 1192, 242, 64, 64, 477, 569, 580,
/* 1570 */ 23, 580, 170, 170, 171, 171, 580, 87, 87, 328,
/* 1580 */ 65, 65, 546, 83, 83, 146, 146, 545, 123, 572,
/* 1590 */ 345, 4, 84, 84, 168, 168, 580, 1044, 580, 148,
/* 1600 */ 148, 580, 1384, 121, 121, 575, 1025, 580, 266, 580,
/* 1610 */ 428, 122, 580, 456, 581, 456, 580, 557, 1032, 142,
/* 1620 */ 142, 169, 169, 580, 162, 162, 532, 893, 375, 456,
/* 1630 */ 152, 152, 151, 151, 1383, 149, 149, 109, 374, 150,
/* 1640 */ 150, 569, 580, 484, 580, 266, 86, 86, 580, 1096,
/* 1650 */ 1032, 1032, 1034, 1035, 35, 546, 486, 580, 266, 470,
/* 1660 */ 547, 123, 572, 1620, 4, 88, 88, 85, 85, 479,
/* 1670 */ 1044, 52, 52, 222, 905, 904, 121, 121, 575, 1192,
/* 1680 */ 58, 58, 244, 1036, 122, 893, 456, 581, 456, 912,
/* 1690 */ 913, 1032, 300, 351, 508, 111, 263, 365, 165, 111,
/* 1700 */ 111, 1092, 456, 263, 978, 1157, 266, 1096, 990, 991,
/* 1710 */ 946, 943, 125, 125, 569, 1107, 876, 1107, 159, 945,
/* 1720 */ 1313, 125, 1561, 1032, 1032, 1034, 1035, 35, 546, 341,
/* 1730 */ 1534, 205, 1533, 545, 503, 1593, 494, 352, 1380, 356,
/* 1740 */ 359, 1036, 361, 1044, 363, 1328, 1312, 370, 567, 121,
/* 1750 */ 121, 380, 1192, 1393, 1438, 1366, 280, 122, 1378, 456,
/* 1760 */ 581, 456, 167, 1443, 1032, 1293, 1284, 1272, 1271, 1273,
/* 1770 */ 1613, 1363, 312, 313, 314, 401, 12, 237, 224, 1425,
/* 1780 */ 295, 333, 336, 1430, 343, 488, 344, 513, 1375, 1616,
/* 1790 */ 1376, 1429, 1248, 408, 301, 228, 1032, 1032, 1034, 1035,
/* 1800 */ 35, 1605, 1196, 458, 349, 1311, 292, 373, 1506, 1505,
/* 1810 */ 270, 400, 400, 399, 277, 397, 1374, 1373, 863, 1553,
/* 1820 */ 186, 123, 572, 235, 4, 1192, 395, 210, 211, 223,
/* 1830 */ 1551, 239, 1245, 327, 426, 96, 220, 195, 575, 140,
/* 1840 */ 557, 326, 180, 472, 1420, 332, 188, 1413, 335, 570,
/* 1850 */ 190, 191, 192, 193, 473, 506, 247, 109, 1434, 495,
/* 1860 */ 251, 199, 456, 406, 480, 1426, 13, 409, 102, 14,
/* 1870 */ 501, 1511, 241, 1432, 569, 1431, 203, 92, 95, 1500,
/* 1880 */ 175, 281, 358, 43, 504, 253, 411, 254, 522, 1331,
/* 1890 */ 104, 1274, 1522, 354, 440, 1322, 255, 1330, 1630, 1629,
/* 1900 */ 240, 897, 229, 1044, 444, 1321, 445, 448, 269, 121,
/* 1910 */ 121, 1329, 531, 268, 310, 412, 1398, 122, 1301, 456,
/* 1920 */ 581, 456, 1300, 372, 1032, 1299, 1628, 378, 311, 90,
/* 1930 */ 572, 11, 4, 1397, 1598, 418, 1487, 389, 116, 110,
/* 1940 */ 320, 571, 1584, 559, 318, 541, 575, 1583, 42, 1354,
/* 1950 */ 387, 583, 216, 1353, 1202, 276, 1032, 1032, 1034, 1035,
/* 1960 */ 35, 393, 394, 278, 462, 279, 419, 584, 1538, 1269,
/* 1970 */ 456, 1264, 172, 420, 173, 1539, 1537, 1536, 156, 308,
/* 1980 */ 225, 89, 569, 850, 226, 1192, 457, 174, 217, 236,
/* 1990 */ 322, 154, 1106, 1104, 187, 330, 176, 1227, 929, 189,
/* 2000 */ 243, 342, 246, 1120, 194, 177, 178, 429, 431, 98,
/* 2010 */ 196, 1044, 99, 185, 100, 101, 179, 121, 121, 1123,
/* 2020 */ 248, 249, 1119, 163, 250, 122, 24, 456, 581, 456,
/* 2030 */ 1196, 458, 1032, 353, 292, 266, 1112, 200, 1242, 400,
/* 2040 */ 400, 399, 277, 397, 500, 252, 863, 201, 292, 15,
/* 2050 */ 865, 558, 505, 400, 400, 399, 277, 397, 374, 239,
/* 2060 */ 863, 327, 256, 202, 1032, 1032, 1034, 1035, 35, 326,
/* 2070 */ 103, 25, 26, 239, 509, 327, 366, 514, 369, 895,
/* 2080 */ 908, 517, 105, 326, 309, 164, 525, 106, 181, 27,
/* 2090 */ 1189, 1073, 17, 1192, 107, 1159, 1158, 284, 230, 286,
/* 2100 */ 241, 204, 125, 1175, 982, 265, 1182, 976, 175, 28,
/* 2110 */ 1179, 43, 29, 1177, 241, 30, 31, 8, 1183, 32,
/* 2120 */ 1164, 41, 175, 208, 553, 43, 111, 33, 240, 1087,
/* 2130 */ 1074, 113, 114, 1072, 1076, 34, 1077, 565, 1128, 118,
/* 2140 */ 271, 36, 240, 18, 939, 1037, 877, 272, 124, 37,
/* 2150 */ 398, 1198, 1197, 576, 183, 273, 153, 1621, 1260, 1260,
/* 2160 */ 1260, 1260, 1260, 418, 1260, 1260, 1260, 1260, 320, 571,
/* 2170 */ 1260, 1260, 1260, 1260, 1260, 1260, 1260, 418, 1260, 1260,
/* 2180 */ 1260, 1260, 320, 571, 1260, 1260, 1260, 1260, 1260, 1260,
/* 2190 */ 1260, 1260, 462, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
/* 2200 */ 1260, 1260, 1260, 1260, 1260, 1260, 462,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 277, 278, 279, 241, 242, 225, 195, 227, 195, 241,
@@ -176315,39 +176318,39 @@ static const YYCODETYPE yy_lookahead[] = {
/* 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,
/* 1830 */ 202, 30, 38, 32, 202, 152, 151, 22, 36, 149,
/* 1840 */ 146, 40, 43, 18, 252, 251, 236, 252, 251, 283,
/* 1850 */ 239, 239, 239, 239, 202, 18, 201, 150, 236, 202,
/* 1860 */ 201, 236, 60, 248, 248, 275, 273, 248, 159, 273,
/* 1870 */ 63, 286, 71, 275, 72, 275, 22, 297, 297, 248,
/* 1880 */ 79, 202, 202, 82, 223, 201, 223, 201, 116, 220,
/* 1890 */ 22, 202, 293, 292, 65, 229, 201, 220, 226, 226,
/* 1900 */ 99, 127, 166, 101, 24, 229, 114, 83, 92, 107,
/* 1910 */ 108, 220, 308, 202, 285, 223, 268, 115, 220, 117,
/* 1920 */ 118, 119, 222, 220, 122, 220, 220, 223, 285, 19,
/* 1930 */ 20, 22, 22, 268, 316, 134, 280, 202, 159, 148,
/* 1940 */ 139, 140, 321, 141, 282, 147, 36, 321, 25, 252,
/* 1950 */ 251, 204, 250, 252, 13, 196, 154, 155, 156, 157,
/* 1960 */ 158, 249, 248, 196, 163, 6, 306, 194, 215, 194,
/* 1970 */ 60, 194, 209, 306, 209, 215, 215, 215, 224, 224,
/* 1980 */ 216, 215, 72, 4, 216, 183, 3, 209, 22, 15,
/* 1990 */ 164, 16, 23, 23, 152, 140, 131, 25, 20, 143,
/* 2000 */ 24, 16, 145, 1, 143, 131, 131, 62, 37, 54,
/* 2010 */ 152, 101, 54, 303, 54, 54, 131, 107, 108, 117,
/* 2020 */ 34, 142, 1, 5, 116, 115, 22, 117, 118, 119,
/* 2030 */ 1, 2, 122, 162, 5, 25, 69, 69, 76, 10,
/* 2040 */ 11, 12, 13, 14, 41, 142, 17, 116, 5, 24,
/* 2050 */ 20, 141, 19, 10, 11, 12, 13, 14, 132, 30,
/* 2060 */ 17, 32, 126, 22, 154, 155, 156, 157, 158, 40,
/* 2070 */ 22, 22, 22, 30, 68, 32, 23, 68, 24, 60,
/* 2080 */ 28, 97, 22, 40, 68, 23, 22, 150, 37, 34,
/* 2090 */ 23, 23, 22, 183, 25, 23, 98, 23, 142, 23,
/* 2100 */ 71, 22, 25, 89, 117, 34, 94, 144, 79, 34,
/* 2110 */ 76, 82, 34, 87, 71, 34, 34, 44, 76, 34,
/* 2120 */ 23, 22, 79, 25, 24, 82, 25, 34, 99, 23,
/* 2130 */ 23, 143, 143, 23, 23, 22, 11, 25, 23, 25,
/* 2140 */ 22, 22, 99, 22, 136, 23, 23, 142, 22, 22,
/* 2150 */ 15, 1, 1, 25, 25, 142, 23, 142, 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,
@@ -176366,16 +176369,16 @@ static const YYCODETYPE yy_lookahead[] = {
/* 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,
/* 2340 */ 323, 323, 323, 323, 323, 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_COUNT (586)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (2152)
#define YY_SHIFT_MAX (2151)
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,
@@ -176410,36 +176413,36 @@ static const unsigned short int yy_shift_ofst[] = {
/* 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,
/* 330 */ 1685, 1815, 1690, 1694, 1799, 1690, 1694, 1825, 1825, 1825,
/* 340 */ 1825, 1668, 1837, 1707, 1685, 1685, 1707, 1815, 1799, 1707,
/* 350 */ 1799, 1707, 1668, 1837, 1709, 1807, 1668, 1837, 1854, 1668,
/* 360 */ 1837, 1668, 1837, 1854, 1772, 1772, 1772, 1829, 1868, 1868,
/* 370 */ 1854, 1772, 1774, 1772, 1829, 1772, 1772, 1736, 1880, 1792,
/* 380 */ 1792, 1854, 1668, 1816, 1816, 1824, 1824, 1690, 1694, 1909,
/* 390 */ 1668, 1779, 1690, 1791, 1798, 1707, 1923, 1941, 1941, 1959,
/* 400 */ 1959, 1959, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
/* 410 */ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 69, 1032, 79,
/* 420 */ 357, 1377, 1206, 400, 1525, 835, 332, 1540, 1437, 1539,
/* 430 */ 1536, 1548, 1583, 1620, 1633, 1670, 1671, 1674, 1567, 1553,
/* 440 */ 1682, 1506, 1675, 1358, 1607, 1589, 1678, 1681, 1624, 1687,
/* 450 */ 1688, 1283, 1561, 1693, 1696, 1623, 1521, 1979, 1983, 1966,
/* 460 */ 1826, 1974, 1975, 1969, 1970, 1855, 1842, 1865, 1972, 1972,
/* 470 */ 1976, 1856, 1978, 1857, 1985, 2002, 1861, 1874, 1972, 1875,
/* 480 */ 1945, 1971, 1972, 1858, 1955, 1958, 1960, 1961, 1885, 1902,
/* 490 */ 1986, 1879, 2021, 2018, 2004, 1908, 1871, 1967, 2010, 1968,
/* 500 */ 1962, 2003, 1903, 1931, 2025, 2030, 2033, 1926, 1936, 2041,
/* 510 */ 2006, 2048, 2049, 2053, 2050, 2009, 2019, 2054, 1984, 2052,
/* 520 */ 2060, 2016, 2051, 2062, 2055, 1937, 2064, 2067, 2068, 2069,
/* 530 */ 2072, 2070, 1998, 1956, 2074, 2076, 1987, 2071, 2079, 1963,
/* 540 */ 2077, 2075, 2078, 2081, 2082, 2014, 2034, 2026, 2073, 2042,
/* 550 */ 2012, 2085, 2097, 2099, 2100, 2098, 2101, 2093, 1988, 1989,
/* 560 */ 2106, 2077, 2107, 2110, 2111, 2113, 2112, 2114, 2115, 2118,
/* 570 */ 2125, 2119, 2121, 2122, 2123, 2126, 2127, 2128, 2008, 2005,
/* 580 */ 2013, 2015, 2129, 2133, 2135, 2150, 2151,
};
#define YY_REDUCE_COUNT (412)
#define YY_REDUCE_COUNT (416)
#define YY_REDUCE_MIN (-277)
#define YY_REDUCE_MAX (1772)
#define YY_REDUCE_MAX (1778)
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,
@@ -176474,76 +176477,76 @@ static const short yy_reduce_ofst[] = {
/* 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,
/* 330 */ 1590, 1593, 1592, 1594, 1610, 1595, 1597, 1611, 1612, 1613,
/* 340 */ 1614, 1652, 1655, 1615, 1598, 1600, 1616, 1596, 1622, 1619,
/* 350 */ 1625, 1631, 1657, 1659, 1599, 1601, 1679, 1684, 1661, 1680,
/* 360 */ 1686, 1689, 1695, 1663, 1669, 1677, 1691, 1666, 1672, 1673,
/* 370 */ 1692, 1698, 1700, 1703, 1676, 1705, 1706, 1618, 1604, 1629,
/* 380 */ 1643, 1704, 1711, 1621, 1626, 1648, 1665, 1697, 1699, 1656,
/* 390 */ 1735, 1662, 1701, 1702, 1712, 1714, 1747, 1759, 1767, 1773,
/* 400 */ 1775, 1777, 1660, 1667, 1710, 1763, 1753, 1760, 1761, 1762,
/* 410 */ 1765, 1754, 1755, 1764, 1768, 1766, 1778,
};
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,
/* 50 */ 1254, 1254, 1406, 1254, 1413, 1254, 1254, 1254, 1254, 1254,
/* 60 */ 1492, 1493, 1254, 1254, 1254, 1254, 1543, 1545, 1508, 1420,
/* 70 */ 1419, 1418, 1417, 1526, 1385, 1411, 1404, 1408, 1487, 1488,
/* 80 */ 1486, 1641, 1493, 1492, 1254, 1407, 1455, 1471, 1454, 1254,
/* 90 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 100 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 110 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 120 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 130 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 140 */ 1254, 1254, 1463, 1470, 1469, 1468, 1477, 1467, 1464, 1457,
/* 150 */ 1456, 1458, 1459, 1278, 1254, 1275, 1329, 1254, 1254, 1254,
/* 160 */ 1254, 1254, 1460, 1287, 1448, 1447, 1446, 1254, 1474, 1461,
/* 170 */ 1473, 1472, 1551, 1615, 1614, 1509, 1254, 1254, 1254, 1254,
/* 180 */ 1254, 1254, 1578, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 190 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 200 */ 1254, 1254, 1254, 1254, 1254, 1387, 1578, 1578, 1254, 1287,
/* 210 */ 1578, 1578, 1388, 1388, 1283, 1283, 1391, 1558, 1358, 1358,
/* 220 */ 1358, 1358, 1367, 1358, 1254, 1254, 1254, 1254, 1254, 1254,
/* 230 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1548,
/* 240 */ 1546, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 250 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 260 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1363, 1254,
/* 270 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1608,
/* 280 */ 1254, 1521, 1343, 1363, 1363, 1363, 1363, 1365, 1344, 1342,
/* 290 */ 1357, 1288, 1261, 1655, 1423, 1412, 1364, 1412, 1652, 1410,
/* 300 */ 1423, 1423, 1410, 1423, 1364, 1652, 1304, 1630, 1299, 1397,
/* 310 */ 1397, 1397, 1387, 1387, 1387, 1387, 1391, 1391, 1489, 1364,
/* 320 */ 1357, 1254, 1655, 1655, 1373, 1373, 1654, 1654, 1373, 1509,
/* 330 */ 1638, 1432, 1332, 1338, 1338, 1338, 1338, 1373, 1272, 1410,
/* 340 */ 1638, 1638, 1410, 1432, 1332, 1410, 1332, 1410, 1373, 1272,
/* 350 */ 1525, 1649, 1373, 1272, 1499, 1373, 1272, 1373, 1272, 1499,
/* 360 */ 1330, 1330, 1330, 1319, 1254, 1254, 1499, 1330, 1304, 1330,
/* 370 */ 1319, 1330, 1330, 1596, 1254, 1503, 1503, 1499, 1373, 1588,
/* 380 */ 1588, 1400, 1400, 1405, 1391, 1494, 1373, 1254, 1405, 1403,
/* 390 */ 1401, 1410, 1322, 1611, 1611, 1607, 1607, 1607, 1660, 1660,
/* 400 */ 1558, 1623, 1287, 1287, 1287, 1287, 1623, 1306, 1306, 1288,
/* 410 */ 1288, 1287, 1623, 1254, 1254, 1254, 1254, 1254, 1254, 1618,
/* 420 */ 1254, 1553, 1510, 1377, 1254, 1254, 1254, 1254, 1254, 1254,
/* 430 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 440 */ 1564, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 450 */ 1254, 1254, 1437, 1254, 1257, 1555, 1254, 1254, 1254, 1254,
/* 460 */ 1254, 1254, 1254, 1254, 1414, 1415, 1378, 1254, 1254, 1254,
/* 470 */ 1254, 1254, 1254, 1254, 1429, 1254, 1254, 1254, 1424, 1254,
/* 480 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1651, 1254, 1254,
/* 490 */ 1254, 1254, 1254, 1254, 1524, 1523, 1254, 1254, 1375, 1254,
/* 500 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 510 */ 1254, 1254, 1302, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 520 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 530 */ 1254, 1254, 1254, 1254, 1254, 1254, 1402, 1254, 1254, 1254,
/* 540 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 550 */ 1254, 1593, 1392, 1254, 1254, 1254, 1254, 1642, 1254, 1254,
/* 560 */ 1254, 1254, 1352, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
/* 570 */ 1254, 1254, 1254, 1634, 1346, 1438, 1254, 1441, 1276, 1254,
/* 580 */ 1266, 1254, 1254,
/* 0 */ 1667, 1667, 1667, 1495, 1258, 1371, 1258, 1258, 1258, 1258,
/* 10 */ 1495, 1495, 1495, 1258, 1258, 1258, 1258, 1258, 1258, 1401,
/* 20 */ 1401, 1548, 1291, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 30 */ 1258, 1258, 1258, 1258, 1258, 1494, 1258, 1258, 1258, 1258,
/* 40 */ 1582, 1582, 1258, 1258, 1258, 1258, 1258, 1567, 1566, 1258,
/* 50 */ 1258, 1258, 1410, 1258, 1417, 1258, 1258, 1258, 1258, 1258,
/* 60 */ 1496, 1497, 1258, 1258, 1258, 1258, 1547, 1549, 1512, 1424,
/* 70 */ 1423, 1422, 1421, 1530, 1389, 1415, 1408, 1412, 1491, 1492,
/* 80 */ 1490, 1645, 1497, 1496, 1258, 1411, 1459, 1475, 1458, 1258,
/* 90 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 100 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 110 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 120 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 130 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 140 */ 1258, 1258, 1467, 1474, 1473, 1472, 1481, 1471, 1468, 1461,
/* 150 */ 1460, 1462, 1463, 1282, 1258, 1279, 1333, 1258, 1258, 1258,
/* 160 */ 1258, 1258, 1464, 1291, 1452, 1451, 1450, 1258, 1478, 1465,
/* 170 */ 1477, 1476, 1555, 1619, 1618, 1513, 1258, 1258, 1258, 1258,
/* 180 */ 1258, 1258, 1582, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 190 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 200 */ 1258, 1258, 1258, 1258, 1258, 1391, 1582, 1582, 1258, 1291,
/* 210 */ 1582, 1582, 1392, 1392, 1287, 1287, 1395, 1562, 1362, 1362,
/* 220 */ 1362, 1362, 1371, 1362, 1258, 1258, 1258, 1258, 1258, 1258,
/* 230 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1552,
/* 240 */ 1550, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 250 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 260 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1367, 1258,
/* 270 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1612,
/* 280 */ 1258, 1525, 1347, 1367, 1367, 1367, 1367, 1369, 1348, 1346,
/* 290 */ 1361, 1292, 1265, 1659, 1427, 1416, 1368, 1416, 1656, 1414,
/* 300 */ 1427, 1427, 1414, 1427, 1368, 1656, 1308, 1634, 1303, 1401,
/* 310 */ 1401, 1401, 1391, 1391, 1391, 1391, 1395, 1395, 1493, 1368,
/* 320 */ 1361, 1258, 1659, 1659, 1377, 1377, 1658, 1658, 1377, 1513,
/* 330 */ 1642, 1436, 1409, 1395, 1336, 1409, 1395, 1342, 1342, 1342,
/* 340 */ 1342, 1377, 1276, 1414, 1642, 1642, 1414, 1436, 1336, 1414,
/* 350 */ 1336, 1414, 1377, 1276, 1529, 1653, 1377, 1276, 1503, 1377,
/* 360 */ 1276, 1377, 1276, 1503, 1334, 1334, 1334, 1323, 1258, 1258,
/* 370 */ 1503, 1334, 1308, 1334, 1323, 1334, 1334, 1600, 1258, 1507,
/* 380 */ 1507, 1503, 1377, 1592, 1592, 1404, 1404, 1409, 1395, 1498,
/* 390 */ 1377, 1258, 1409, 1407, 1405, 1414, 1326, 1615, 1615, 1611,
/* 400 */ 1611, 1611, 1664, 1664, 1562, 1627, 1291, 1291, 1291, 1291,
/* 410 */ 1627, 1310, 1310, 1292, 1292, 1291, 1627, 1258, 1258, 1258,
/* 420 */ 1258, 1258, 1258, 1622, 1258, 1557, 1514, 1381, 1258, 1258,
/* 430 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 440 */ 1258, 1258, 1258, 1258, 1568, 1258, 1258, 1258, 1258, 1258,
/* 450 */ 1258, 1258, 1258, 1258, 1258, 1258, 1441, 1258, 1261, 1559,
/* 460 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1418, 1419,
/* 470 */ 1382, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1433, 1258,
/* 480 */ 1258, 1258, 1428, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 490 */ 1258, 1655, 1258, 1258, 1258, 1258, 1258, 1258, 1528, 1527,
/* 500 */ 1258, 1258, 1379, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 510 */ 1258, 1258, 1258, 1258, 1258, 1258, 1306, 1258, 1258, 1258,
/* 520 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 530 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 540 */ 1406, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
/* 550 */ 1258, 1258, 1258, 1258, 1258, 1597, 1396, 1258, 1258, 1258,
/* 560 */ 1258, 1646, 1258, 1258, 1258, 1258, 1356, 1258, 1258, 1258,
/* 570 */ 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1638, 1350, 1442,
/* 580 */ 1258, 1445, 1280, 1258, 1270, 1258, 1258,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -177315,14 +177318,14 @@ static const char *const yyRuleName[] = {
/* 149 */ "limit_opt ::= LIMIT expr",
/* 150 */ "limit_opt ::= LIMIT expr OFFSET expr",
/* 151 */ "limit_opt ::= LIMIT expr COMMA expr",
/* 152 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
/* 152 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt",
/* 153 */ "where_opt ::=",
/* 154 */ "where_opt ::= WHERE expr",
/* 155 */ "where_opt_ret ::=",
/* 156 */ "where_opt_ret ::= WHERE expr",
/* 157 */ "where_opt_ret ::= RETURNING selcollist",
/* 158 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
/* 159 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
/* 159 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt",
/* 160 */ "setlist ::= setlist COMMA nm EQ expr",
/* 161 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
/* 162 */ "setlist ::= nm EQ expr",
@@ -178240,14 +178243,14 @@ static const YYCODETYPE yyRuleInfoLhs[] = {
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 */
192, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt */
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 */
192, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt */
271, /* (160) setlist ::= setlist COMMA nm EQ expr */
271, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */
271, /* (162) setlist ::= nm EQ expr */
@@ -178654,14 +178657,14 @@ static const signed char yyRuleInfoNRhs[] = {
-2, /* (149) limit_opt ::= LIMIT expr */
-4, /* (150) limit_opt ::= LIMIT expr OFFSET expr */
-4, /* (151) limit_opt ::= LIMIT expr COMMA expr */
-6, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
-8, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt */
0, /* (153) where_opt ::= */
-2, /* (154) where_opt ::= WHERE expr */
0, /* (155) where_opt_ret ::= */
-2, /* (156) where_opt_ret ::= WHERE expr */
-2, /* (157) where_opt_ret ::= RETURNING selcollist */
-4, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */
-9, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
-11, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt */
-5, /* (160) setlist ::= setlist COMMA nm EQ expr */
-7, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */
-3, /* (162) setlist ::= nm EQ expr */
@@ -179579,10 +179582,17 @@ static YYACTIONTYPE yy_reduce(
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 */
case 152: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret orderby_opt limit_opt */
{
sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy563, &yymsp[-1].minor.yy0);
sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy563,yymsp[0].minor.yy590,0,0);
sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy563, &yymsp[-3].minor.yy0);
#ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
if( yymsp[-1].minor.yy402 || yymsp[0].minor.yy590 ){
updateDeleteLimitError(pParse,yymsp[-1].minor.yy402,yymsp[0].minor.yy590);
yymsp[-1].minor.yy402 = 0;
yymsp[0].minor.yy590 = 0;
}
#endif
sqlite3DeleteFrom(pParse,yymsp[-4].minor.yy563,yymsp[-2].minor.yy590,yymsp[-1].minor.yy402,yymsp[0].minor.yy590);
}
break;
case 157: /* where_opt_ret ::= RETURNING selcollist */
@@ -179591,12 +179601,11 @@ static YYACTIONTYPE yy_reduce(
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 */
case 159: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret orderby_opt limit_opt */
{
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;
sqlite3SrcListIndexedBy(pParse, yymsp[-7].minor.yy563, &yymsp[-6].minor.yy0);
if( yymsp[-3].minor.yy563 ){
SrcList *pFromClause = yymsp[-3].minor.yy563;
if( pFromClause->nSrc>1 ){
Select *pSubquery;
Token as;
@@ -179605,9 +179614,17 @@ static YYACTIONTYPE yy_reduce(
as.z = 0;
pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
}
yymsp[-5].minor.yy563 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy563, pFromClause);
yymsp[-7].minor.yy563 = sqlite3SrcListAppendList(pParse, yymsp[-7].minor.yy563, pFromClause);
}
sqlite3Update(pParse,yymsp[-5].minor.yy563,yymsp[-2].minor.yy402,yymsp[0].minor.yy590,yymsp[-6].minor.yy502,0,0,0);
sqlite3ExprListCheckLength(pParse,yymsp[-4].minor.yy402,"set list");
#ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
if( yymsp[-1].minor.yy402 || yymsp[0].minor.yy590 ){
updateDeleteLimitError(pParse,yymsp[-1].minor.yy402,yymsp[0].minor.yy590);
yymsp[-1].minor.yy402 = 0;
yymsp[0].minor.yy590 = 0;
}
#endif
sqlite3Update(pParse,yymsp[-7].minor.yy563,yymsp[-4].minor.yy402,yymsp[-2].minor.yy590,yymsp[-8].minor.yy502,yymsp[-1].minor.yy402,yymsp[0].minor.yy590,0);
}
break;
case 160: /* setlist ::= setlist COMMA nm EQ expr */

View File

@@ -1214,7 +1214,23 @@ describe("SQLite-specific features", () => {
await sql`insert into "users" ("id", "name", "verified", "created_at") values (null, ${"John"}, ${0}, strftime('%s', 'now')) returning upper("name")`;
expect(upperName).toBe("JOHN");
});
test("order by and limit in delete statements", async () => {
await using sql = new SQL("sqlite://:memory:");
await sql`CREATE TABLE users (id INTEGER, name TEXT)`;
await sql`INSERT INTO users VALUES (1, 'John'), (2, 'Jane'), (3, 'Austin')`;
const result = await sql`delete from "users" where "users"."id" = ${1} order by "users"."name" asc limit ${1}`;
expect(result.count).toBe(1);
expect(result.command).toBe("DELETE");
});
test("order by and limit in update statements", async () => {
await using sql = new SQL("sqlite://:memory:");
await sql`CREATE TABLE users (id INTEGER, name TEXT)`;
await sql`INSERT INTO users VALUES (1, 'John'), (2, 'Jane'), (3, 'Austin')`;
const result =
await sql`update "users" set "name" = 'John' where "users"."id" = ${1} order by "users"."name" asc limit ${1}`;
expect(result.count).toBe(1);
expect(result.command).toBe("UPDATE");
});
test("last_insert_rowid()", async () => {
await sql`CREATE TABLE rowid_test (id INTEGER PRIMARY KEY, value TEXT)`;
await sql`INSERT INTO rowid_test (value) VALUES ('test')`;